void lockUnhandledExceptionFilter() {
HMODULE kernel32 = LoadLibraryA("kernel32.dll");
Assert(kernel32);
if (FARPROC gpaSetUnhandledExceptionFilter = GetProcAddress(kernel32, "SetUnhandledExceptionFilter")) {
unsigned char expected_code[] = {
0x8B, 0xFF, // mov edi,edi
0x55, // push ebp
0x8B, 0xEC, // mov ebp,esp
};
// only replace code we expect
if (memcmp(expected_code, gpaSetUnhandledExceptionFilter, sizeof(expected_code)) == 0) {
unsigned char new_code[] = {
0x33, 0xC0, // xor eax,eax
0xC2, 0x04, 0x00, // ret 4
};
BOOST_STATIC_ASSERT(sizeof(expected_code) == sizeof(new_code));
DWORD old_protect;
if (VirtualProtect(gpaSetUnhandledExceptionFilter, sizeof(new_code), PAGE_EXECUTE_READWRITE, &old_protect)) {
CopyMemory(gpaSetUnhandledExceptionFilter, new_code, sizeof(new_code));
DWORD dummy;
VirtualProtect(gpaSetUnhandledExceptionFilter, sizeof(new_code), old_protect, &dummy);
FlushInstructionCache(GetCurrentProcess(), gpaSetUnhandledExceptionFilter, sizeof(new_code));
}
}
}
FreeLibrary(kernel32);
}
hook对应的汇编码0x8B, 0xFF,0x55,0x8B, 0xEC, // mov ebp,esp
篡改UnhandledExceptionFilter
最新推荐文章于 2021-12-02 15:36:25 发布
本文介绍了一种通过篡改 SetUnhandledExceptionFilter 函数实现的方法,该方法能够在 Windows 系统中修改异常处理流程,实现特定的内存保护或调试目的。
2539

被折叠的 条评论
为什么被折叠?



