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

修改已签名EXE的SHA1哈希字节及Windows执行逻辑的技术咨询

关于签名EXE修改与Windows执行逻辑的解答

首先得澄清一个关键误解:你用signtool查到的SHA1哈希(CB7E84887F3C6015FE7EDFB4F8F36DF7DC10590E)是代码签名证书本身的指纹,不是EXE文件内容的哈希,也不是数字签名块里的明文哈希值——这就是你在十六进制编辑器里找不到它的原因。

一、数字签名EXE的核心执行验证逻辑

数字签名的本质是确保文件未被篡改,流程大概是这样:

  • 开发者对EXE的可执行内容(会排除后续嵌入的签名块)计算哈希(现在主流用SHA256,SHA1已经被逐步淘汰);
  • 用自己的代码签名私钥对这个哈希加密,生成数字签名;
  • 把签名、完整的证书链一起嵌入到EXE的PE结构尾部(签名目录区域)。

Windows加载EXE时的验证步骤:

  1. 检查嵌入的证书是否合法(有效期、是否被吊销、颁发机构是否在系统信任列表里);
  2. 重新计算EXE可执行内容的哈希;
  3. 用证书的公钥解密签名块里的加密哈希,和刚计算的哈希比对;
  4. 任意一步失败,就判定签名无效。

二、如何修改并让签名损坏?

你不需要专门找哈希字节来修改——随便改EXE的任意内容都会破坏签名:

  • 工具选择:用HxD、010 Editor、WinHex这类常见的十六进制编辑器就行,打开chrome.exe后,随便修改一个代码段的字节(比如找一个看起来像常量的地方改一个值),保存后签名就直接失效了。
  • 如果你执着于修改签名相关的哈希:其实签名块里的加密哈希是用私钥加密后的密文,你就算改了它,Windows重新计算的文件哈希也和它不匹配,验证照样失败,完全没必要这么做。

三、Windows对修改后EXE的处理方式

根据系统安全设置和软件类型,处理逻辑会有差异:

  • 强制签名验证场景:如果组策略里设置了“要求所有可执行文件必须有有效数字签名”,执行时会直接弹出错误提示:“Windows无法验证此文件的数字签名。此文件可能已损坏或被篡改。”并阻止运行。
  • 普通场景:
    • 首先可能触发Windows Defender的恶意软件检测,因为修改后的文件哈希不在信任列表里,会被标记为未知文件甚至直接隔离;
    • 就算过了杀毒,执行时UAC提示会显示“发布者:未知”,而非原来的Google LLC;
    • 像Chrome这类对代码完整性要求高的软件,修改后大概率直接崩溃,因为代码逻辑被破坏了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:15:55