You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改C++编写的EXE程序界面图片?Resource Hacker未找到目标资源

解决EXE程序运行时图片替换的问题

一、先明确图片的加载逻辑

1. 能否获取临时目录的图片路径?

  • 可以用Process Monitor(ProcMon)追踪程序的文件操作:过滤该EXE的读写行为,查看是否有从临时目录(如%temp%、C:\Users\<用户名>\AppData\Local\Temp)读取图片的记录。如果有,就能直接拿到对应路径,之后可在程序加载图片前替换该临时文件,或监控文件变化实时替换。
  • 也可以手动排查:运行程序后立刻进入临时目录,按修改时间排序查找刚生成的图片文件。
  • 如果上述操作都没找到临时图片,说明图片大概率是直接从EXE内部读取(未解压到磁盘)。

2. 为什么Resource Hacker找不到图片?

Resource Hacker仅能识别Windows标准资源类型(如RT_BITMAP、RT_PNG这类注册过的资源)。如果程序将图片以自定义二进制数据、加密/压缩后的形式嵌入EXE,Resource Hacker就无法识别。

二、运行时替换图片的可行方案

1. 内存补丁/HOOK法

  • 用调试工具(如x64dbg、OllyDbg)附加程序,定位图片加载相关函数(比如GDI+的GdipLoadImageFromStream、Win32的LoadImage),在调用处下断点追踪图片数据的内存地址,直接替换为目标图片的二进制数据。
  • 编写DLL注入程序,HOOK图片加载函数:当程序调用该函数加载目标图片时,强制返回你指定图片的句柄。比如HOOKLoadImageW,拦截原加载请求,替换为自定义图片路径。

2. 文件路径劫持

  • 如果程序从固定路径(含相对路径)加载图片,将你的图片重命名为目标文件名,放到程序的优先加载路径下(比如程序根目录),多数程序会优先读取本地文件。
  • 若加载路径是系统目录,可通过Image File Execution Options或第三方劫持工具实现,但需谨慎操作,避免影响其他程序。

3. 二进制修改EXE(图片未加密时)

  • 用十六进制编辑器(如HxD)打开EXE,搜索目标图片的文件头特征(比如PNG的89 50 4E 47 0D 0A 1A 0A、JPG的FF D8 FF)。找到完整的图片数据块后,直接用新图片的二进制数据替换(注意新图片大小不能超过原数据块,否则会破坏EXE结构;若需更大图片,需调整EXE节表,操作难度较高)。

内容的提问来源于stack exchange,提问作者ShikamaruBH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:25:24