pe文件的Import table导入表的手工修复

一、实验目的:

        实验提供了一个不能正常运行的程序,如果在正常运行的情况下,程序的功能是弹出一个messagebox,然后正常退出。要做的,是通过排查错误,找到问题所在,修改程序,使其正常运行。
 

二、实验步骤:

        1.通过OD(olly debug) 和 stud_pe工具查看这个程序的十六进制

        2.修复INT(Import Name Table)表和IAT(Import Address Table)表

        3.修复扩张header中的directory部分

三、具体操作:

最开始打开这个exe文件,打开失败,出错了,需要找到错误,并且进行修复:

pe文件的Import table导入表的手工修复_第1张图片

 

1.使用OD查看这个程序的时候,发现JUMP指令的目标地址处都是空的

pe文件的Import table导入表的手工修复_第2张图片

 可以看到402008位置的数据都是0

之后,使用stud_pe进行查看的时候,发现,Import Table都没有找到,里面的RVA 和 size数据都是空的

 ​​​​​​pe文件的Import table导入表的手工修复_第3张图片

 

2.利用stud_pe打开这个程序,然后,找到INT表和IAT表进行填充

 (1)先确定各个字段的数值:

pe文件的Import table导入表的手工修复_第4张图片

 (2)然后在这个位置进行填写:

pe文件的Import table导入表的手工修复_第5张图片

填写后的结构:

part1:第一行,就是IAT表,里面分别是2个dll的各自的1个函数,第一个kernel32.dll中的exit函数的address是2076,占据4字节,然后1个全0的4字节作为这个dll的结束,第二个是user32.dll中的MessageBoxA函数,是205c,占据4个字节,然后是全0的4字节作为这个dll的结束。

这个,好像就是那个什么original First Thunk

part2: INT表的完全,这个INT表一共有3个20字节的内容,第三个全0的20字节作为结束标志

先来完成kernel32.dll的IID。第一个4字节,是关于调用的函数的INT地址,也就是exit函数字符串的RVA。查表得到204c。第4个4字节是kernel32.dll的RVA,查表得到为2084,最后一个4字节是exit的IAT,查表得到为2000。

part3:还有1个和 上面Original First Thunk相同的 First Thunk:

就是最后的16字节

pe文件的Import table导入表的手工修复_第6张图片

 

3.最后,需要填入 Import Table部分的那8个字节的数据:

注意:Import Table在扩展头中一共占据8个字节的内容,前4个字节就是第一个INT的起始字节RVA,后4个字节就是总共的这3个INT占据的字节数:

这里分别是2010 和 003c

pe文件的Import table导入表的手工修复_第7张图片

 

4.最后查看修复结果:

pe文件的Import table导入表的手工修复_第8张图片

 修复成功,芜湖~

你可能感兴趣的:(软件安全相关,pe文件)