WOW64介绍
- Windows on Windows64,是一个Windows操作系统的子系统, 它为现有的 32 位应用程序提供了 32 位的模拟,可以使大多数 32 位应用程序在无需修改的情况下运行在 Windows 64 位版本上。
- WoW64使用三个动态链接库(wow64.dll、wow64cpu.dll、wow64win.dll)实现兼容必需的接口。
- 32位ntdll调用这些兼容的DLL,它们启动一系列调用和跳转,切换到64位模式,并修改函数参数以使它们兼容64位。 最后在64位的ntdll中调度syscall,完成调用。
32位进64位的跳转跟踪
- 在32位API上设置断点跟踪调用
- windbg跟踪
- poi:解引用
- k:查看堆栈调用
- 举例:
NtAllocateVirtualMemory ——>
Wow64SystemServiceCall ——>
Wow64Transition ——>
wow64cpu!KiFastSystemCall(实现从x86向x64模式转换)——> wow64cpu!CpupReturnFromSimulatedCode ——>
wow64cpu!ServiceNoTurbo ——>
wow64!Wow64SystemServiceEx ——>
wow64!whNtAllocateVirtualMemory ——>
wow64!_imp_NtAllocateVirtualMemory (syscall)
jmp 0x33
- 在64位窗口上的每个进程中有2个代码段:
- 0x23=x86模式
- 0x33=x64模式
- 这里call far 33:xxxx,使处理器切换到x64。 从这里开始,我们可以与64位函数通信并执行syscall。
- FS:[0xC0] / GS:[0x100] :保存指向WOW64里FastSysCall的指针
机制利用
- 将x86转换为x64模式时,绕过32位的ntdll,直接在64位dll处注入,绕过32位的钩子