(三)利用导入表、导出表和重定位表定位导入函数的地址
来源:互联网 发布:qq人肉搜索软件 编辑:程序博客网 时间:2024/06/05 05:19
经过分析清单文件,我们知道 call 指令其实没有引用正确的地址。下面我们来看第3个步骤。
3.可执行文件
使用 IDA查看生成的可执行文件,定位到 WinMain 入口函数:
查看调用MessageBoxA 处的字节码:
重定位
调用语句变成了:
call [00418340]
由图片中的分析可知 RVA = 0x11402 处的指令需要重定位。减去程序默认加载的基地址0x400000 ,call 指令间接调用的 RVA = 0x18340。也就是说若可执行文件被加载到基地址 0x500000时,调用指令必须修正为:
call [0x500000 + 0x18340]
PE 文件中,有重定位表记录哪些地址需要被重定位:
导入表
解决了重定位的问题后,可以来看看 RVA = 0x18340 中到底是什么内容,为什么 call 指令编码中要把这个地址作为内存间接操作数。
我们在导入表中可以看到,RVA = 0x18340(文件偏移0x5D40 )正好是一个所谓的ThunkRVA,这个结构是IMAGE_THUNK_DATA:
解析这个结构,得到一个 RVA =0x183BE ,转换成文件地址(0x5D80),查看:
我们历经千辛万苦,发现是从 RVA = 0x18340 找到了一个编号0x20E 和字符串MessageBoxA.这其实是 IMAGE_IMPORT_BY_NAME 结构。
导出表
上面找到的这个编号是什么意思,我们使用 depends 工具查看 User32.dll 的导出函数表:0x20E 是一个函数地址表的索引
但我们不禁要问,即使经过重定位,我们在程序加载到非默认基地址 0x500000 是,可以正确地找到跟 MessageBoxA 紧密相关的 IMAGE_IMPORT_BY_NAME结构,但是函数的真实地址还是无法找到啊?不妨我们直接运行程序,看看能不能成功调用。
- (三)利用导入表、导出表和重定位表定位导入函数的地址
- (一)利用导入表、导出表和重定位表定位导入函数的地址
- (二)利用导入表、导出表和重定位表定位导入函数的地址
- (四)利用导入表、导出表和重定位表定位导入函数的地址
- PE文件,导入表定位
- 定位IAT并输出导入函数名称和对应的函数地址
- PE导出表、重定位详解
- 地址重定位:静态重定位和动态重定位
- 地址重定位:静态重定位和动态重定位
- 地址重定位:静态重定位和动态重定位
- 地址重定位:静态重定位和动态重定位
- PE重定位表
- 重定位表
- PE--重定位表
- MySQL表结构的导入和导出
- MySQL表结构的导入和导出
- Oracle数据库表的导入和导出
- Hbase表数据的导入和导出
- Leetcode中几道二叉树题 III
- 桥接模式
- xcode 中#pragma的使用
- errors were encountered while processing qmail qmail-run
- 07.实例篇:ListView简单分页加载-ListView从网络分页加载数据
- (三)利用导入表、导出表和重定位表定位导入函数的地址
- 3D数学读书笔记——矩阵基础
- ThinkPad E420 中ctrl+alt+down 快捷键与eclipse快捷键冲突解决办法
- 颜色矩
- mysql installed
- Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结
- 3D数学读书笔记——矩阵基础番外篇之线性变换
- C# Chart控件,chart、Series、ChartArea曲线图绘制的重要属性
- 第十三周周报