| 网站首页 | Vip会员区 | 教程 | 下载 | 图片 | QQ家园 | 免费资源 | 在线服务 | 论坛 | 博客 | 程序开发 | It学堂 | 作品发布 | 
站点相关
代刻黑客光盘或订做光盘

精品软件程序定制

为您的网站或者服务器保驾护航
相关内容
最 新 热 门
相 关 文 章
没有相关文章
您现在的位置: 红色黑客联盟 >> 教程 >> 其他技术 >> 软件破解 >> 正文
PECompact壳研究与解密脱壳
文章录入:7747.Net    责任编辑:7747.Net 

【字体:

因为PECompact有2种加壳方式,我也拜读了DiKeN的"PECompact的OEP的简易查找方法",于是想深入研究一下. 

 

这是98的Notepad.exe使用PECompact(JCALG1)压缩过的结果 

0040AB20 >EB 06            JMP SHORT NOTEPAD.0040AB28<==第一条指令 

0040AB22  68 CC100000      PUSH 10CC<======这就是程序的原始OEP的RVA地址 

 

这是这是98的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  

这样就不能用DiKeN的"PECompact的OEP的简易查找方法"来找程序的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的修改,当时没有发现,如果修改了主程序,使用脱壳脚本的时候会有问题,建议保留原来的备份.修改的程序作为专门脱用未修改程序脱壳时非法的工具

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     | 设为首页 | 加入收藏 | 广告服务 | 我要投稿 | 关于我们 | 版权申明 | 免责声明 | 隐私声明 | 网站地图 |