第8章 压缩与脱壳
第四节 手动脱壳
2、UPX V1.01的壳
目标程序: 用 UPX V1.01压缩过的Notepad.exe
方法一、使用TRW2000来脱壳
★使用工具
TRW2000
FileInfo
★确定壳的种类
拿到这软件后,可用工具FileInfo、gtw、TYP32等侦测文件类型的工具来看看是何种软件压缩的,在这我们以FileInfo 为例,把目标文件复制到FileInfo目录下,在资源管理器下双击FileInfo,再按回车,你将看到报告出来:告诉你这是UPX1.01压缩的软件。
★入口点(Entry Point)确定
◇利用跟踪分析来确定入口点
决大多数 PE 加壳程序在被加密的程序中加上一个或多个段。 所以看到一个跨段的 JMP 就有可能是了。 UPX 用了一次跨段的 JMP 。 就是你一步步跟踪时会看到代码有一突跃,一般再跟据领空文件名的变化,就能确定入口点了。运行TRW2000并装载目标程序,然后LOAD,你将中断在主程序入口处:此时合理按F10、F7及F12一直向前走,注意此时领空会是:NOTUPX!UPX1+2xxx.
在你跟踪过程中会出现如下代码:
该程序的具体情况如下:
XXX:XXXXXXXX 60 PUSHAD ;所有的寄存器进栈 XXX:XXXXXXXX BE2EFD4200 MOV ESI, XXXXXXXX ;将下一条指令送入进行解压 XXX:XXXXXXXX 8DBED21FFDFF LEA EDI, [ESI+XXXXXXXX] ....... ....... <---- 按F10跟踪 ;-P XXX:XXXXXXXX FF96A8C90400 CALL [ESI+XXXXXXXX] XXX:XXXXXXXX 61 POPAD ;所有寄存器出栈 XXX:XXXXXXXX E9A44AFBFF JMP 00401000 ;跳到程序真正入口点(OEP),文件完全解压。 |
0137:40ddbe popa
0137:40ddf jmp 00401000 <-此行己完全解压结束,将要跳到记事本程序入口点执行程序(注意此处的一个大的突跃)。
........................
0137:401000 push ebp <-完全解压后的记事本程序第一行
因此入口点(Entry Point)找到为:401000
◇利用TRW2000特有命令PNEWSEC
TRW2000也是一款优秀的脱壳工具,有许多特有的命令对脱壳很有帮助,在此时用PNEWSEC命令也可方便找到入口点。
运行TRW2000并装载目标程序,然后LOAD,你将中断在主程序入口处,下令:PNEWSEC
等上一段时间,程序将中断在入口点处。
◇用冲击波2000
冲击波2000是D.boy开发的一个专门查找加壳软件入口点的工具,先运行冲击波2000,点击Track按钮:开始进行跟踪,然后运行要跟踪的程序, 找到入口点后,会在Enter point 显示。可是用这个记事本程序却无效。
★dump取内存中己脱壳的文件
不管你用何种方法找到入口点,首先要来到入口点一行:
0137:401000 push ebp
执行命令makepe 路径/文件名或pedump 路径/文件名
就这样脱壳成功。
注:TRW2000的makepe重建的PE文件可跨平台运行,pedump抓取的文件却不可。