出于教育原因,我刚刚进入逆向工程,所以我找到了一个我想要逆向的应用程序。基本上它有一个基本的身份验证系统(登录和通过)。我使用 Wireshark 嗅探流量,发现数据包已加密。所以我开始对它进行逆向工程。我用隐形插件尝试了 Ollydbg 和 IDApro,但仍然无法用调试器运行它。当我尝试使用调试器运行它时,这是一条消息:
A debugger has been found running in you system
Please unload it from memory and restart your computer
我想这是一个防止调试的库,因为它是一个非常标准的消息,因为当我尝试用谷歌搜索它时,它不仅出现在这个程序中。
所以我深入研究代码。此时我只发现了这两个功能:
.vmp1:013F9BDC loc_13F9BDC: ; CODE XREF: sub_1427AA5+4j
.vmp1:013F9BDC not dl
.vmp1:013F9BDE bt ebx, 1Eh
.vmp1:013F9BE2 rol dl, 3
.vmp1:013F9BE5 call loc_144B5CD
.vmp1:013F9BEA and al, 14h
.vmp1:013F9BEC xor al, 0C3h
.vmp1:013F9BEE lodsb
.vmp1:013F9BEF cmp al, 0EAh
.vmp1:013F9BF1 imul ebx
.vmp1:013F9BF3 add [eax-36h], edx
.vmp1:013F9BF6 mov dh, 0DFh
.vmp1:013F9BF8 sub ch, [eax]
.vmp1:013F9BFA test al, dh
.vmp1:013F9BFC wait
.vmp1:013F9BFD adc esi, 28h
.vmp1:013F9C00 int 3 ; Trap to Debugger
.vmp1:013F9C01 sub ah, bh
.vmp1:013F9C03 shr byte ptr [ecx], 1
.vmp1:013F9C05 jmp far ptr 0F03Dh:0AE62FB1Fh
loc_1402816: ; CODE XREF: sub_15E0009-1DD80Ej
.vmp1:01402816 pop ebp
.vmp1:01402817 arpl [ebx], cx
.vmp1:0140281A adc al, 0C8h
.vmp1:0140281C int 3 ; Trap to Debugger
.vmp1:0140281D sbb al, 0B2h
.vmp1:0140281F loopne loc_140285A
.vmp1:01402821 or al, 0CFh
.vmp1:01402823 fisttp qword ptr [edi]
.vmp1:01402825 xchg eax, edx
.vmp1:01402826 sbb ah, 7Fh
.vmp1:01402829 retf
.vmp1:01402829 ; END OF FUNCTION CHUNK FOR sub_15E0009
.vmp1:01402829 ; -----------------------------------------------------------------
.vmp1:0140282A dw 0BB70h
.vmp1:0140282C dd 2FEC5FA0h, 1C84B195h, 0E7C1879Fh, 0F4D8BCF8h
.vmp1:0140283C ; -----------------------------------------------------------------
.vmp1:0140283C push ds
.vmp1:0140283D ; START OF FUNCTION CHUNK FOR sub_15E0009
我还尝试取消定义这些或定义为 nop。我对倒车很陌生,我只知道基本的汇编程序,但有 C 或 C++ 和其他一些语言的背景。我怎样才能避免这种反调试?也许插件的一些特定设置?或者也许使用另一个调试器?现在我正在尝试使用 Windbg 并赢得 32 调试器。或者请告诉我在哪里挖。这是 DIA 输出。