PE文件格式实验(2)

2020-02-22 12:42

这个很重要,定位节时需要它。

SizeOfRawData:

经过文件对齐处理后节尺寸,PE装载器提取本域值了解需映射入内存的节字节数。(译者注: 假设一个文件的文件对齐尺寸是0x200,如果前面的 VirtualSize域指示本节长度是0x388字节,则本域值为0x400,表示本节是0x400字节长)。

PointerToRawData:

这是节基于文件的偏移量,PE装载器通过本域值找到节数据在文件中的位置。

Characteristics:

包含标记以指示节属性,比如节是否含有可执行代码、初始化数据、未初始数据,是否可写、可读等。

基本上比较重要的成员都介绍了,我想你看了这么久肯定有点迷糊了,介绍了这么久的节表,那到底什么是节呢?还专门为它建立一个目录好像很重要似的。确实,可以说节才是PE内容的真正载体, 节其实我们可以想象成块,这样更形象点,因为一节就是一块数据,而且这块数据拥有共同的属性,比如是代码还是数据,是只读的还是读写的。学习节要牢牢记住几个字---共同的属性。就是说多个数据只要是具有共同属性我们就能把它放在同一节中,而不用去考虑这些数据是不是在逻辑上有什么关联。真正以数据之间逻辑关联建立的目录是PE头的第三个成员OptionalHeader,我们已经稍微了解了下了。

好了,对PE文件结构的总体构造已经介绍完了,但学习PE文件结构的任务还远远没有完成,因为还有导入表,象DLL还有导出表,还有到底怎么去定位PE中的重要结构等都没有介绍。我只能对你说,不要着急,一口吃不成胖子,学习决非一日之寒,尤其是计算机的学习,它是一个系统的认知过程,知识有很强的连贯性。所以对于决心学好的计算机的人,我有一句良言相赠----找准目标,持之以恒,绝不放弃。上面介绍的内容我参考了《软件加密技术内幕》这本书,由于我也是第一次真正接触PE,所以有些概念理解的不是很准确,希望大家多多包含,有时间大家可以看看原版。当然这只是这个PE教程的第一部分,如果大家不拿鸡蛋砸我的话,我还会写出后续部分。我的知识来自网络,所以我也要回馈网络,虽然现在水平还不是很高,但尽力了就行了。

附上PE信息查看器的下载地址,可以用这个小工具辅助学习,效果更好。 http://bbs.pediy.com/showthread.php?t=97970

附录2纯手工添加一个PE节

http://www.pediy.com/kssd/ 第三章系统篇 PE格式区块

作 者ID: yulongying 时 间: 2011-03-03

最近在公司时间比较闲暇,所以一直都在论坛闲逛,前段时间看了dncwbc一篇文章 《再写手工打造可执行程序》

http://bbs.pediy.com/showthread.php?t=130261

还写了一篇读后感 《再写手工打造可执行程序 读后感 》

http://bbs.pediy.com/showthread.php?t=130261

含金量比较低,但是对于新手还是有价值的,这里在前两篇文章基础上,探讨下怎么手动添加一个以0填充的section,其实原理都是一样,含金量也是比较低 呵呵 高手莫笑! 要修改的一共有以下几处

1、PE头结构中的 NumberOfSections +1 = 3+1=4

2、然后就是optional header中的SizeOfImage(加载到内存中的总大小)之前是(1+3)*1000=4000,这里再解释下此表达式1代表就是文件头 3代表pe文件中使用了3个section,1000就是SectionAlignment了;现在应该是(1+4)*1000=5000

3、在之前的.text .rdata .data三个sectionheader后面的空白文件段添加添加一个section header,对此section header分别域进行填充 section name 8个字节:.hawk 加载到内存中的大小 4个字节:1000

VA:最后一个section的VA+1000=3000+1000=4000 在文件中的大小还是:200

文件偏移:最后一个section文件便宜+其大小=800+200=A00

PointerToRelocations PointerToLinenumbers NumberOfRelocations NumberOfLinenumbers 依然均为0 Characteristics 我随便填了40 00 00 40

4、从 新增的section起始便宜A00一直填充0到BFF(大小为200h)

补充: 1、

添加一个section header我们发现是在file header与sections之间对齐之后产生的空隙中,如果不存在空隙或者空隙控件不够40(之前笔误写了40h 谢谢jsjnwms提醒)此方法就不使用了,应该就比较麻烦了,难道要重组pe?这里还请高手解答。

2、我们pe fileheader总大小dncwbc那篇文章计算过了原话:“我们的PE文件头总大小为:

64 + 112 + 4 + 20 + 224 = 424,3个节表头的总大小 3 * 40 =120。424 + 120 = 544 byte 转化成十六进制为220h”,现在我们已经添加过一个section header 现在应该为544+40=584 转化成十六进制为248h经过file alignment 200h对齐之后还是400,在这里不需要修改,如果对齐之后有变化那这块也需要修改。

上面仅仅是一个做为菜鸟的见解,如有遗漏之处还请各位多多抛砖指引哈。

上传的文件跟《再写手工打造可执行程序读后感》中的文件用UE简单对比以下就知道那些改动了。 上传的附件


PE文件格式实验(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《认识几分之一》教学设计及教学反思

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: