手动脱壳----PECompact 2.x -> Jeremy Collake

来源:互联网 发布:淘宝上的快排能买吗 编辑:程序博客网 时间:2024/06/10 15:59

网上也有很多手动脱壳的教程,但是光看不写总觉的像自己没学过似的。

 

操作环境:

       操作系统:Windows 7 Ultimate

       OD版本:Olldbg 1.10

       被脱壳软件:文章最后提供下载

下边利用ESP原理脱壳。

 

首先使用OD载入图标王程序,出现提示确定即可。开头的代码如下:

00405A99 > $  B8 D0C74200   MOV EAX,图标王.0042C7D000405A9E   .  50            PUSH EAX00405A9F   .  64:FF35 00000>PUSH DWORD PTR FS:[0]               00405AA6   .  64:8925 00000>MOV DWORD PTR FS:[0],ESP00405AAD   .  33C0          XOR EAX,EAX00405AAF   .  8908          MOV DWORD PTR DS:[EAX],ECX00405AB1   .  50            PUSH EAX00405AB2   .  45            INC EBP

单步执行完00405A9E处的PUSH EAX后,观察ESP寄存器为:

ESP 0012FF8C

下一步就在ESP指向的位置设置硬件访问断点,在命令框中输入:

hr 12ff88

按下F9,使程序直接运行,在我运行时出现违规异常,按下Shift+F9忽略异常。

程序运行到这里中断:

76DC8D0B    3B45 F8         CMP EAX,DWORD PTR SS:[EBP-8]76DC8D0E    72 09           JB SHORT ntdll.76DC8D1976DC8D10    3B45 F4         CMP EAX,DWORD PTR SS:[EBP-C]76DC8D13    0F82 E9EF0400   JB ntdll.76E17D02

那么在这之后一直单步执行直到:

0042C87D    8985 23120010   MOV DWORD PTR SS:[EBP+10001223],EAX0042C883    8BF0            MOV ESI,EAX0042C885    59              POP ECX0042C886    5A              POP EDX0042C887    03CA            ADD ECX,EDX0042C889    68 00800000     PUSH 80000042C88E    6A 00           PUSH 00042C890    57              PUSH EDI0042C891    FF11            CALL DWORD PTR DS:[ECX]0042C893    8BC6            MOV EAX,ESI0042C895    5A              POP EDX0042C896    5E              POP ESI0042C897    5F              POP EDI0042C898    59              POP ECX0042C899    5B              POP EBX                                  ; 7FFD60000042C89A    5D              POP EBP0042C89B    FFE0            JMP EAX

当执行完0x0042C89B中JMP EAX指令后,程序就会跳到程序入口点执行:

00405A99 > $  55            PUSH EBP00405A9A   ?  8BEC          MOV EBP,ESP00405A9C   ?  6A FF         PUSH -100405A9E   .  68 089D4100   PUSH 图标王.00419D0800405AA3   ?  68 D08B4000   PUSH 图标王.00408BD000405AA8   ?  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]00405AAE   ?  50            PUSH EAX00405AAF   .  64:8925 00000>MOV DWORD PTR FS:[0],ESP

这时,使用OllyDump插件进行脱壳即可。

 

注意的是,并不是程序刚刚运行到程序入口点才能够使用OllyDump脱壳,如果一不小心运行过了之后,在脱壳设置时,手动将入口点地址处的数值修改为入口点地址-起始地址即可,如本程序中入口点地址应该是405A99 - 400000 = 5A99

好了,到这里就脱壳完毕了。

 

软件下载:实验程序----图标王

 

在此感谢图标王编写作者~
 

原创粉丝点击