|
抓取import table
1、先装载Icedump 在这用Icedump 6.016版本,其命令操作形式完全和以前的版本不同。先在Icedump目录里运行相应SOFTICE版本的icedump.exe(我用的SOFTICE是4.05版,因此在win9x/405目录下运行icedump.exe),如Icedump装载成功,Icedump会返回如下信息:
icedump v6.0.1.6 for winice v4.05 loader icedump unloaded icedump loaded ←出现这句话表示Icedump装载成功
C:> |
2、再装载FrogsICE 由于aspack能检测到SOFTICE的存在,因此装载Frogsice就可躲过。在我机子里:FrogsICE 1.00 Final和Icedump不能很好兼容工作,因此我将FrogsICE换成版本v0.43,hehe..它们配合的很好。双击FPloader.exe文件即可装载成功。 OK,到此你的SOFTICE的功能己大大加强里。 这时试试运行aspack,这时屏幕将蓝屏给你一菜单选项,告知aspack发现了SOFTICE,是否欺骗它,这时你按ESC按钮,程序即可正常运行。
3、 记住我们的第一步是抓取import table,它在内存的446000到449000处,因此程序运行时注意这段内存代码的解压情况。 由于SOFTICE不能LOAD aspack.exe,我们用:bpx loadlibrarya命令来拦断。
loadlibrarya命令解释:如果import表没在内存中就使用LoadLibraryA API调用装入该模块,因此我们可以拦截此函数来观察import表。
:bpx loadlibrarya 然后运行aspack将中断如下: Break due to BPX KERNEL32!LoadLibraryA :dd 446000 l 40 (下此命令观察内存446000到449000处的数据)
. -------SPACK!.idata--------------------dword----------ROT--?(0)-- 0030:00446000 ???????? ???????? ???????? ???????? ................ 0030:00446010 ???????? ???????? ???????? ???????? ................ 0030:00446020 ???????? ???????? ???????? ???????? ................ 0030:00446030 ???????? ???????? ???????? ???????? ................
上图是SOFTICE的数据窗口,显示 ??...说明import表在内存中没解压。 再按F5一下,程序将中断如下:(记着:在这例中只能要按一下F5,否则将不能抓取正确的import表)
0030:00446000 00000000 00000000 00000000 0004669C .............f.. 0030:00446010 0004612C 00000000 00000000 00000000 ,a.............. 0030:00446020 000468B6 000461AC 00000000 00000000 .h...a.......... 0030:00446030 00000000 000468D0 000461B4 00000000 .....h...a......
这时446000处不是?? ?? ?? ??,意味着import表己被解压了。
.import表以一个IMAGE_IMPORT_DESCRIPTOR数组开始。 image_import_descriptors数据有5组dwords组成。
image_import_descriptors结构: ①dd offset original_first_thunk ②dd timedatestamp 时间及日期标志 ③dd forwardchain 正向链结索引 ④dd offset library name以NULL结尾的ASCII字符的RVA地址,该字符串包含输入的DLL名, 比如"Kernel32.dll"或"USER32.DLL"。 ⑤dd offset first_thunk 该字段是在Image_thunk_data联合结构中的RVA偏移
其中timedatestamp和forwardchain通常设置为00000000, original first thunk 选项不是必须的.
:dd 446000 l 40 0030:00446000 00000000 00000000 00000000 0004669C .............f.. 0030:00446010 0004612C 00000000 00000000 00000000 ,a..............
地址4669c 指向 LibraryName (RVA, 你需要加上基址imagebase+400000)
:db 44669c l 10 0030:0044669C 4B 45 52 4E 45 4C 33 32-2E 44 4C 4C 00 00 00 00 KERNEL32.DLL....
地址612c指向 first_thunk 库。
:dd 44612c l 10 0030:0044612C 000466AA 000466C2 000466DA 000466F2 .f...f...f...f..
这些是以NULL结尾的ASCII字符的RVA地址, . . 466aa 是第一个API函数的地址,466c2是第二个API函数地址...它们以以NULL结尾。
:db 0004466aa l 20 0030:004466AA 00 00 44 65 6C 65 74 65-43 72 69 74 69 63 61 6C ..DeleteCritical 0030:004466BA 53 65 63 74 69 6F 6E 00-00 00 4C 65 61 76 65 43 Section...LeaveC
通过上面的分析可知,这就是原始的.import表,快dump it!!(看看上文的image_import_descriptors地址)
:/dump 446000 2000 c:\aspack.idata.bin (如你是用Icedump 6.016以前版本用此命令:pagein d 446000 2000 c:\aspack.idata.bin)
为了方便大家对比,特将dump正确的import表放在此下载。
=part4===part4===part4===part4===part4===part4===part4===part4===part4===part4=
上一页 1 2 3 下一页 |