关于PE文件——输入表
来源:互联网 发布:中国梦军民融合大数据 编辑:程序博客网 时间:2024/05/29 03:29
什么是输入表?
输入表就相当于exe文件与DLL文件沟通的桥梁,形象的可以比喻成两个城市之间交流的高速公路。在PE文件映射到内存后,windows将相应的DLL文件装入,EXE文件通过“输入表”找到相应的DLL中的导入函数,从而完成程序的正常运行。
输入表的组成与工作原理?
首先大概了解整体的结构:
三个表:
①输入表: 对应IMAGE_IMPORT_DESCRIPTOR结构体。
②输入名称表(INT):对应IMAGE_THUNK_DATA结构体。
③输入地址表(IAT):也是对应IMAGE_THUNK_DATA结构体。
由1图,输入名称表(INT)和输入地址表(IAT)都是IMAGE_THUNK_DATA结构体的数组。并且这两个数组都是以一个空的结构体作为结束的。
而IMAGE_THUNK_DATA实质上是四个指针(每个指针四字节,共16字节)组成的结构体。这里理解错了:IMAGE_THUNK_DATA不是四个指针的结构体,而是共用体(关键字:union):共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有共用体成员共用一个空间,并且同一时间只能储存其中一个成员的值。结构如下:
tyepedef struct _IMAGE_THUNK_DATA32IMAGE_IMPORT_BY_NAME结构体:
以上内容来源:《黑客攻防免杀》作者:任晓珲 机械工业出版社
下面把流程走一下:来源: <http://blog.sina.com.cn/s/blog_3dc2673e010092rr.html>
假设我们要列出某个PE文件的所有引入函数,可以照着下面步骤走:
- 校验文件是否是有效的PE。
- 从 DOS header 定位到 PE header。
- 获取位于 OptionalHeader 数据目录地址。
- 转至数据目录的第二个成员提取其VirtualAddress值。
- 利用上值定位第一个 IMAGE_IMPORT_DESCRIPTOR 结构。
- 检查 OriginalFirstThunk值。若不为0,顺着 OriginalFirstThunk 里的RVA值转入那个RVA数组。若OriginalFirstThunk 为0,就改用FirstThunk值。有些连接器生成PE文件时会置OriginalFirstThunk值为0,这应该算是个bug。不过为了安全起见,我们还是检查 OriginalFirstThunk值先。
- 对于每个数组元素,我们比对元素值是否等于IMAGE_ORDINAL_FLAG32。如果该元素值的最高二进位为1,那么函数是由序数引入的,可以从该值的低字节提取序数。
- 如果元素值的最高二进位为0,就可将该值作为RVA转入 IMAGE_IMPORT_BY_NAME 数组,跳过 Hint 就是函数名字了。
- 再跳至下一个数组元素提取函数名一直到数组底部(它以null结尾)。现在我们已遍历完一个DLL的引入函数,接下去处理下一个DLL。
- 即跳转到下一个 IMAGE_IMPORT_DESCRIPTOR 并处理之,如此这般循环直到数组见底。(IMAGE_IMPORT_DESCRIPTOR 数组以一个全0域元素结尾)。
0 0
- 关于PE文件——输入表
- PE导出/输入表————文件影射
- PE导出/输入表————文件影射
- 重建 PE 文件的输入表 TiTi
- 重建 PE 文件的输入表
- PE文件输入表获取过程
- PE文件结构(三) 输入表
- 关于PE病毒编写的学习(六)——关于PE文件结构操作的程序编写
- 关于PE病毒编写的学习(六)——关于PE文件结构操作的程序编写
- 关于PE病毒编写的学习(六)——关于PE文件结构操作的程序编写
- 关于PE病毒编写的学习(6)——关于PE文件结构操作的程序编写
- PE文件详解1——PE文件头部解析
- 获得PE文件输入表和输出表
- PE文件结构(二)-输入表实例分析
- PE文件详解五:PE详解之输入表(导入表)详解1
- PE文件详解六:PE详解之输入表(导入表)详解2
- 关于那个PE文件病毒
- PE格式之输入表
- 内存山介绍和图解析
- csvkit 学习和使用 (四)
- 平安阿里数据库技术交流日总结
- centos6.2的管理终端界面
- Spring注解@Component、@Repository、@Service、@Controller区别
- 关于PE文件——输入表
- eclipse(Link with Editor)
- linux md5 加密字符串和文件方法
- 第四章字符串与多维数组
- linux sleep支持sleep,minute,day参数
- Qt进行UrlEncode/UrlDecode(URL编码/解码)
- 性能调优攻略
- 【mfc】学生信息管理,实现List控件节点的增删改查
- easyui-ajax-提交表单