web-dev-qa-db-ja.com

DLLからデジタル署名を削除できますか?

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

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

DLLを「署名解除」することは可能ですか?そうでない場合は、なぜですか...?

22
Roddy
signtool remove /s C:\path\to.exe.or.dll

signtool はWindows SDKで使用可能であり、removeコマンドをサポートするには、少なくともWindows 8 SDKキット(バージョン6.2.9200.20789)からのものである必要があります。

29
vine'th

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

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

28
smartins

ImageRemoveCertificate APIを使用して、.dllファイルから署名を削除するのはかなり簡単です。

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

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

13
coolmine

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

また、質問をチェックしてください signcode.exeとsigntool.exeの主な違いは何ですか?

9
jveazey

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

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

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

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

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

7
Die in Sente

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

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

3
Thomas Weller