【问题标题】:Can I remove a digital signature from a DLL?我可以从 DLL 中删除数字签名吗?
【发布时间】:2010-09-25 08:46:05
【问题描述】:

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

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

是否可以“取消签名”DLL,如果不可以,为什么不...?

【问题讨论】:

    标签: winapi dll code-signing


    【解决方案1】:
    signtool remove /s C:\path\to.exe.or.dll
    

    signtool 在 Windows SDK 中可用,并且必须至少来自 Windows 8 SDK 工具包(版本 6.2.9200.20789)才能支持 remove 命令。

    【讨论】:

    • 嗯,你在哪里见过 singtool.exe 的“删除”命令?那是哪个版本?请问可以链接吗?据我所知,您现有的链接没有显示出来。
    • 嗯,使用“signtool /?”查看选项。 @NikolaDavidovic
    • 嗯,它没有remove 命令。自己检查一下。它未在您提供的链接中列出。所以我问,你在写这个答案时使用的是什么 signtool.exe 版本?我检查了产品版本 6.1.7600.16385。
    • 我使用 Visual Studio 命令提示符:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>signtool /? Usage: signtool <command> [options] Valid commands: sign -- Sign files using an embedded signature. timestamp -- Timestamp previously-signed files. verify -- Verify embedded or catalog signatures. catdb -- Modify a catalog database. remove -- Remove embedded signature(s) or reduce the size of an embedded signed file. For help on a specific command, enter "signtool <command> /?"
    • @JConstantine 一个证书主要用来表示:“这个文件已经被某个权威机构批准了”。当某个未定义的用户删除证书时,指示变为:“此文件已被不受信任的一方修改”。我看不出有什么问题。毕竟这是事实。
    【解决方案2】:

    当然有可能,但不是微不足道的。

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

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

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

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

    【讨论】:

    • 谢谢。不是完全我希望的答案(例如“运行 UNSIGNTOOL”),但我现在更了解情况了!
    【解决方案3】:

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

    您的标签中没有指定任何语言,但本文展示了如何在 C# 中实现它。 Remove digital signature from a file using C#

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

    【讨论】:

      【解决方案4】:

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

      另外,请查看问题What's the main difference between signcode.exe and signtool.exe?

      【讨论】:

        【解决方案5】:

        您可以从XDA Forum post 使用 delcert.exe。

        这是一个剥离(去除)数字签名的小工具(Authenticode) 来自 *.exe、*.dll、*.mui 等 PE 可执行文件。

        【讨论】:

        • 这个工具使用ImageRemoveCertificate API,效果很好。
        • 而且它甚至带有源代码,太棒了。
        【解决方案6】:

        检查您的构建工具是否支持“重新签名”。这应该会替换所有现有的签名。

        如果没有,您可以使用Stud_PE 删除签名块。 在 Stud_PE 中打开 DLL 或 EXE,转到部分选项卡,右键单击数字签名部分并选择“删除部分”。但是,这需要用户交互。该工具的旧版本可能会破坏该文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-06
          • 1970-01-01
          • 2023-03-29
          • 2022-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-24
          相关资源
          最近更新 更多