声明
免责声明: 本站所发布的一切技术分析文章、工具、软件(全部来自于互联网收集)仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请与我们联系处理。
前言
对于简单的软件,我们往往选择直接用ResourceHacker工具进行修改,但是对于有壳的软件,这种工具就无法进行分析了,因为加壳软件会对原程序数据进行压缩/加密,所以我们只能另辟蹊径。
思路分析
还记得以前学习语文,老师说不要傻傻的看,文章是有结构的,按照结构去剖析文章,你会发现基本都是如此,课本上的文章从来不是记流水账。
逆向也是如此,程序都不是任意的被制作出来,都是拥有它的结构,比如Windows下的可执行文件结构叫做PE文件结构。比如今天我们以图片为例子,分析图片的提取和修改,图片其实也有他的结构,很多朋友其实不清楚。
比如PNG图片,就有他的标志性头部和尾部,PNG是我们生活中常见的图片格式,程序中的各种图片都有极大可能是PNG的。
参考文章:https://zhuanlan.zhihu.com/p/397397536
比如我们拿一张PNG图片来分析:
上图文章的头部格式,我们在自己找的图片中也可以看到
0000 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
‰PNG........IHDR
所以我们可以得到结论,只要我们只要在内存中搜索下面的字节特征,就可以在内存中找到我们的图片了
0000 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
‰PNG……..IHDR
有头部就有尾部,通过一些十六进制工具就可以看到:
5432 49 45 4E 44 AE 42 60 82
IEND®B`‚
手动Dump流程
Dump脚本构思
流程逻辑并不复杂
- 读取程序内存
- 搜索PNG头部字节
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
‰PNG........IHDR
- 搜索后把结果全部罗列出来得到一个内存地址列表
- 在内存地址列表中读取每一个地址,从头部开始读取,然后读取是否到达尾部的连续字节,
49 45 4E 44 AE 42 60 82
IEND®B` - 如果到达尾部字节,就记录当前尾部的内存地址
- 从头部到尾部全部保存为二进制PNG文件即可
搜索特征码的代码,论坛有发,在此不做赘述,提供第四个步骤的代码,较为关键
// PNG文件头特征码
const BYTE pngHeader[] = { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52 };
// PNG文件尾特征码
const BYTE pngFooter[] = { 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82 };
保存png文件代码,其中ResultArray是vector地址列表
Dump效果
修改效果
只需要把Dump的图片,自己用PS修一下,然后打个补丁即可,补丁推荐自己写,比较灵活
修改效果图
效果视频