PE格式详解(九)
来源:互联网 发布:简易平面广告制作软件 编辑:程序博客网 时间:2024/05/18 18:15
好了,如果你确实按进程看到了这里,那么我首先要钦佩你的毅力,感谢你的支持,同时也恭喜你已经对PE格式有了比较全面的了解。回想起来,其实PE格式的理解并不很困难,只是比较复杂,也容易搞混结构关系,所以我写了这第九篇,把PE格式的总体结构按研究的顺序给出,让这个轮廓清晰地出现在脑中。
好,如果我们拿到一个EXE,想要去分析它的格式,我们可以按下面的步骤进行:
一。首先是DOS MZ Header,对应C结构IMAGE_DOS_HEADER,其中第一个成员e_magic用于判断是否为合法的EXE,而通过最后一个成员e_lfanew可以找到PE Header的位置。
二。找到PE Header,对应C结构为IMAGE_NT_HEADERS32。第一个成员Signature可以验证是否为合法的PE文件。第二个成员结构IMAGE_FILE_HEADER FileHeader可以得到PE的类型和区段的个数。通过IMAGE_OPTIONAL_HEADER OptionalHeader可以访问附加头。
三。继续查看OptionalHeader,可以得到一些代码或数据的长度及虚拟地址,还有一个比较有用的Data Directory目录,里面可以查到输出表和输入表等数据结构的地址和长度。
四。紧接着就是区段表(Section Table),可以找到EXE中所有段的信息。
五。按照段表分别找到对应段的所有数据。
六。访问.edata或者输出表可以得到函数输出信息,表项结构为IMAGE_EXPORT_DIRECTORY
七。访问.idata段,可以得到DLL引用的所有信息。子步骤为:1。遍历所有IMAGE_IMPORT_DESCRIPTOR数组,每个元素对应一个DLL;2。找到每个元素中的成员,访问两个FirstThunk指向的IMAGE_THUNK_DATA32结构数组;3。其中每个元素要么按IMAGE_IMPORT_BY_NAME结构访问,要么当作Ordinal访问;4。如果EXE还有绑定输入目录表(Bound Import Table),则可以接着去访问它,元素结构为IMAGE_BOUND_IMPORT_DESCRIPTOR,对于有输出转送的DLL,还可以进而访问IMAGE_BOUND_FORWARDER_REF结构数组
八。访问数据段(?)、代码段(反汇编器)、资源段(资源编辑器)可用及其他的所有区段,这个就不属于PE格式范围了。
九。如果这个EXE被加过壳,则在正常访问前,还需要将它先脱壳。
好了,我的水平就只能把PE格式为你介绍到这,进一步的研究就靠你自己啦,最后说一声,感谢大家的支持!
- PE格式详解(九)
- PE文件详解(九)
- PE格式详解(一)
- PE格式详解(二)
- PE格式详解(三)
- PE格式详解(四)
- PE格式详解(五)
- PE格式详解(六)
- PE格式详解(七)
- PE格式详解(八)
- PE格式详解
- PE 格式详解
- PE 格式详解1 PE Header
- PE格式详解讲解1
- PE格式(一)
- PE格式详解 输入表信息 (上)
- PE格式详解 输入表信息(下)
- PE文件详解九:资源结构体
- 第一天
- PE格式详解(七)
- PE格式详解(八)
- Google和百度收录网站页面的比较
- Oracle_SQL编程优化__报告
- PE格式详解(九)
- j2me 实现翻页功能的一个小例子
- Websharp 9 - 流程控制
- 关于合肥尊享e8套餐资料__思考pack2
- J2ME 实现半透明效果
- Servlet中如何捕获Session事件
- jsp Error establishing socket 解决方法汇总
- Spring整合应用时遇到404错误
- 35个你自己来设计海报的Photoshop教程