| 一、前言 |
| 不知大家用过exescope没有,那是日本鬼子写的一个很有用的东西,它能把exe等pe格式(portable executable)文件的资源(图标、位图、对话框、声音等等)分析出来,并能改写回去。当然vc的ide也有类似功能。大家是不是觉得很神秘?其实只要弄清了pe文件的结构,你也可以写一个类似的工具出来。下面是我近 来对pe文件的分析经验,给大家作参考。同时希望看到有中国人能写出比日本鬼子更牛的分析工具来。 |
| 二、重要的数据结构 |
| PE格式简要说明:(更详细的资料见http://vcangle.8u8.com文件格式专页) PE文件总结构如下表: |
DOS MZ header ;dos头
DOS stub ;dos附加段
PE header ;NT头
Section table ;节表
Section 1 ;第一节
Section 2 ;
Section ...
Section n ;第n节
其中NT头:
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature;//PE文件头标志 :"PE/0/0"。
IMAGE_FILE_HEADER FileHeader; //PE文件物理分布的信息
IMAGE_OPTIONAL_HEADER32 OptionalHeader;//PE文件逻辑分布的信息
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
节表数据结构:(可参考winnt.h)
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];//节表名称,如“.text”
union { DWORD PhysicalAddress; //物理地址
DWORD VirtualSize; //真实长度
} Misc;
DWORD VirtualAddress; //RVA
DWORD SizeOfRawData; //物理长度
DWORD PointerToRawData; //节基于文件的偏移量
DWORD PointerToRelocations; //重定位的偏移
DWORD PointerToLinenumbers; //行号表的偏移
WORD NumberOfRelocations; //重定位项数目
WORD NumberOfLinenumbers; //行号表的数目
DWORD Characteristics; //节属性
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
2.2位图文件格式。由文件头,位图信息和数据段组成。
typedef struct tagBITMAPFILEHEADER { // bmfh文件头
WORD bfType; //"BM"
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFO { // bmi----位图信息
BITMAPINFOHEADER bmiHeader; // ----位图信息头
RGBQUAD bmiColors[1];// ----调色板*
} BITMAPINFO;
typedef struct tagBITMAPINFOHEADER{ // bmih 位图信息头
DWORD biSize; //该结构大小
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage; //位图数据大小
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER; //该结构后紧接着就是DATA了。
|
| 三、取资源主要思路 先要判断是否PE文件。文件头两byte应为0x4d5a即("MZ"),然后到地址0x3c中读出PE文件头(_IMAGE_NT_HEADERS)。判断文件头结构的Signature是否为17744(即"PE/0/0")。 读出节表(_IMAGE_SECTION_HEADER),判断有没有资源节。我采用了一个简单的方法:节表名为".rsrc/0/0"即是资源节。(注:据说该法不定可靠) 如有资源节,则读取资源目录(_IMAGE_RESOURCE_DIRECTORY)和资源入口(_IMAGE_RESOURCE_DIRECTORY_ENTRY)。资源在pe文件中处一树型结构中,可有三层。在资源目录根部,如果资源入口的资源名是一个id,那么它代表一种资源类型。否则,它指向下一层资源入口。(祥见例程) 读出具体资源的数据来。具体资源的入口(_IMAGE_RESOURCE_DATA_ENTRY)在就是资源树的叶子。它的OffsetToData成员指明了具体资源的物理位置。不过特别要注意的是,OffsetToData并不是具体资源在文件中的实际偏移,具体见我的例程。具体资源的长度则由Size成员指定。 导出bmp资源。pe文件里的bmp资源由BITMAPINFO部分和BITMAPDATA部分组成。我们只要为它构造一个文件头(BITMAPFILEHEADER),就可以写成bmp文件了。这里特别要注意的是BITMAPINFO的bmiColors成员是未定长的。你要为它 指明长度,以申请内存。 好了,我不说了,有什么不明白就看例程吧。 |
| 四、例子程序简介 我的例子程序基本实现了读取pe文件的资源信息,并能把位图显示、导出。其它资源的操作还在研究中。由于作者水平有限,在分析有些文件时可能会不成功。欢迎指正!主页: http://vcangle.8u8.com,邮箱:king_koo@163.net. |
| 五、参考资料 http://www.youkuaiyun.com/dev/Format/ http://mantousoft.51.net |
相关推荐
资源提取助手V1.0-用于快读提取exe程序中的位图和图标资源
资源提取助手V1.0,可以快读提取exe程序中的位图和图标资源,方便好用。有什么问题请访问:https://blog.youkuaiyun.com/clever101
eXeScope 提取.exe/.dll中的图片资源
eXeScope 下载地址:https://wwe.lanzoui.com/ionZpwngz0b打开eXeScope软件。 打开选择你要提取的应用程序 打开后就会把图片资源等应用的信息解析出来 找到你要的图片资源,导出就行了。
exe文件资源提取工具ResourcesExtract
可以提取的资源包括:图标、光标、位图、HTML相关资源、动画图标、动画光标、AVI文件、清单资源、类型库、字符串
逆向工程 --- exe,dll内部文件资源提取
使用Die工具点击高级--->资源--->提取器--->转储全部 原创作者: gklbb 转载于...
用STM32F103单片机控制电调制动无刷电机
用电调控制无刷电机制作遥控飞艇 蓝牙控制 调控电调 无刷电机 用电调控制无刷电机制作遥控飞艇 代码区 mian.c #include "delay.h" #include "sys.h" #include "usart.h" #include "usart3.h" #include "timer.h" #include "led.h" #include "key.h" int main(v...
CanMV K230实战:用MicroPython玩转AI视觉识别(附完整代码)
本文详细介绍了如何使用MicroPython在CanMV K230开发板上实现AI视觉识别,包括环境搭建、摄像头配置、模型部署及优化技巧。通过实战案例(如智能门禁和工业分拣机器人),展示如何快速开发低门槛的嵌入式AI应用,特别适合初学者和嵌入式开发者。
应用《信管通通用文件编报信息管理系统》完成办公设备信息编报
随着信息化技术的迅速发展,各行各业的办公管理也越来越依赖于数字化手段。尤其是在大中型企业和政府机构中,办公设备的管理变得尤为重要。如何高效、规范地对办公设备进行信息编报,成了许多企业管理者面临的一大挑战。在这一背景下,《信管通通用文件编报信息管理系统》应运而生,为办公设备的管理提供了便捷的解决方案。
告别迷茫!用C#和Windows.Devices.Bluetooth搞定BLE设备连接与数据收发(附完整代码)
本文详细介绍了如何使用C#和Windows.Devices.Bluetooth命名空间实现BLE设备连接与数据收发。从开发环境配置到设备扫描、服务发现、数据通信及资源管理,提供完整代码示例和实战技巧,帮助开发者快速掌握低功耗蓝牙开发,解决连接稳定性和异常处理等常见问题。
python3无损资源储存,py文件内可以带任何资源
版权申明:此博文后期必火,本人原创,转载请注明出处。 前言:python这个东西,跟按键精灵类似,都属于脚本语言。按键精灵编写脚本的时候,有个很好使的功能,那就是打包的exe程序可以添加附件,运行程序的时候能够释放附件并进行一些操作。按键精灵除了不能在附件里面添加exe的文件之外,基本上其他附件都支持添加。相似的软件还有易语言,易语言的资源表里是可以加入图片和音乐等东西的。 1. ...
pynq-z2 HLS开发
定制Overlay一.用HLS生成一个定制IP功啊啊是合理的创建标题,有助于目录的生成如何改变是式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 一.用HLS生成一个定制IP ...
企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程
本文详细解析了企业微信群机器人的Webhook配置全流程,从创建机器人、获取关键Webhook地址,到使用代码发送文本、Markdown等多种消息类型。内容涵盖安全加固、错误处理及与CI/CD等系统集成的实战指南,帮助企业快速构建高效、稳定的内部通知系统。
PDF转换图片,命令行exe用起来挺香
平常用图片转PDF用得多,现在猫猫需要将PDF转换成图片,找到找去一大圈,太多收费的,于是我找啊找啊,找到一个开源的组件poppler,我本来是找的是node的版本,后面发现里面dll一堆,于是看了看,试了试。发现两个exe 疑似可以转换pdf到图片,于是先试了pdfimages未成功,pdftocairo.exe才是可以转换的exe.果断将dll和exe提取出来,其它exe就不copy了。将dl...
ubuntu 安装node和npm
在ubuntu中经常需要用到node ,npm,因为npm基本会和node同时安装,所以只需要安装node即可。可以使用 nvm(Node Version Manager)来管理你的 Node.js 版本。
完美定制你的QQ,把QQ里不要的文件通通删除!
转载注明 转自珊瑚虫论坛 黑发如云感谢潇湘夜雨斑竹交流经验 我列出来的是可供删除的.没列出来的就是 视频.音频.各种重要资源.必不可少的功能..谁也不想有一天突然要用到一个功能发现不正常吧.所以.没有必要连常用的功能都涉及到删除的列表里面. 这个版本的qq发布也有一段时间了.因为每次更新qq可能目录下的文件有所更改...很多网友不能接受增加的许多东西.但是要自己精简.无从下手. 很明显的还可以.
手把手教你学 Simulink (1.3):探索Simulink模块库的奇妙世界
Simulink模块库按照功能分为多个类别,每个类别包含专门用于特定任务的模块。% 打开Simulink库浏览器% 或者以编程方式获取库列表disp('可用的库列表:');end常用模块(Simulink):最基础和最常用的模块信号处理模块(DSP System Toolbox):专业信号处理工具通信模块(Communications Toolbox):通信系统设计控制系统模块(Control System Toolbox):控制系统设计与分析% 创建自定义模块库。
RK3568平台开发系列讲解(项目篇)手写数字识别
📢 本篇章带大家基于飞桨(PaddlePaddle),完成一个简单的手写数字识别任务。
如何查看exe或dll调用了什么dll
[转载]如何查看exe或dll调用了什么dll呢 已有 19410 次阅读 2014-4-17 21:08|系统分类:科研笔记|文章来源:转载 Dependency Walker使用说明 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库。现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! 初窥门径:Windows
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
如何保护自己的exe不被UnFoxAll反编译
用VFP的人,有专业的,有非专业了,很多人其实是小白,问出的问题是小白,如果问题不对,我们引导他们问正确的问题。无论如何请不要嘲笑他们说帮助都不看,这么简单的问题都不会,嘲笑别人不行,而无法提出建设性答案,是很low的。也许你得意的技巧其实是个弯路!微信小程序,微信公众号开发,H5 APP开发,Extjs BS开发,VFP面向对象进阶,VFP中间层开发。"VFP极简混合开发,少写代码、快速出活,用VFP,但不局限于VFP,各种语言混合开发"暂定千字50元红包,,优秀的文章红包更大,一经发表,红包到手。
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
请问如何强行释放所有已关闭的程序所残留的内存等资源?类似于微软的那个叫mem.exe的工具,如何入手呢?...
请问如何强行释放所有已关闭的程序所残留的内存等资源?类似于微软的那个叫mem.exe的工具,如何入手呢? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiBase/html/delphi_20061207081040248.html 有的程序设计的不完美或者说是操作系统配合的不完美,在程序已关闭后有的资源不能很好的让操作系统回收,...
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
dll与exe的区别
DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用程序直接或间接调用。 所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。 动态链接所调用的函数代码并没有被拷贝到应用程...
res-downloader资源下载实战指南:3分钟上手,视频号、抖音、小红书通通拿下
你有没有遇到过这样的瞬间:刷到妈妈在视频号里发的一段老照片合集,想保存下来,结果视频号压根没有"下载"按钮;想把抖音上那段精彩的舞蹈发给朋友,只能录屏,画质糊成一团;好不容易在小红书找到想要的壁纸原图,右键却一片空白…… 别急,这不是你操作的问题,而是很多平台压根没打算让你"拿走"内容。今天介绍的这款免费开源的资源下载神器 **res-downloader**,就是专门解决这类痛点的。它不用你懂
dll和exe的区别和联系
转自:http://www.cnblogs.com/choi/archive/2006/08/11/474139.html 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库。现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! 初窥门径:Windows的基石 随便打开一个系统目录,一眼望去就能看到很多扩展名DLL的文件
4599



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



