-
-
[原创]SysWOW64的奇技淫巧
-
发表于:
2020-7-28 16:29
8867
-
我感觉这玩意儿应该有人写过,但中文互联网怎么搜都搜不到,顺便看了看英文资料。发一个自己的实现好了
这玩意儿用处:
(1)反调试
(2)能让win10 32位程序运行64位代码(其他操作系统的wow64据说实现底层不太一样,不保证同代码能完全运行)
最近在试着转二进制漏洞方向,部署的时候出现了各种版本问题和反复崩溃,看到dynamoRIO下已经有成千的issue,想让开发者来debug肯定是不可能,于是只好自己上了。
在调试的过程中,发现dynamoRIO有一段ASM特别有意思
他是用来在32位程序中执行64位function的一段loader,摘抄见附录
关键的代码只有这么几行
通过一个长跳转,进入CS64_SELECTOR段选择子后,进入64位模式
我试了试摘出来写成汇编,效果非常好。
在OD里不仅分析不出64位的汇编,而且单步会直接跟飞。在windbg里只有单步才能分析出x64的代码
自己写的汇编如下
至于为什么这么改,外网有篇文章(2ccK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2E0j5h3I4%4j5i4u0W2N6r3g2U0K9q4)9J5k6h3y4G2L8g2)9J5c8U0t1H3x3e0c8Q4x3V1j5H3x3W2)9J5c8Y4c8Z5k6g2)9J5k6o6m8^5x3K6y4Q4x3X3c8K6k6h3N6E0k6h3&6@1i4K6u0V1M7$3g2D9k6h3y4@1L8%4u0Q4x3X3c8Z5k6h3q4$3k6h3&6K6i4K6u0V1k6$3q4@1k6g2)9J5k6h3S2@1L8h3I4Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8e0g2Q4z5o6k6Q4z5e0W2Q4c8e0g2Q4b7V1g2Q4z5e0N6Q4c8e0N6Q4z5o6W2Q4b7U0W2Q4c8e0g2Q4z5o6S2Q4b7f1u0Q4c8e0g2Q4b7e0g2Q4b7V1c8Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0k6Q4z5o6S2Q4z5e0q4Q4c8e0g2Q4b7U0m8Q4b7U0q4Q4c8e0c8Q4b7U0S2Q4z5p5c8Q4c8e0N6Q4z5e0c8Q4b7V1u0Q4c8e0S2Q4z5f1u0Q4z5o6N6Q4c8e0k6Q4b7U0N6Q4b7V1u0Q4c8e0S2Q4b7U0k6Q4b7U0y4Q4c8e0c8Q4b7V1q4Q4z5o6k6Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4b7e0c8Q4b7e0N6Q4c8e0k6Q4b7e0k6Q4z5o6u0Q4c8e0k6Q4z5p5q4Q4z5p5q4Q4c8e0g2Q4b7e0c8Q4b7e0N6Q4c8e0k6Q4z5o6c8Q4z5p5k6Q4c8e0N6Q4b7V1k6Q4b7V1u0Q4c8e0S2Q4b7f1k6Q4z5e0q4Q4c8e0S2Q4b7V1k6Q4z5o6N6Q4c8e0k6Q4z5f1c8Q4b7e0f1`.
首先,长跳转的机制是修改段寄存器CS来进行寻址和改变权限。段寄存器的结构分为selector、TL和RPL,selector代表段寄存器在GDT中对应的index,TL代表应该查局部表还是全局表(LDT/GDT),RPL是权限位。0x23和0x33的段寄存器如下。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!