-
-
[原创]纯手工完美恢复IAT
-
发表于:
2018-12-1 21:19
11135
-
上面结构中的的FirstThunk指向下一个结构
程序脱壳后都需要修复IAT,否则程序运行会出错,以前都是用工具来修复,工具一般都是新加一个节,然后将导入函数放在新的节里面(这个函数会比实际程序多一些,但不影响程序的运行,但个别定位出问题的多余函数会影响到程序运行),再修复跟函数相关的重定位项,其实有另一种方式可以完美修复IAT,今天就给大家交流一下,希望多多指正。
首先用ASPack给程序加一个壳,然后进行脱壳,脱壳过程很简单,这里就不详细叙述了。
运行到OEP用OllyDump导出当前进程。
注意:把重建输入表前面的对勾去掉,因为我们要手工恢复,所以就不需要这个选项了。
用工具查看输入表信息:
------------------------------------DataDirectory
No. VirtualAddress Size
0 00000000 00000000 EXPORT
1 00067FAC 00000240 IMPORT
2 00061000 00005400 RESOURCE
3 00000000 00000000 EXCEPTION
4 00000000 00000000 SECURITY
5 00067F54 00000008 BASERELOC
6 00000000 00000000 DEBUG
7 00000000 00000000 ARCHITECTURE
8 00000000 00000000 GLOBALPTR
9 00067F3C 00000018 TLS
10 00000000 00000000 LOAD_CONFIG
11 00000000 00000000 BOUND_IMPORT
12 00000000 00000000 IAT
13 00000000 00000000 DELAY_IMPORT
14 00000000 00000000 COM_DESCRIPTOR
15 00000000 00100000 ...
------------------------------------DataDirectory
No. VirtualAddress Size
0 00000000 00000000 EXPORT
1 00067FAC 00000240 IMPORT
2 00061000 00005400 RESOURCE
3 00000000 00000000 EXCEPTION
4 00000000 00000000 SECURITY
5 00067F54 00000008 BASERELOC
6 00000000 00000000 DEBUG
7 00000000 00000000 ARCHITECTURE
8 00000000 00000000 GLOBALPTR
9 00067F3C 00000018 TLS
10 00000000 00000000 LOAD_CONFIG
11 00000000 00000000 BOUND_IMPORT
12 00000000 00000000 IAT
13 00000000 00000000 DELAY_IMPORT
14 00000000 00000000 COM_DESCRIPTOR
15 00000000 00100000 ...
------------------------------------DataDirectory
No. VirtualAddress Size
0 00000000 00000000 EXPORT
1 00067FAC 00000240 IMPORT
2 00061000 00005400 RESOURCE
3 00000000 00000000 EXCEPTION
4 00000000 00000000 SECURITY
5 00067F54 00000008 BASERELOC
6 00000000 00000000 DEBUG
7 00000000 00000000 ARCHITECTURE
8 00000000 00000000 GLOBALPTR
9 00067F3C 00000018 TLS
10 00000000 00000000 LOAD_CONFIG
11 00000000 00000000 BOUND_IMPORT
12 00000000 00000000 IAT
13 00000000 00000000 DELAY_IMPORT
14 00000000 00000000 COM_DESCRIPTOR
15 00000000 00100000 ...
输入表的地址是:67FAC,查看一下这个地址的数据。可以看出下面的数据是壳的导入表,并不是程序自身的。
下面我们查找程序自己的导入表,很简单,搜索Kernel32.dll这个字符串,会找到几个,搜索字符串后面是乱码的跳过,最后我们定位的信息如下:
这是程序自己的导入表,但有些数据被覆盖了,所以程序运行会出错
从这个地址向前查找会找到完整导入表信息,这里的界限很明显,非全零的那一行就是导入信息的开始,地址是:56000,但数据已经乱了,我们需要的就是重建这部分结构
如何重建,这里我们要先介绍一下导入表的结构:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-12-1 21:26
被lrtlrt编辑
,原因: