我可以从DLL中删除数字签名吗?

Rod*_*ddy 21 dll winapi code-signing

我的安装程序在构建过程中使用代码签名证书"​​签署"DLL.

我注意到如果我尝试连续构建两次,第二次构建失败,因为DLL已经签名所以签名代码扼流圈.显然,我可以通过在构建中签署DLL的副本来解决这个问题,但问题引起了我的兴趣:

是否可以"取消签名"DLL,如果没有,为什么不......?

sma*_*ins 28

您可以使用此XDA论坛帖子中的 delcert.exe .

这是一个小工具,可以从PE可执行文件中删除(删除)数字符号(Authenticode),如*.exe,*.dll,*.mui等.


vin*_*'th 25

signtool remove /s C:\path\to.exe.or.dll
Run Code Online (Sandbox Code Playgroud)

Windows SDK中提供了signtool,并且必须至少使用Windows 8 SDK工具包(版本6.2.9200.20789)才能获得该remove命令.

  • 嗯,您在哪里看到过 singtool.exe 的“删除”命令?那是哪个版本?你能链接一下吗?据我所知,您现有的链接没有显示它。 (2认同)
  • 我使用Visual Studio命令提示符:`C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC> signtool /?用法:signtool <command> [options]有效命令:sign - 使用嵌入式签名对文件进行签名.timestamp - 时间戳记以前签名的文件.验证 - 验证嵌入或目录签名.catdb - 修改目录数据库.删除 - 删除嵌入的签名或减小嵌入的签名文件的大小.有关特定命令的帮助,请输入"signtool <command> /?"` (2认同)
  • @JConstantine 证书主要用来表示:“这个文件已经被某个权威机构批准”。当某些未定义的用户删除证书时,指示将变为:“此文件已被不受信任的一方修改”。我不认为这有什么问题。这毕竟是事实。 (2认同)

coo*_*ine 13

使用ImageRemoveCertificate API 从.dll文件中删除签名相当容易.

您没有在代码中指定任何语言,但本文将介绍如何在C#中实现它.使用C#从文件中删除数字签名

除此之外,如果您正在寻找一个简单的工具来为您完成工作,您可以使用FileUnsigner.


jve*_*zey 9

另一种可能的选择是切换到SignTool.exe.它附带Windows SDK并签署已签名的二进制文件不会生成错误.我在构建过程中使用signtool.exe并且没有任何困难,即使已经签名了.

另外,请查看问题signcode.exe和signtool.exe之间的主要区别是什么?


Die*_*nte 7

当然这是可能的,但不是微不足道的.

虽然保存预签名DLL的​​副本会更容易.

此数字签名只是附加到PE文件末尾的额外部分.如果需要,您可以编写一个删除签名的程序.

它不像截断文件那么简单; 您必须删除文件头中对签名的引用.如果DLL具有多个签名并且您只想删除一个签名,则可能会变得复杂.

PE文件的格式在此公开记录