吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3231|回复: 17

[转载技术] 菜鸟的PE结构学习之路(一) 认识DOS头

  [复制链接]
Shark_鹏 发表于 2015-3-24 16:00 | 显示全部楼层 |阅读模式

       菜鸟在此,大牛飞过~~~~~~~
     以上仅为个人的一点小小的心得,有什么不对的地方还请各位指出。


        大家好,我是F8。这次我机智的来水贴了,顺便骗分骗经验。啦啦啦,求别打我。
       这次参考的书籍主要为《Windows PE权威指南》,写得挺有趣的一本书,有兴趣的也请去看看。
       那么,下面正式开始:

----------------------------------请叫我分割线-------------------------------------分割线-----------------------------------
      
      首先,请大家看一下下面一组数据:

      张三 1992 22 清华大学计算机系  
      你会怎么解读?
①张三,1992年生,现年22岁,就读于清华大学计算机。
②张三,1992年22岁时毕业于清华大学计算机系。

     看,不同的人会有不同的解析对吧。更加要命的是观众无法判断到底哪一种理解才是正确的,真正的意思只有写出这几个数据的人才会理解。于是,如果写数据的人同时给出了这么一个结构

结构 学生 {
    字符串 名字
    数字    出生日期
    数字    先有年龄
    字符串 就读专业
}
    嘎嘎,这不就是第一种情况嘛~~~
    这就是数据结构的概。以某种方法对数据进行排列,解析的概念。

     紧接着,我再给出一组数据
4D 5A 90 00 03 00 00 00  04 00 00 00 FF FF 00 00
B8 00 00 00 00 00 00 00  40 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 C8 00 00 00     
    这更加难看懂了!(⊙v⊙)嗯,乍看之下还可能会以为是一堆乱码!!
    不过,一旦尝试按照一定的方法去解析它的话,就会发现这看起来无规律的东西瞬间被赋予了意义
    比如说,4D 5A 对应于ASCII码"MZ",众所周知,这是微软的一个幻数,用来标识PE文件的。
    实际上,上面的数据就是DOS头的第一部分,IMAGE_DOS_HEADER,而那个4D 5A,就对应于一个成员e_magic
    废话说多了,下面我就直接给出IMAGE_DOS_HEADER的定义吧。

IMAGE_DOS_HEADER STRUCT
  e_magic        WORD  ?   ;0000h - EXE标志,"MZ"
  e_cblp           WORD  ?   ;0002h - 最后(部分)页中的字节数
  e_cp             WORD  ?   ;0004h - 文件中的全部和部分页数
  e_crlc            WORD  ?   ;0006h - 重定位表中的指针数
  e_cparhdr     WORD  ?   ;0008h - 头部尺寸,以段落为单位
  e_minalloc     WORD  ?   ;000ah - 所需的最小附加段
  e_maxalloc    WORD  ?   ;000ch - 所需的最大附加段
  e_ss              WORD  ?   ;000eh - 初始的SS值(相对偏移量)
  e_sp             WORD  ?   ;0010h - 初始的SP值
  e_csum         WORD  ?   ;0012h - 补码校验值
  e_ip               WORD  ?   ;0014h - 初始的IP值
  e_cs              WORD  ?   ;0016h - 初始的CS值
  e_lfarlc           WORD  ?   ;0018h - 重定位表的字节偏移量
  e_ovno         WORD  ?   ;001ah - 覆盖号

  e_res            WORD 4dup(?);001ch - 保留字
  e_oemid       WORD  ?   ;0024h - OEM标识符(相对e_oeminfo)
  e_oeminfo    WORD  ?   ;0026h - OEM信息
  e_res2          WORD 10dup(?);0028h - 保留字
  e_lfanew       DWORD ?   ;003ch - PE头相对于文件的偏移地址
IMAGE_DOS_HEADER ENDS
      作为一个过来人,我可以很负责的告诉你,对于这个结构,我们一般只关心它的两个成员

e_magic:  标识该文件是否为PE文件,应当为4D 5A (MZ)
e_lfanew: 标识出PE头的相对偏移地址。
     恰好是一头一尾,除了最后一个成员为4字节以外,都是占用2字节,非常的好记。
     于是,对IMAGE_DOS_HEADER结构的介绍就到此为止了。这个结果的长度在32位系统下,恰好是40h,WinHex中恰好占头用4行,应该是很容易辨别的。
     紧接着IMAGE_DOS_HEADER,排在PE头前面的,是一个叫做DOS Stub的结构,大小不固定,随着编译器的不同而发生改变。实际上是一个小型的DOS程序,运行在16位系统上,来提示该程序是32位程序的。这里来简单介绍一下。
     DOS Stub数据
0E 1F BA 0E 00 B4 09 CD  21  .........
反汇编一下就是:
0E      PUSH CS                             ;将CS段地址给DS
1F      POP  DS
BA0E00  MOV  DX,000E            ;DS:DX指向要显示的字符串数据处
B409    MOV  AH,09                  ;调用9号中断,屏幕显示字符串
CD21    INT  21
B8044C  MOV  AX,4C01            ;调用4号中断,正常退出程序
CD21    INT  21
...........字符串数据

     很简单的内容,有兴趣的话也可以自行修改。只要不要忘记了,如果改动了PE头的位置,必须把IMAGE_DOS_HEADER.lfanew的指向重新改一下,指回PE头。

      有了这样的一些基本的内容,就可以着手写一个自己的PE查看器了,为了加深记忆嘛。

      有兴趣的也可以自行写一份,代码我也会给出。。。不过技术含量不高,只求大牛们不要喷了。
      那么DOS头也就介绍到这里了。恩恩,这才是一个开始啊,我会继续努力更新的。

评分

参与人数 22HB +39 THX +13 收起 理由
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
Soul1999 + 1
后学真 + 1
sjtkxy + 1 + 1
极速菜 + 1
消逝的过去 + 2
冷亦飞 + 1
飞刀梦想 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
Wayne + 1
jaunic + 2
lies + 1
DANNYSL + 1 + 1
attackmyth + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
Scar-疤痕 + 3 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
陈雨馨 + 6 + 1 评分=感恩!简单却充满爱!感谢您的作品!
倚窗听雨 + 1 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
vigers + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
逍遥绝尘 + 3 + 1 评分=感恩!简单却充满爱!感谢您的作品!
逍遥枷锁 + 4 + 1 好人有好报!你的热心我永远不忘!谢谢!
Shark恒 + 6 + 1 转的一手好帖!辛苦了!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2015-3-24 16:03 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
逍遥绝尘 发表于 2015-3-24 17:04 | 显示全部楼层

原创还是转的???
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Scar-疤痕 发表于 2015-3-24 21:58 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
anywhere 发表于 2015-3-24 22:13 | 显示全部楼层

哈哈 这个好  解释的很清楚!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
attackmyth 发表于 2020-1-17 21:13 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
别管我了行 发表于 2022-3-10 04:16 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
凌夏随缘 发表于 2022-6-5 15:14 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2022-10-12 07:55 | 显示全部楼层

楼主好坏啊,哈哈哈哈
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2022-11-22 20:11 | 显示全部楼层

嗯嗯 很感谢楼主的教程!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表