29

私のインストーラ ビルドは、ビルド プロセス中にコード署名証明書を使用して DLL に「署名」します。

2 回続けてビルドしようとすると、DLL が既に署名されているため、2 回目のビルドが失敗することに気付きました。明らかに、ビルドで DLL のコピーに署名することでこれを修正できますが、問題に興味をそそられました。

DLL の「署名を解除」することは可能ですか?

4

6 に答える 6

31

このXDA フォーラムの投稿から delcert.exe を使用できます。

これは、*.exe、*.dll、*.mui などの PE 実行可能ファイルからデジタル署名 (Authenticode) を取り除く (削除する) 小さなツールです。

于 2012-04-06T15:42:31.027 に答える
15

ImageRemoveCertificate APIを使用すると、.dll ファイルから署名を簡単に削除できます。

タグで言語が指定されていませんが、この記事では C# で言語を実装する方法を示します。C# を使用してファイルからデジタル署名を削除する

それ以外に、作業を行うためのシンプルなツールを探している場合は、FileUnsignerを使用できます。

于 2013-02-04T04:29:23.953 に答える
10

別の可能なオプションは、SignTool.exeに切り替えることです。これはWindows SDKに付属しており、既に署名されているバイナリに署名してもエラーは発生しません。ビルド プロセスで signtool.exe を使用していますが、何かが既に署名されている場合でも問題はありません。

また、質問「signcode.exe と signtool.exe の主な違いは何ですか?」も確認してください。

于 2011-03-11T02:34:18.223 に答える
7

確かにそれは可能ですが、些細なことではありません。

事前に署名されたDLLのコピーを保存する方が簡単ですが。

このデジタル署名は、PEファイルの最後に追加される追加のセクションにすぎません。必要に応じて、署名を削除するプログラムを作成できます。

ファイルを切り捨てるほど簡単ではありません。ファイルヘッダーの署名への参照を削除する必要があります。DLLに複数の署名があり、1つだけ削除したい場合は、複雑になる可能性があります。

PEファイルのフォーマットはここに公開されています

于 2009-01-27T05:14:05.760 に答える
3

ビルドツールが「再署名」をサポートしているかどうかを確認します。これにより、既存のすべての署名が置き換えられます。

そうでない場合は、Stud_PEを使用して署名ブロックを削除できます。Stud_PEでDLLまたはEXEを開き、[セクション]タブに移動し、デジタル署名セクションを右クリックして、[セクションの削除]を選択します。ただし、これにはユーザーの操作が必要です。古いバージョンのツールはファイルを破壊する可能性があります。

于 2012-03-27T14:49:24.163 に答える