使用工具:SoftICE 4.00; ProcDump 1.6.2; IceDump 6.0.1.5; HexWorkShop;
(补充一句:以下Import table我称作输入表,可能说法不规范,不过我打习惯了,大家原谅一下)
(注:以下文中数字为十六进制)
分析:
运行ProcDump,点击Pe-Editor按钮,选中PECompact.exe,得到程序内存映象大小:Size of Image为 00031000和基地址Image Base为0040000。然后点击Sections,没有发现.idata这样容易识别的输入表Section,
看来找输入表的地址和大小也将成为重点了。
首先我们来抓取Import table
1、先装载IceDump。到IceDump目录中运行相应SoftICE版本的icedump.exe。(比如我用的SoftICE版本为4.00就到win9x/400目录下运行icedump.exe)
2、运行SoftICE的Loader,加载PECompact.exe。
3、Ctrl-D进行SoftICE,如下设置断点
bpx loadlibrarya do "dd esp->4"
(注:在没有明确的输入表地址的情况下,这不失为找输入表地址的一种好办法)
4、按F5回到Windows中,单击Loader中的Load按钮。程序中断在第一条指令处。进入了SoftICE。
(看来PECompact.exe不象受Asprotect保护的程序那样。无法用SoftICE自动中断在第一条指令处)
5、按F5运行程序。又中断在我们设下的中断Loadlibrarya处。看看数据窗口。显示如下:0030:004171AE 4E52454B 32334C45 4C4C442E 4C000000 KERNEL32.DLL...L0030:004171BE 4C64616F 61726269 00417972 65470000 oadLibraryA...Ge0030:004171CE 6F725074 64644163 73736572 56000000 tProcAddress...V0030:004171DE 75747269 6C416C61 00636F6C 69560000 irtualAlloc...Vi0030:004171EE 61757472 6572466C 00000065 74697845 rtualFree...Exit0030:004171FE 636F7250 00737365 72460000 694C6565 Process...FreeLi0030:0041720E 72617262 00000079 4D746547 6C75646F brary...GetModul0030:0041721E 6E614865 41656C64 47000000 6F4D7465 eHandleA...GetMo0030:0041722E 656C7564 656C6946 656D614E 9D8B0041 duleFileNameA...0030:0041723E 004020A6 20AA9D3B 01750040 0CB58BC3 . @.;.. @.u.....
6、根据经验,一般第一次是脱壳代码自己的函数库的加载。并不是我们需要的输入表。因此,按F5继续执行程序。程序又一次中断,这一次数据窗口显示如下: