手动脱壳 PEncrypt V4.0

作者:佚名    文章来源:本站原创    点击数:    更新时间:2008-5-25

 

去Oep出的过程我们先想象一下。

0040CCD7    8B4424 04       MOV EAX,DWORD PTR SS:[ESP+4]
0040CCDB    8B00            MOV EAX,DWORD PTR DS:[EAX]
0040CCDD    3D 04000080     CMP EAX,80000004
0040CCE2    74 06           JE SHORT NOTEPAD.0040CCEA
0040CCE4    4B              DEC EBX
0040CCE5    65:72 61        JB SHORT NOTEPAD.0040CD49                ; 多余的前缀
0040CCE8    6C              INS BYTE PTR ES:[EDI],DX                 ; I/O 命令
0040CCE9    61              POPAD
0040CCEA    EB 02           JMP SHORT NOTEPAD.0040CCEE
...........................................................

经过中间过程。

Call  XXXXX

循环..............

popad
jmp XXXXXX



ret
入口点,代码跨段。
那我们滚动条向上面看,当前段起始位置是40c000
跨段入口点的地址必须是小于40c000
那我们可以下条件断点了。
命令行下命令

tc eip<40c000

截图



回车后,几秒后看

截图



呵呵,我们熟悉的记事本入口,关键它已经跨段,换个程序通样处理,我们已经学会方法。

004010CC    55              PUSH EBP    跨段来到这里,我们再这里用Od的Dump插件直接脱壳。
004010CD    8BEC            MOV EBP,ESP
004010CF    83EC 44         SUB ESP,44
004010D2    56              PUSH ESI
004010D3    FF15 E4634000   CALL DWORD PTR DS:[<&KERNEL32.GetCommand>; KERNEL32.GetCommandLineA
004010D9    8BF0            MOV ESI,EAX
004010DB    8A00            MOV AL,BYTE PTR DS:[EAX]
004010DD    3C 22           CMP AL,22
004010DF    75 1B           JNZ SHORT NOTEPAD.004010FC
004010E1    56              PUSH ESI
004010E2    FF15 F4644000   CALL DWORD PTR DS:[<&USER32.CharNextA>]  ; USER32.CharNextA

脱壳后发现程序不能运行,这时需要用Imprec修复引入函数表(Import Table)
在Oep处填10cc,点IT自动搜索,然后点获输入信息,看到输入表全部有效,点修复抓取文件按钮,选择Dump的文件,修复它,运行后仍然不能运行。
呵,我们还有Lordpe重建PE的功能,用上吧。

运行Lordpe重建Pe,选择Imprec修复的文件,修复后正常运行。

上一页  [1] [2] 

  • 上一篇文章:
  • 下一篇文章: