《逆向工程核心原理》学习总结(四)
来源:互联网 发布:网络市场监管专项行动 编辑:程序博客网 时间:2024/06/05 17:53
介绍
PE文件是windows操作系统的可执行文件格式(包括.exe、.scr、.dll、.sys、.obj等文件),PE文件指32位的可执行文件,也称为PE32。64位可执行文件称为PE+或PE32+,是PE32文件的一种扩展形式。
基本结构
PE文件包含PE头与PE体,研究PE文件格式,就是研究构成PE头的结构体。
PE头包含的基本结构如下:
1.DOS头
2.DOS存根
3.NT头
4.节区头(sectionHeader)
PE头中一些重要的信息
NT头:可选头(IMAGE_OPTIONAL_HEADER32)
1.AddressOfEntryPoint : EP的RVA值,程序最先执行的代码起始地址。
2.DataDirectory:IMAGE_DATA_DIRECTORY结构体数组
DataDirectory[0]:EXPORT Directory 导出表(EDT)的RVA地址
DataDirectory[1]:IMPORT Directory 导入表(IAT)的RVA地址
DataDirectory[9]:TLS Directory
IAT
IMAGE_IMPORT_DESCRIPTOR 结构体描述PE装载时的必须信息。每一个dll对应一个IMAGE_IMPORT_DESCRIPTOR 结构体,结构体的结构如下:
OriginalFirstThunk; //INT(Import Name Table) address(RVA)
TimeDateStamp;
ForwarderChain;
Name;//the name(string) of the dll
FirstThunk;//IAT(Import Address Table) address (RVA)
以装载kernel32.dll为例,PE装载器将导入函数输入至IAT的流程:
1.读取IID的Name,获取到库名称(“kernel32.dll”)
2.装载库(LoadLibrary(“kernel32.dll”))
3.读取IID的OriginalFirstThunk成员,获取INT地址
4.逐一读取INT中的函数名地址
5.通过函数名地址获取到函数名(eg.GetCurrentThreadId),获取函数的起始地址:GetProcAddress(“GetCurrentThreadId”)
6.读取IID的FirstThunk,获取IAT地址;
7.将函数地址填入到IAT项
8.重复4-7,直到INT结束
EAT
IMAGE_EXPORT_DIRECTORY 结构体描述PE文件的EAT信息,一个PE文件只包含一个IMAGE_EXPORT_DIRECTORY结构体。其结构如下:
NumberOfFunctions // Export函数的个数
NumberOfNames //Export函数中具名的函数个数
AddressOfFunctions // Export函数地址数组
AddressOfNames // 函数名称地址数组
AddressOfNameOrdinals // Ordinal地址数组
注:AddressOfFunctions与AddressOfNames的下标一般不互相对应, Ordinal地址数组是它们下标之间的映射。
- 《逆向工程核心原理》学习总结(四)
- 逆向工程核心原理学习笔记(七):总结
- 逆向工程核心原理学习笔记(七):总结
- 《逆向工程核心原理》学习总结(一)
- 《逆向工程核心原理》学习总结(二)
- 《逆向工程核心原理》学习总结(三)
- 逆向工程核心原理学习笔记(四):检索API方法2-设置断点
- 逆向工程核心原理学习笔记(四):检索API方法2-设置断点
- 逆向工程核心原理学习笔记(十一):栈
- 逆向工程核心原理学习笔记(十四):栈帧1
- 逆向工程核心原理学习笔记(十一):栈
- 逆向工程核心原理学习笔记(十四):栈帧1
- 《逆向工程核心原理》
- 《逆向工程核心原理》
- 逆向工程核心原理
- <逆向工程核心原理> 静态反调试技术总结
- <逆向工程核心原理> 动态反调试技术总结
- 逆向工程核心原理学习笔记(一):寻找程序的主函数(Main)
- 线性分类器
- ImageView 的 ScaleType 的表现及原理探究
- android自定义View、ViewGroup
- Marriage is Stable
- SpringMVC和ajax文件上传
- 《逆向工程核心原理》学习总结(四)
- LintCode-单词接龙II
- Python中 pip不是内部或外部命令,也不是可运行的程序 或批处理文件。
- HTML5的几种存储方式
- hdu 1180 诡异的楼梯 (BFS)
- ubuntu (16.04) server 英文原版 添加中文语言支持 消除java 程序、mysql 数据库不能处理中文的错误
- BFS:HDU2597-Dating with girls(2) (分时间标记状态)
- 鸟哥Linux学习之——文件内容查看
- 浙大PAT甲级-1012