PECompact有2种加壳方式,我也拜读了DiKeN"PECompactOEP简易查找思路方法",于是想深入研究下.
这是98Notepad.exe使用PECompact(JCALG1)压缩过结果
0040AB20 >EB 06 JMP SHORT NOTEPAD.0040AB28<第条指令
0040AB22 68 CC100000 PUSH 10CC<这就是原始OEPRVA地址
这是这是98Notepad.exe使用PECompact(aPLib)压缩过结果
0187:0040AB1F 68EB0668CC PUSH DWORD CC6806EB<第条指令
0187:0040AB24 1000 ADC [EAX],AL
0187:0040AB26 00C3 ADD BL,AL
0187:0040AB28 9C PUSHF
0187:0040AB29 60 PUSHA
这样就不能用DiKeN"PECompactOEP简易查找思路方法"来找OEP了.
于是我手动跟踪了下,并做了记录:
Notepad.exe使用PECompact(JCALG1)压缩过
0187:0040AAFF 65EB06 JMP SHORT 0040AB08
0187:0040AB02 68CC100000 PUSH DWORD 10CC
0187:0040AB07 C3 RET
0187:0040AB08 9C PUSHF
0187:0040AB09 60 PUSHA
0187:0040AB0A E802000000 CALL 0040AB11 //这里按F8继续.
0187:0040AB0F 33C0 XOR EAX,EAX
0187:0040AB11 8BC4 MOV EAX,ESP
0187:0040AB13 83C004 ADD EAX,BYTE +04
......
按F12,到了这里
0187:0040AB77 F3A5 REP MOVSD
0187:0040AB79 8BFB MOV EDI,EBX
0187:0040AB7B C3 RET //光标停在这里
0187:0040AB7C BDCF400000 MOV EBP,40CF
0187:0040AB81 8BF7 MOV ESI,EDI
......
再按F12,到了这里
0187:0040D551 68CC104000 PUSH DWORD 004010CC
0187:0040D556 C20400 RET 04 //返回OEP处了!
0187:0040D559 8BB55B974000 MOV ESI,[EBP+0040975B]
到了OEP直接Makepe.
Notepad.exe使用PECompact(aPLib)压缩
0187:0040AB1F 68EB0668CC PUSH DWORD CC6806EB
0187:0040AB24 1000 ADC [EAX],AL
0187:0040AB26 00C3 ADD BL,AL
0187:0040AB28 9C PUSHF
0187:0040AB29 60 PUSHA
0187:0040AB2A E802000000 CALL 0040AB31 //F8进去后
0187:0040AB2F 33C0 XOR EAX,EAX
0187:0040AB31 8BC4 MOV EAX,ESP
......
按F12
0187:0040AB97 F3A5 REP MOVSD
0187:0040AB99 8BFB MOV EDI,EBX
0187:0040AB9B C3 RET //停在这里
0187:0040AB9C BDCF400000 MOV EBP,40CF
......
再按F12
0187:0040D54F 9D POPF
0187:0040D550 50 PUSH EAX
0187:0040D551 68CC104000 PUSH DWORD 004010CC
0187:0040D556 C20400 RET 04 //又返回OEP了,如何这么简单?
这里还有点要介绍说明,我发现使用PECompact压缩过,用PROCDUMP或LordPE就算Dump出来还是不能使用
对于Dump出来必须要修改入口地址才可以
记得以前在脱PECompact壳时用PROCDUMP来Dump就非法,顺便用TRW跟了下,有点点体会如下:
记得在TRW中输入Faults on,然后用PROCDUMP脱壳吧,然后TRW就跳出来了
0187:004055C3 8B7D10 MOV EDI,[EBP+10]
0187:004055C6 56 PUSH ESI
0187:004055C7 51 PUSH ECX
0187:004055C8 AC LODSB //停在这里,于是下断 bpx eip-1的后就F5
0187:004055C9 AE SCASB
0187:004055CA 750B JNZ 004055D7
0187:004055CC 803F00 CMP BYTE [EDI],00
然后重新运行PROCDUMP,继续脱壳
0187:004055C3 8B7D10 MOV EDI,[EBP+10]
0187:004055C6 56 PUSH ESI
0187:004055C7 51 PUSH ECX //断在这里
让我们来修改吧
a eip+1
nop
回车
F5
看看是不是正常脱壳了啊!当然也可以直接修改主,以后就不用这样反复修改了!查找8B 7D 10 56 51 AC AE,改为8B 7D 10 56 51 90 AE就可以了!
不知道会不会有什么不对,还请高手指正!
后记,其实我在跟踪时候并不是上面写时候那么容易,本来我是步步慢慢走,后来跟了几遍,就发现了这个规律,所以没有详细写跟踪过程,只是把自己整理总结写了出来,如果有什么不足或欠缺,还请多多指教,本人才疏学浅,还需要大家帮助
修正点
有关Procdump修改,当时没有发现,如果修改了主,使用脱壳脚本时候会有问题,建议保留原来备份.修改作为专门脱用未修改脱壳时非法工具
最新评论