如何使用 OllyDbg/Immunity 高效调试循环?

逆向工程 ollydbg 调试 免疫调试器 异或
2021-06-23 17:51:56

我目前正在反转一个如下所示的函数

.text:0040383F 8D 04 BF          lea     eax, [edi+edi*4]
.text:00403842 6A 14             push    20
.text:00403844 C1 E0 03          shl     eax, 3
.text:00403847 99                cdq
.text:00403848 59                pop     ecx
.text:00403849 F7 F9             idiv    ecx
.text:0040384B 03 45 08          add     eax, [ebp+arg_0]
.text:0040384E 8A 84 30 C8 31 00+mov     al, [eax+esi+31C8h]
.text:00403855 32 C3             xor     al, bl
.text:00403857 88 84 3E 28 27 00+mov     [esi+edi+2728h], al
.text:0040385E 47                inc     edi
.text:0040385F 81 FF 07 0B 00 00 cmp     edi, 0B07h
.text:00403865 75 D8             jnz     short loc_40

因为我不知道那里发生了什么,所以我想用 OllyDbg 调试这部分。我想了解al , bl内部的内容以及循环运行的所有“ 0B07h ”步骤的xor al, bl结果

我刚刚看到 Immunity 提供了某种脚本功能。是否可以使用 Immunity 中的简单 python 脚本来实现这一点?也许 OllyDbg 有其他方法?

我只想要这样的东西:

If EIP == "403855" then print al, bl
Else go_ahead
1个回答

无需编写脚本。

在 OllyDbg 的反汇编窗口中,在 line.text:00403855 32 C3 xor al, bl单击鼠标左键选择该行,然后右键单击所选行并选择Breakpoint → Conditional log...

在打开的断点对话框中,使用以下选项:

条件日志

OK,运行程序,每次.text:00403855 32 C3 xor al, bl执行,OllyDbg 都会将al的值打印bl到日志窗口。