最初由 ridincal 发布
谢谢wan,我也是在MessageBoxA下的断点,可不知怎么返回调用代码
这个我也不知怎么说了,就是逐层返回,可以说是返回定律
我用的是死办法,我再下来跟踪一下吧,写一下过程给你看吧
用工具脱壳后,OD载入已脱壳文件运行
运行中断,看堆栈
0012E680 0043932E /CALL 到 MessageBoxA 来自 66.00439328 //右键在反汇编中跟随
0012E684 001E0286 |hOwner = 001E0286 ('晨风论坛灌水机――增强版',class='#32770')
004392E6 6A 14 push 14 ; 开始处下断,Ctrl+F2重新加载
004392E8 68 F03A4800 push 66.00483AF0
……省略……
00439328 FF15 28454700 call dword ptr ds:[<&USER32.MessageBoxA>] ; USER32.MessageBoxA
0043932E 8945 E4 mov dword ptr ss:[ebp-1C],eax ; 返回到这里,往上看
运行中断,看堆栈
0012E6CC 0043973C 返回到 66.0043973C 来自 66.004392E6 //右键在反汇编中跟随
0043970F 8B4424 08 mov eax,dword ptr ss:[esp+8] ; 在这里下断,重新加载
00439713 85C0 test eax,eax
……省略……
00439737 E8 AAFBFFFF call 66.004392E6
0043973C 83C4 10 add esp,10 ; 返回到这里,往上看
运行中断,看堆栈
0012E6E4 00411E18 返回到 66.00411E18 来自 66.0043970F //右键在反汇编中跟随
00411DE2 E8 79400000 call 66.00415E60
00411DE7 83F8 03 cmp eax,3
00411DEA 74 3F je short 66.00411E2B ; 关键跳就去自校验,JMP
00411DEC E8 6F400000 call 66.00415E60
00411DF1 83F8 04 cmp eax,4
00411DF4 74 35 je short 66.00411E2B ; JMP
00411DF6 E8 A54D0000 call 66.00416BA0
00411DFB 85C0 test eax,eax
00411DFD 75 2C jnz short 66.00411E2B ; JMP
00411DFF 8305 7C5F4A00 01 add dword ptr ds:[4A5F7C],1
00411E06 50 push eax
00411E07 68 705D4700 push 66.00475D70
00411E0C 68 A86D4700 push 66.00476DA8
00411E11 8BCE mov ecx,esi
00411E13 E8 F7780200 call 66.0043970F
00411E18 8B16 mov edx,dword ptr ds:[esi] ; 返回到这里,往上看
已经写得很详细了,希望你能有所收获吧````