pecompact脱壳机:PECompact壳研究和解密脱壳

来源:安全中国

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修改,当时没有发现,如果修改了主,使用脱壳脚本时候会有问题,建议保留原来备份.修改作为专门脱用未修改脱壳时非法工具



  • 篇文章: PECompactOEP简易查找思路方法

  • 篇文章: 没有了
  • Tags:  pecompact 查壳脱壳 未知壳脱壳教程 pecompact脱壳机

    延伸阅读

    最新评论

    发表评论