ZBLOG

win32 设置二进制文件中属性的详细信息中的属性的值A改为B

在 Windows 系统中,二进制文件(如 .exe.dll)的“详细信息”属性(如文件描述、版本、版权等)存储在版本信息资源(Version Information Resource)中。要修改这些属性值(例如将字段 A 改为 B),需要通过以下步骤操作:


方法 1:直接修改 .rc 资源文件并重新编译

适用场景

  • 你有源代码和编译环境(如 Visual Studio)。
  • 需要永久修改属性。

步骤

  1. 找到资源脚本文件(.rc
    通常在项目中包含类似 resource.rc 的文件,其中定义了版本信息块。

  2. 修改字符串字段
    StringFileInfo 块中,将目标属性值从 A 改为 B

    1. BEGIN
    2. BLOCK "040904b0" // English (US), Unicode
    3. BEGIN
    4. VALUE "FileDescription", "Original Value A\0" // 改为 "New Value B\0"
    5. VALUE "CompanyName", "Old Company\0" // 其他字段...
    6. END
    7. END
  3. 重新编译项目
    编译器会将更新后的资源嵌入到二进制文件中。


方法 2:动态修改已存在的二进制文件

适用场景

  • 没有源代码,需直接修改已编译的二进制文件。
  • 注意:会破坏数字签名,需重新签名。

步骤(使用 Win32 API)

  1. 使用 BeginUpdateResource 打开文件

    1. HANDLE hUpdate = BeginUpdateResource("target.exe", FALSE);
    2. if (hUpdate == NULL) {
    3. DWORD err = GetLastError();
    4. // Handle error...
    5. }
  2. 准备新的版本信息数据
    需要生成一个完整的版本信息资源块(格式与 .rc 相同)。可以通过以下方式:

  3. 更新资源

    1. // lpData: 指向新版本信息数据的缓冲区
    2. // dwSize: 数据大小
    3. if (!UpdateResource(
    4. hUpdate,
    5. RT_VERSION, // 资源类型为版本信息
    6. MAKEINTRESOURCE(VS_VERSION_INFO), // 资源ID
    7. MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), // Language ID
    8. lpData,
    9. dwSize)) {
    10. DWORD err = GetLastError();
    11. // Handle error...
    12. }
  4. 提交更改并关闭句柄

    1. if (!EndUpdateResource(hUpdate, FALSE)) { // FALSE = Apply changes
    2. DWORD err = GetLastError();
    3. // Handle error...
    4. }

关键注意事项

  1. 权限要求
    需管理员权限才能修改其他用户的二进制文件。

  2. 备份文件
    直接修改二进制可能损坏文件,建议提前备份。

  3. 数字签名失效
    修改后会破坏签名,需用 signtool.exe 重新签名:

  1. signtool sign /fd sha256 /a /f mycert.pfx /p password target.exe
  1. 工具推荐
  • *Resource Hacker*:可视化编辑二进制文件的资源。
  • *Visual Studio*:内置资源编辑器。

完整示例代码

如果需要动态替换文件中某个特定字段(如将 CompanyName 从 “A” 改为 “B”),可以结合:

  1. GetFileVersionInfo + VerQueryValue (读取原值)。
  2. *构造新数据*后调用 UpdateResource.

提供具体需求字段后,我可给出针对性代码片段!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23104

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?