如何让 IDA 执行 int 2D 以便执行转移到异常处理函数?

逆向工程 艾达 反调试
2021-06-19 17:43:04

我正在反转一个动态加载SetUnhandledExceptionFilter并使用它来将函数设置为异常处理程序的程序。然后它调用int 2D- 以便仅在程序未被调试时执行转移到函数。

我想查看函数的动态行为 - 特别是因为我无法理解它如何处理其EXCEPTION_POINTER*参数 - 但我真的不能这样做,因为在我调试时执行甚至不会转移到那里。

如何让 IDA 执行 int 2D 以便我可以看到执行转移到异常处理程序函数并动态查看其行为?

我尝试遵循此答案中的建议,但没有帮助:更改0x2DCD0x2DFF具有完全相同的效果 - 程序崩溃了。

1个回答

KERNEL32.UnhandledExceptionFilter() 很特别,因为它检查调试器是否存在,如果存在则拒绝调用进程定义的 UnhandledExceptionFilter()。为了到达进程定义的例程,您需要在 NTDLL.NtQueryInformationProcess() 上设置断点,并在堆栈上检查这些参数:-1, 7, a pointer, 4, 0. 当您看到它时,您可以跳过函数,将返回值更改为-1,然后继续执行。然后将调用过滤器函数。