Resource Hacker(也称为ResHacker或ResHack)是由Angus Johnson开发的免费资源解压缩工具和资源编译器,专用于Windows平台。作为一种32位和64位Windows应用程序的资源编辑器,Resource Hacker既是资源编译器(用于*.rc文件),也是反编译器,可以查看并编辑可执行文件(*.exe *.dll *.scr 等)和编译后的资源库(*.res, *.mui)中的资源。

rh_dlg_edit

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
  • 选项 - 命令行或脚本(始终记录到控制台)其他开关将被忽略。

笔记:

  1. 开关标识符(-script 除外)可以缩写为单个字符(例如 -res 或 -r)。
  2. 开关指令不必按任何特定顺序。
  3. 包含空格的文件名必须用双引号引起来。

批处理文件示例 (为简洁起见,在某些地方使用 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 年里似乎已经变得相当罕见,并且软件作者在可执行资源中公开了更多而不是更少的信息。我怀疑先前对逆向工程知识产权损失的担忧已经得到缓解。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。