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

已签名EXE如何在不重签前提下向签名字段写入更多自定义数据?

可实现的扩展方案

方案1:利用签名的未认证属性存储数据

这是成本最低、兼容性最好的方案,Authenticode签名的未认证属性本身不在签名校验的覆盖范围内,新增、修改该部分内容不会破坏原有签名的有效性。

  • 单条未认证属性可存储的内容可达数KB,完全满足用户标识、授权信息这类常规需求,多属性叠加可进一步扩容。
  • 实现步骤:
    • 读取PE文件的签名数据解码为SignedCms对象
    • 构造自定义未认证属性,可使用私有OID作为标识,属性值直接写入你要存储的用户专属信息
    • 调用SignedCms.UnsignedAttributes.Add()方法添加属性
    • 重新编码签名数据,更新PE头的IMAGE_DIRECTORY_ENTRY_SECURITY字段的长度和内容即可,记得保证最终签名区块长度为8的倍数,不足补0即可。

方案2:附加自定义证书作为数据载体

如果需要存储更大容量的数据(数十KB到数MB级别),可以往签名的证书链中插入一张自定义自签名证书,将数据存储在该证书的自定义扩展字段中:

  • 该自签名证书不需要被系统信任,仅作为数据载体存在,Authenticode校验只会验证原有签名证书的合法性,附加证书不会影响校验结果。
  • 这种方式的存储上限更高,适合需要嵌入大量自定义数据的场景。

方案3:PE文件末尾追加Overlay数据

如果不需要将数据存在签名字段中,还有一种更简单的方案:直接将自定义数据追加到EXE文件的末尾:

  • Authenticode签名校验只会覆盖PE头定义的各个节区和签名区块本身,文件末尾的额外数据(Overlay)完全不会参与校验,不会破坏签名有效性。
  • 这种方式没有存储容量上限,写入时可以在数据末尾追加4个字节存储数据总长度,EXE运行时直接读取末尾长度后反向读取对应数据即可,实现成本极低。

以上所有方案均满足你的约束条件:不需要重编译EXE、不需要重新签名、不会破坏原有签名的完整性和有效性,Windows系统的签名校验、SmartScreen拦截都不会触发异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:18:00