首页
社区
课程
招聘
[分享]#30天写作挑战#PE小知识之SizeOfImage和文件大小
发表于: 2020-9-13 17:46 13940

[分享]#30天写作挑战#PE小知识之SizeOfImage和文件大小

2020-9-13 17:46
13940

感谢狗迪群里,一位叫做黄莫傲的金主霸霸的大佬

楼主在练习文件拉伸的内容时,发现这样一个现象,SizeOfImage竟然比文件大小还小,如果按照常理分析,SizeOfImage是文件进行了拉伸后的大小,那么按理说,SizeOfImage应该不小于文件大小.

这个问题对于一个刚刚接触PE的入门者来说,一定会折磨到怀疑人生

对于这个问题楼主在群里疯狂艾特大佬寻求答案.终于有个大佬这样解释了:
(以下结论完全取自大佬的文档)

图片描述
这是一个普通的exe能代表绝大部分PE文件(百分之98以上的PE文件),它的文件大小为40,856字节。

用PE工具查看它的SizeOfImage(内存大小) 为0x8000=32,768。

在<PE权威指南><逆向工程核心原理中>都有提到过:一个PE文件,它有两种状态,在硬盘里和在内存中。PE文件在这两种状态中的字节大小不一样。
当PE文件从硬盘映射到内存中,会进行拉伸,字节大小会变大。
也就是上面的SizeOfImage应该大于40,856(在硬盘中的大小)。
但是在这里SizeofImage=32,768小于40856,这违背了我们知道的常理。
在提点下,发现了原因。

这个INSTDRV.EXE 有 “数字签名”(这个签名是编译后加上的)。数字签名作为节的一部分,它并不参与映射到内存中,这也是为什么上面大于的原因。

我们对这个原因进行验证,利用PEloader豪华版进行重建PE文件。
重建后的PE文件:

图片描述

此时的SizeofImage=0x7D58=32,088 > 21,315(重建后的大小) 符合文件的映射

图片描述

结论:一个PE文件的文件大小可能大于它在内存映射后的大小,是因为其在编译完成后添加了数字签名,数字签名以一串十六进制数的形式添加到了节中。

这个问题在YY.exe和QQ.exe 这些双签名 (SHA1 SHA256)文件中存在。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-9-13 17:55 被SSH山水画编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//