手动脱壳 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修复的文件,修复后正常运行。