私のインストーラ ビルドは、ビルド プロセス中にコード署名証明書を使用して DLL に「署名」します。
2 回続けてビルドしようとすると、DLL が既に署名されているため、2 回目のビルドが失敗することに気付きました。明らかに、ビルドで DLL のコピーに署名することでこれを修正できますが、問題に興味をそそられました。
DLL の「署名を解除」することは可能ですか?
私のインストーラ ビルドは、ビルド プロセス中にコード署名証明書を使用して DLL に「署名」します。
2 回続けてビルドしようとすると、DLL が既に署名されているため、2 回目のビルドが失敗することに気付きました。明らかに、ビルドで DLL のコピーに署名することでこれを修正できますが、問題に興味をそそられました。
DLL の「署名を解除」することは可能ですか?
このXDA フォーラムの投稿から delcert.exe を使用できます。
これは、*.exe、*.dll、*.mui などの PE 実行可能ファイルからデジタル署名 (Authenticode) を取り除く (削除する) 小さなツールです。
ImageRemoveCertificate APIを使用すると、.dll ファイルから署名を簡単に削除できます。
タグで言語が指定されていませんが、この記事では C# で言語を実装する方法を示します。C# を使用してファイルからデジタル署名を削除する
それ以外に、作業を行うためのシンプルなツールを探している場合は、FileUnsignerを使用できます。
別の可能なオプションは、SignTool.exeに切り替えることです。これはWindows SDKに付属しており、既に署名されているバイナリに署名してもエラーは発生しません。ビルド プロセスで signtool.exe を使用していますが、何かが既に署名されている場合でも問題はありません。
確かにそれは可能ですが、些細なことではありません。
事前に署名されたDLLのコピーを保存する方が簡単ですが。
このデジタル署名は、PEファイルの最後に追加される追加のセクションにすぎません。必要に応じて、署名を削除するプログラムを作成できます。
ファイルを切り捨てるほど簡単ではありません。ファイルヘッダーの署名への参照を削除する必要があります。DLLに複数の署名があり、1つだけ削除したい場合は、複雑になる可能性があります。
PEファイルのフォーマットはここに公開されています
ビルドツールが「再署名」をサポートしているかどうかを確認します。これにより、既存のすべての署名が置き換えられます。
そうでない場合は、Stud_PEを使用して署名ブロックを削除できます。Stud_PEでDLLまたはEXEを開き、[セクション]タブに移動し、デジタル署名セクションを右クリックして、[セクションの削除]を選択します。ただし、これにはユーザーの操作が必要です。古いバージョンのツールはファイルを破壊する可能性があります。