最近在学习《逆向工程核心原理》,文中在WinXp下查看了一步一步手工查找了notepad.exe的IAT,所以我想试试能否在Win7下也完成分析,看看系统版本迭代升级之后PE header和PE body有些什么变化。
一、相关事项
(一)OS版本:Microsoft Windows 7 旗舰版 6.1.7601 Service Pack 1 Build 7601
(二)分析对象系统指导notepad.exe
(三)工具:1.x64dbg 2.peid 3.Hexeditor 4.calc.exe
二、分析过程
(一)打开notepad.exe 如下图
(二)查找IMAGE_IMPORT_DESCRIPTOR结构体的RVA
首先,我们要找到NT头包含的可选头的DateDirectory数组的DateDirectory[1].virtualAdress,因为它是IAT的IMAGE_IMPORT_DESCRIPTOR结构体的RVA,在我瞎了狗眼的情况下,终于找到了A0A0这个地址。
但A0A0是RVA,因此我们必须把它转换为RAW,此时先用peid打开notepad,查看各个节区的偏移,如下图
通过上图,我们发现A0A0位于.text节区,因此使用RAV到RAW的公式有:A0A0H-1000H+400H=94A0
在Hexeditor中跳转到94A0这个地址,如下图,下图中的阴影部分就是IMAGE_IMPORT_DESCRIPTOR结构体了
整理下IMAGE_IMPORT_DESCRIPTOR结构体中有用的成员及其地址(此时是小端序)
RVA(也位于.text段) RAW=RVA-1000H+400H
OriginalFirstThunk(INT) 0000A28C 968C
Name 0000A27C 967C
FirstThunk(IAT) 00001000 400H
(三)验证结果
(1)首先跳转到967C,此时name正是指向动态连接库名称字符串,说明我们的计算没有错。
(2)接下来跳转到968C ,此时它指向0000A690(RVA),如果计算无误,此地址应该指向api字符串,运用公式得出
RAW=9A90
(3)跳转至9A90,证明了我们的计算是正确的
懒得验证FirstThunk了。。。
レ(゚∀゚;)ヘ=3=3=3