-
-
[原创]SysWOW64的奇技淫巧
-
发表于:
2020-7-28 16:29
8473
-
我感觉这玩意儿应该有人写过,但中文互联网怎么搜都搜不到,顺便看了看英文资料。发一个自己的实现好了
这玩意儿用处:
(1)反调试
(2)能让win10 32位程序运行64位代码(其他操作系统的wow64据说实现底层不太一样,不保证同代码能完全运行)
最近在试着转二进制漏洞方向,部署的时候出现了各种版本问题和反复崩溃,看到dynamoRIO下已经有成千的issue,想让开发者来debug肯定是不可能,于是只好自己上了。
在调试的过程中,发现dynamoRIO有一段ASM特别有意思
他是用来在32位程序中执行64位function的一段loader,摘抄见附录
关键的代码只有这么几行
通过一个长跳转,进入CS64_SELECTOR段选择子后,进入64位模式
我试了试摘出来写成汇编,效果非常好。
在OD里不仅分析不出64位的汇编,而且单步会直接跟飞。在windbg里只有单步才能分析出x64的代码
自己写的汇编如下
至于为什么这么改,外网有篇文章(https://www.malwaretech.com/2014/02/the-0x33-segment-selector-heavens-gate.html)写得特别好,我就不画蛇添足了,大概把大意翻译过来
首先,长跳转的机制是修改段寄存器CS来进行寻址和改变权限。段寄存器的结构分为selector、TL和RPL,selector代表段寄存器在GDT中对应的index,TL代表应该查局部表还是全局表(LDT/GDT),RPL是权限位。0x23和0x33的段寄存器如下。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)