一、概述
想要获取一个可执行文件(PE文件)里包含的资源文件,首先要解析可执行文件,得到资源存储的地址及大小,可参考 https://blog.youkuaiyun.com/zhyulo/article/details/85717711 。然后,根据资源存储方式,得到各资源的数据内容及其大小,可参考 https://blog.youkuaiyun.com/zhyulo/article/details/85930045 。
PE文件的资源中,位图、图标与光标的存储格式与bmp位图、ico图标与cur光标的文件的存储格式不太一样。具体表现在文件头PE资源中的缺失、·分离。但是具体的图片颜色数据,则没有变化。bmp位图、ico图标与cur光标文件格式,可参考 https://blog.youkuaiyun.com/zhyulo/article/details/85934728 。PE资源与独立文件的差别,具体见下面内容:
二、位图资源与bmp文件在数据结构上的差别
位图资源类型ID=2。位图资源与bmp文件在数据结构上的唯一差别,表现在bmp文件的BITMAPFILEHEADER文件头结构,在位图资源中的缺失。而信息头、调色板、位图点阵数据,则没有差别。所以,在位图资源的数据前,补加BITMAPFILEHEADER文件头,另存为bmp文件,就可以做到PE文件位图资源的文件提取了。
首先回顾一下BITMAPFILEHEADER文件头的定义:
typedef struct tagBITMAPFILEHEADER {
WORD bfType; //文件标识,规定为0x4D42,字符显示就是'BM'
DWORD bfSize; //文件大小
WORD bfReserved1; //保留,必须设置为0
WORD bfReserved2; //保留,必须设置为0
DWORD bfOffBits; //从头到点阵数据的偏移
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
可以看到,BITMAPFILEHEADER文件头并没有什么重要的信息(这也是资源中该结构被丢弃的原因吧)

本文详细介绍了PE文件中位图、图标和光标资源与对应独立文件(bmp、ico、cur)在数据结构上的差异。在位图资源中,BITMAPFILEHEADER文件头被省略,可通过补加该头信息提取位图。图标资源的文件头与图片数据分开存储,光标资源类似但包含热点数据。提供了提取这些资源的步骤和代码示例。
最低0.47元/天 解锁文章
2733

被折叠的 条评论
为什么被折叠?



