逆向工程实验一 PE头及导入表应用

1.实验目的和要求

熟悉PE文件格式,通过对PE文件头分析,理解PE文件格式,掌握主要数据结构的定位及其功能,如入口点、节表、节、导入表等。研究如何利用工具对各部分的内容进行读取分析显示,理解RVA、VA、FOA之间的关系;初步掌握汇编程序的调试方法。

2. 实验步骤

1、PE可执行文件分析

开发一个源程序 HelloWorld .asm,显示hello world。

2、调试软件OllyDBG

2.1、利用OD软件调试PE文件。

从OD反汇编的结果分析,invoke MessageBox,NULL,offset szText,NULL,MB_OK分解成哪几个指令?

分解成如上五个指令,push传入四个参数,然后call调用MessageBox.

问题2.2:怎么理解E8 08000000?

Call指令将会将它下一条指令的地址00401010H,加上08,等于00401018H,然后跳到该地址处执行。

问题2.3:F7单步步入和F8单步步过 有什么不同?

都是一步一步往下执行,区别是F7单步步入遇到call指令时会进入到call指令里的代码,而F8单步步过也会执行CALL指令,但不会进入其代码中执行里面的代码。

2.4:修改EXE文件字节码

将messagebox显示的 HelloWorld 修改成 GoodNight,截图显示结果。

首先ctrl+g跳到HelloWorld的地址00403000H找到其对应的HEX数据,然后双击字母对应的HEX数据进行修改,最后的一个00403009处的数据要将其修改为00

2.5:修改是从文件偏移的什么地方开始的(FOA和VA、RVA分别的多少)?

从偏移的800H开始。

FOA:800H

RVA:3000H

BASE:00400000H

VA:00403000H

3、调试软件W32DASM

利用W32DASM查看HelloWorld.EXE的输入。

问题3.1:该函数用到哪几个DLL,分别用到哪几个函数?

用了user32.dll和kernel32.dll,分别用了MessageBoxA函数和ExitProcess函数

4、FlexHex 或 Winhex

熟悉十六进制编辑软件的使用。

问题4.1:如何初步判断一个文件是PE文件?

首先看e_magic,文件头是5A4D,对应的ASSICA码是MZ,然后看PE头。跳到偏移3c处的位置,这是PE头相对于文件的偏移地址,发现是B0,再跳到该地址处,找到PE。以上可判断这是个PE文件。

5、利用PEditor查看Hellworld,读出其ImageBase的值,并给出节表(截图)。

问题5.1:画出节表。

ImageBase的值是00400000H

问题5.2:某变量的FOA为410H,试分析其位于哪一节(给出分析过程。)?该变量的RVA为多少(给出计算过程)?

410H介于400H和600H之间,410H-400H=10H,

RVA=1000H+10H=1010H,1010H介于1000H和2000H之间,因此其位于.text节。

6、如何判断一个文件是否是EXE文件?

①判断ImageBase的值

通常默认EXE文件的该值为00400000H,DLL文件为10000000H

对于firstwindow.exe,用PEditor打开可以看到它的ImageBase值为00400000H,所以它是一个EXE文件。

②看Characteristics字段

该字段在PE处偏移16位,对于EXE,值为010FH,而DLL则是210EH。打开firstwindow.exe可以看到

8、导入表结构分析。

问题8.1:利用PEditor打开firstwindow.exe,分析该PE的导入表。该PE文件描述导入表的数据目录项的偏移是多少?导入表的VA和大小分别是多少?该EXE用到多少个DLL文件。验证与PEditor中查看到的是否一致?

导入表的数据目录项的偏移是2084H,

导入表的VA=VA=RVA+BASE=2084H+00400000H=00402084H,大小是50H.该EXE用到3个dll文件,一致。

问题8.2:理解PE文件的双桥结构,特别是从静态到动态桥2发生的变化。下图为导入表描述符的数据结构。仅填写与Winresult.DLL相关的信息(画出静态、动态两个图)。

猜你喜欢

转载自blog.csdn.net/zzzfff__/article/details/134431695