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

使用rcedit/Reshacker修改Windows.exe后,signtool签名失败求助

解决修改Windows EXE资源后signtool签名报0x800700C1错误的办法

错误原因

0x800700C1错误提示“无效的EXE格式”,本质是修改PE资源后,文件的校验和(CheckSum)未更新,或者资源编辑工具破坏了PE文件的结构规范,导致signtool在代码签名的校验环节判定文件格式非法。

具体解决步骤

1. 更新PE文件校验和

修改资源后,必须更新PE文件的校验和,确保结构符合Windows规范。使用Windows SDK自带的editbin工具执行以下命令:

editbin /RELEASE %outputFile%

该命令会自动计算并写入正确的校验和,修复PE结构的完整性。

2. 检查资源文件的合规性

  • 图标文件:必须是标准Windows ICO格式,需包含多种尺寸(16x16、32x32、64x64、256x256)和32位带Alpha通道的版本,避免使用PNG转ICO的非标准文件。
  • 版本字符串:ProductName和FileDescription不能包含非ASCII字符、控制字符等非法内容,确保符合Windows版本资源的字符串规范。

3. 临时排查:跳过页面哈希检查

如果更新校验和后仍报错,可尝试在signtool命令中添加/ph参数跳过页面哈希校验(仅用于排查问题,不推荐正式环境使用):

signtool sign /f 你的证书文件.pfx /p 证书密码 /ph %outputFile%

若此命令成功,说明问题确实出在PE结构的哈希校验上,需重新确认步骤1的校验和更新是否生效。

4. 使用严格合规的资源编辑方式

若第三方工具(rcedit、Reshacker)始终导致结构问题,建议改用Windows SDK原生工具通过资源脚本修改:

  1. 编写资源脚本(如app.rc):
#include <windows.h>
IDI_MAIN_ICON ICON "你的图标文件.ico"
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904B0"
        BEGIN
            VALUE "ProductName", "你的产品名称"
            VALUE "FileDescription", "你的文件描述"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END
  1. 编译资源脚本生成.res文件:
rc app.rc
  1. 将资源嵌入目标EXE:
link /nologo /dll /noentry /out:%outputFile% %outputFile% app.res

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 12:00:02