Resource Hacker(也称为ResHacker或ResHack)是由Angus Johnson开发的免费资源解压缩工具和资源编译器,专用于Windows平台。作为一种32位和64位Windows应用程序的资源编辑器,Resource Hacker既是资源编译器(用于*.rc文件),也是反编译器,可以查看并编辑可执行文件(*.exe *.dll *.scr 等)和编译后的资源库(*.res, *.mui)中的资源。
Resource Hacker主要是一个图形用户界面应用程序,只要对资源文件进行开启,它的资源就会显示为图片(或一组图片)或者反编译后的文本。二进制资源,通常是图片,不能直接使用Resource Hacker编辑,但它们可以非常方便地在被外部图片编辑器修改后导出和导入。对于格式未知的二进制资源,Resource Hacker会以只读的形式展示这些二进制文本。
除了图形用户界面,Resource Hacker的大多数功能还可以从命令行访问,这样就不必打开Resource Hacker图形用户界面。命令行操作指令和Resource Hacker脚本可以消除重复Resource Hacker任务带来的烦琐。例如编译和反编译资源、查看和编辑资源等都可以通过执行命令来操作。
Resource Hacker是一个强大的资源修改工具,用户可以通过它轻松地修改系统文件,改变对话框、菜单等的外观,甚至可以改变Windows的外观。不过需要注意的是,对系统文件的修改需要谨慎,因为不正确的修改可能会导致系统出现问题。
编译:
可以通过打开现有的资源脚本文件或使用 Resource Hacker 的编辑器从头开始创建一个来启动编译。
找到资源定义语句的完整列表。 Resource Hacker 编译器的其他功能包括: #INCLUDE 指令(用于访问头文件等中的定义语句)可以嵌套到多个级别,#IF 和 #IFDEF 指令也可以。#DEFINE、#UNDEF、#IF、#ELIF、#ELSE、#IFDEF、#IFNDEF、#INCLUDE 和 #PRAGMA 指令均受支持。双引号 (") 字符之间的字符串可能包含典型的 'C' 样式反斜杠'转义'字符 — \t 、 \n 、 \\ 、 \" 、 \x、\u 和 \377 (八进制)。字符串中的双引号必须使用前面的反斜杠或另一个双引号进行“转义”。脚本注释前面有双斜杠 (//) 或分号 (;)。允许使用带有相对路径的文件名。包含空格的文件名必须用双引号字符括起来。 报告编译器错误消息,甚至嵌套在 INCLUDE 语句中的错误...
查看和编辑资源:
打开资源文件后,其资源通常会显示为图像(或图像组)或反编译文本。二进制资源(通常是图像)无法直接使用 Resource Hacker 进行编辑,但一旦通过外部图像编辑器修改,它们仍然可以非常轻松地导出和导入。(我认为复制第三方图像编辑器的出色功能没有任何好处。)
命令行语法:
Resource Hacker 的几乎所有功能都可以从命令行访问,而无需打开 Resource Hacker GUI。
命令行指令和 Resource Hacker 脚本可以消除重复 Resource Hacker 任务所带来的苦差事。
命令行指令是 switch 语句后跟 switch 参数的组合,如下表所示: 命令行语句:
范围
- filename - 要修改的文件的名称。它应该是 Windows PE 文件(*.exe、*.dll 等)或已编译或未编译的资源文件(*.res 或 *.rc)
- 通常是新文件或修改文件的文件名,但在提取多个资源时也可以是文件夹
- 文件名 - 包含添加到打开的文件中的资源。
- 对打开的文件执行的操作
- add - 添加资源,但如果资源已存在则失败
- addoverwrite - 添加资源,如果已存在则覆盖
- addskip - 添加资源,但如果已存在则跳过
- 编译 - 将资源脚本文件 (*.rc) 编译为二进制资源文件 (*.res)
- 删除 - 删除资源
- extract - 提取资源
- 修改 ——修改资源
- changelanguage(langID) - 更改所有资源的语言
- 资源掩码 - 类型、名称、语言
- 逗号是必需的,但类型、名称和语言中的每一个都是可选的
- 文件名或CONSOLE或NUL
- CONSOLE 可以缩写为CON
- 记录所执行操作的详细信息
- 如果省略此开关,则日志将写入resourceshacker.log
- 文件名 - 包含多命令脚本,而不是资源脚本以获取更多信息:-help script
- 选项 - 命令行或脚本(始终记录到控制台)其他开关将被忽略。
笔记:
- 开关标识符(-script 除外)可以缩写为单个字符(例如 -res 或 -r)。
- 开关指令不必按任何特定顺序。
- 包含空格的文件名必须用双引号引起来。
批处理文件示例 (为简洁起见,在某些地方使用 rh.exe 而不是 ResourceHacker.exe)
reshack_help.bat:
ResourceHacker.exe -帮助
@pause :: 在 CMD 窗口关闭之前查看控制台输出。
reshack_compile_res_script.bat:
rh.exe -open .\in\resources.rc -save .\out\resources.res -action 编译 -log NUL
reshack_add_icon_to_old.bat:
rh.exe -打开旧的.exe -保存新的.exe -action addskip -res my.ico -mask ICONGROUP,MAINICON,
reshack_extract_all_source_icons_to_icons_folder.bat:
rh.exe -open source.exe -save .\icons -action extract -mask ICONGROUP,, -log CON
@暂停
reshack_extract_all_dialogs.bat:
rh.exe -open source.exe -save .\dialogs.rc -action extract -mask DIALOG,, -log rh.log
reshack_execute_my_script.bat:
ResourceHacker.exe -脚本 myscript.txt
资源黑客脚本:
资源黑客脚本使用以下语法从命令行执行:
ResourceHacker.exe -脚本脚本文件
资源黑客脚本是具有以下格式的文本文件:
//注释前面有双斜杠 [文件名] 打开= 保存= 日志= [命令] //以下一个或多个命令... -添加源文件、资源掩码 -addskip 源文件、资源掩码 -addoverwrite 源文件、资源掩码 -addoverwrite 源文件、资源掩码 -修改SourceFile、ResourceMask -提取TargetFile或TargetFolder,ResourceMask -删除资源掩码 -更改语言(langID) 注意:包含空格的文件名必须用双引号引起来。
资源黑客脚本示例:
rh_script_myprog_rus.txt -
//此脚本删除所有 Language Neutral (0)
//字符串表、菜单和对话框资源项
//在替换它们之前在MyProg.exe中
//与俄语(1049)项目...
[文件名]
exe=MyProg.exe
另存为= MyProg_Rus.exe
日志= MyProg_Rus.log
[命令]
-删除菜单,,0
-删除对话框,,0
-删除字符串表,,0
-添加 MyProg_Rus.res,菜单,,1049
-添加 MyProg_Rus.res,对话,,1049
-添加 MyProg_Rus.res,字符串表,,1049
rh_script_myprog_upd_images.txt -
//该脚本更新 2 个位图和一个 //MyProg.exe 中的图标 ... [文件名] exe=MyProg.exe 另存为= MyProg_Updated.exe [命令] -addoverwrite Bitmap128.bmp,位图,128, -addoverwrite Bitmap129.bmp,位图,129,0 -addoverwrite MainIcon.ico,ICONGROUP,MANICON,0
rh_script_myprog_upd_all.txt -
//该脚本替换所有资源 //在MyProg.exe中包含所有资源 //在MyProgNew.res中 [文件名] exe=MyProg.exe 另存为= MyProg_Updated.exe [命令] -delete ,,, //删除...之前的所有资源 -add MyProgNew.res ,,, //添加所有新资源
“打包”或“压缩”可执行文件:
某些可执行文件是使用压缩算法“打包”或“压缩”的。这不仅可以减小文件大小,还使查看和修改资源变得更加困难。我怀疑这种资源“隐藏”是(或曾经是)此过程中的共同目标。无论如何,为了尊重这些作者,我选择不使用 Resource Hacker 解压文件。顺便说一句,“打包”可执行文件在过去 5 到 10 年里似乎已经变得相当罕见,并且软件作者在可执行资源中公开了更多而不是更少的信息。我怀疑先前对逆向工程知识产权损失的担忧已经得到缓解。
评论(0)