您的位置:首页 > 其它

流水账笔记:PE文件格式(Dos Header)

2017-10-10 04:39 246 查看
PE 文件 格式种类:

种类主扩展名
可执行系列EXE、SCR
库系列DLL、OCX、CPL、DRV
驱动程序系列SYS、VXD
对象文件系列OBJ
严格的说,OBJ(对象)之外的所有文件都是可执行文件。DLL、SYS 虽然不能直接在 Shell (Explorer.exe) 中运行,但可以使用其他方法执行。

提示:根据 PE 正式规范,编译结果 OBJ 文件也视为 PE 文件。但是 OBJ 文件本身不能以任何形式执行,在代码逆向分析中几乎不需要关注它。

————《逆向工程核心原理》

  有关文件格式,微软并没有完全公开,只在 windows 的头文件中,定义了有关文件格式的结构体

  

  学习文件格式,不仅仅要知道文件格式中各个字段的意义,还要懂得通过分析文件格式,来应对畸形文件格式

  

  有时,通过修改文件格式,也可以达到反调试的目的

Dos文件头

  所以最初的 60 个字节是dos系统下 可执行文件 的格式。

  



  紫色框 开头的地址,才是真正的 32位(或64位)系统下的可执行文件格式

Dos文件头的结构体

  我们在VS2013中,通过定义结构体 IMAGE_DOS_HEADER ,可以找到有有关文件格式的结构体。结构体大小为 64 个字节。

  


  结构体中简要说明了各个字段的作用,但是除了e_magic以及e_lfanew,我们并不关心其他成员。

文件头中的 Dos 代码段

  如果我们在Dos环境下运行 32 位的应用程序,则会提示:

  


  该字符串是如何出现的?代码的实现,即是在 Dos 文件头的下一段空间

  



  如果我们 dos 环境下调试32位程序,查看汇编代码时:

  


  可以看到将要执行的代码二进制即是那一段蓝框内的二进制数据,其中还调用了 int 中断

  

  实际上,对于 32 位的应用程序,dos的文件头中只有 2 处信息是有效的,其余的信息即使全部填充为 0xff ,程序照样可以正常运行

  



其中,红框 处表示的是 Dos签名,紫框 处表示 NT头的偏移
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: