最近翻了翻前几年的代码,发现有好多东西都存在记忆的边缘了,所以翻出来复习一下。
(新的)接管异常方式:
【Win7x64下测试通过】
//
//Wow64SetupExceptionDispatch函数的目的便是将32位上下文中的程序指针放到全局变量wow64!Ntdll32KiUserExceptionDispatcher
//以便飞到32位NTDLL中的KiUserExceptionDispatcher。
//
//so, 只需要改掉这里的 wow64!Ntdll32KiUserExceptionDispatcher (00000000`7460af80) 就可以控制64位线程的飞往方向
//
00000000`745dc707 8b0d73e80200 mov ecx,dword ptr [wow64!Ntdll32KiUserExceptionDispatcher (00000000`7460af80)] ds:00000000`7460af80=773c0124
00000000`745dc70d ff151d58ffff call qword ptr [wow64!_imp_CpuSetInstructionPointer (00000000`745d1f30)]
//-> x86汇编:
745dc707 - 8B 0D 73E80200 - mov ecx,[0002E873]
//经过换算 745dc707 + 5 + 0002E873 + 1 即可得出 wow64!Ntdll32KiUserExceptionDispatcher_addr所在地址
//
//最后它修改指向地址即可 *wow64!Ntdll32KiUserExceptionDispatcher_addr = xxxxxx
直接特征码:
DWORD Ntdll32KiUserExceptionDispatcher_addr = _Seach("8b0d73e80200");
*(DWORD*)Ntdll32KiUserExceptionDispatcher_addr = MyExceptionDispatch
这样当前进程的异常处理的完全控制权就得到了。