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