今天在脱一个ASPACK变形壳的时候,发现中间有一步很繁琐,需要重复N遍!有时候数错了又得重来,很不爽,于是就想到了利用按键精灵来帮忙完成!过程如下---->>
首先用OD载入被加壳文件,停在了这里
| 00410944 >- E9 327E0000 jmp 0041877B ;停在这里 |
然后F8单步,直到这里开始使用ESP定律
| 0041877B 68 13884100 push 00418813 |
运行后就转到了这里
| 0041861B 89E5 mov ebp, esp ;这个位置 |
然后开始单步,到0041862E ^ FF2485 2B814100 jmp dword ptr [eax*4+41812B]这里
| 0041862A 46 inc esi |
在这里如果直接让程序运行到 00418635 66:8B45 00 mov ax, word ptr [ebp] 这里的话,程序就会跑起来!
这里需要在 0041862E ^ FF2485 2B814100 jmp dword ptr [eax*4+41812B] 下断点,然后按F9,看看按多少次程序会跑起来!
我按了五十多下程序终于跑起来了,然后重新再来一次,按五十多减一下(比如按56下程序跑起来,那么就只按55下),再取消断点,F8单步走,程序跳到这里
| 004185FC 89EC mov esp, ebp ;跳到这里,继续单步 |
接着继续F8单步走,>>>>>>一直到这里
| 00410B19 9C pushfd |
在00410B1B E8 00000000 call 00410B20 停下来继续使用ESP定律,运行后程序就到了这儿>>
| 00410B7C 9D popfd ;到了这儿 继续F8单步 |
停下来后,继续F8单步走,走几次后可能会到这个地方
| 004022C0 E8 db E8 ;到这里 |
其实004022C0 E8 db E8 这里就是OEP了,使用鼠标右键,选择分析,从模块中删除分析,就变成了这样
| 004022C0 E8 970B0000 call 00402E5C ; jmp 到 COMCTL32.InitCommonControls |
停在了004022C0 E8 970B0000 call 00402E5C 这个位置,这里就是OEP,从这里脱壳就可以了!
脱壳后程序无法运行,使用importREC修复下就可以了!
在上面0041862E ^ FF2485 2B814100 jmp dword ptr [eax*4+41812B]这里的时候,由于重复的次数太多,所以这里可以请 按键精灵 上场
打开按键精灵,新建一个任务,插入组合键,Shift+F9 然后在后面插入个延迟时间,我设置的是200毫秒,不插入延迟时间的话中途会出现问题!
接着循环这段代码,程序跑起来的次数减一次就可以了,到了0041862E ^ FF2485 2B814100 jmp dword ptr [eax*4+41812B]的时候下断点,然后运行按键精灵的脚本就搞定了。呵呵
很方便