在 IDA Pro 中处理 INT 2D 反调试器技术

逆向工程 艾达 调试 反调试
2021-06-30 11:03:18

我正在分析一个IDA Pro使用int 2Dh作为反调试技术的 PE 文件

CODE:00455050 push    ebp
CODE:00455051 mov     ebp, esp
CODE:00455053 push    ecx
CODE:00455054 push    ebx
CODE:00455055 push    esi
CODE:00455056 push    edi
CODE:00455057 xor     eax, eax
CODE:00455059 push    ebp
CODE:0045505A push    offset loc_455076
CODE:0045505F push    dword ptr fs:[eax]
CODE:00455062 mov     fs:[eax], esp
CODE:00455065 int     2Dh             ; Windows NT - debugging services: eax = type
CODE:00455067 inc     eax
CODE:00455068 mov     [ebp+var_1], 1
CODE:0045506C xor     eax, eax
CODE:0045506E pop     edx
CODE:0045506F pop     ecx
CODE:00455070 pop     ecx
CODE:00455071 mov     fs:[eax], edx
CODE:00455074 jmp     short loc_455084

我应该如何配置 IDA Pro 来处理动态分析中的这个中断/异常?
我正在使用本地 win32 调试器

1个回答

代码期望发生异常,这将在没有调试器的情况下发生。如果存在调试器,断点异常通常会被调试器抑制,并且执行将在 0x455067 或 0x455068 处继续,具体取决于调试器。

您有两个简单的选择:一个选择是您可以让执行达到 0x455084,然后将 var_1 更改回零(或它最初具有的任何值)。你不想要的是它的值为“1”。

另一种选择是将 0x455065 处的字节从 0xCD 更改为 0xFF(例如),然后让它执行。此序列将导致发生异常,这正是您想要发生的(注意异常代码不会正确,因此您需要观察代码是否检查了 0x80000003,并采用该代码路径) . 执行将转移到 0x455076 处的处理程序,此时您可以将 0x455065 处的字节更改回 0xCD(以防代码自检),然后继续调试。