PEファイルをデジタル的に削除します

PEファイル(exe、dll、sysなど)に署名するには、ほとんどの場合signtool.exeユーティリティが使用されますが、デジタル署名をファイルから削除する必要がある場合はどのユーティリティを使用する必要がありますか? しかし、そのようなユーティリティは公式ではありません。 署名または再署名(既存の署名の上に署名する)のみできますが、削除はできません。 しかし、HexまたはPEエディターでファイルを修正する必要があり、意図的に損傷したデジタル署名をファイルに残したくない場合はどうでしょうか?



それは何のためですか?

この記事では、生涯で少なくとも一度はHexエディターを使用したことがある人にわかるように、デジタル署名を手動で削除する方法について説明しています。



ツール



作業には、次のユーティリティが必要です。

1. 16進エディター。 WinHexが好きです

2. ModifyPE PEファイルのチェックサムを修正するユーティリティ。

3. 16進計算機がシステムにあります。





たとえば、 DiskCryptorディスクパーティションを暗号化するための素晴らしいオープンで無料のプログラムの配布キットからデジタル署名を削除します(オブジェクトはランダムに選択されました)。 ところで、この例では、デジタル署名を削除してもPEファイルのパフォーマンスに影響しないことがわかります。



Hexエディターでdcrypt_setup.exeを開き、4バイトシーケンス50450000hを探します(テキストでは、PEの後に2つのゼロバイトが続きます)。 このシグネチャは、ファイルをPE形式のファイルとして識別し、MS-DOSヘッダーの直後に続きます。 この場合、署名の先頭はオフセット100hにあります。







デジタル署名を削除した後に修正する必要がある次のものは、ファイルのチェックサムです。 PE形式のシグネチャの58hバイト後、つまり100h + 58h = 158hにあるため、このファイルの現在のチェックサム(dwordタイプ、つまり4バイトかかる)は9F36Ch(バイトが反転)です:







次の2つの値は、デジタル署名に直接関連しています。 ゼロで構成されている場合、署名はありません。 最初は、チェックサムの開始後40hバイト、または署名の開始後98hバイト-100h + 98h = 198hです。







この4バイトの値は、デジタル署名が始まるオフセットを示します。 これで8E438hと等しくなります。







2番目の値も4バイトの値で、最初の直後にあります。







これはデジタル署名のサイズを意味し、この場合は1500hまたは5376バイトです。 したがって、署名の終わりはオフセット8E438h + 1500h = 8F938hになります。 原則として、デジタル署名はファイルの最後に移動します:







すべてが一致するため、このブロックは安全に削除できます。その後、ファイルの終わりは8E437hになります。







それは最小のもののままです-デジタル署名のオフセットとサイズ署名をゼロで消去する:







ModifyPEユーティリティを使用してチェックサムを調整します。







私たちはチェックします:







できた! これで、プログラムインストールパッケージは、署名前とまったく同じで、バイトごとになります。



PS厳密に判断しないでください、これは初めてであり、将来的には品質が向上します。 建設的な批判は大歓迎です。



PPSトピックの著者は初心者habrayuzer systracerで 、彼は彼のテキストを公開するように頼みました。 長所は彼に向けられるべきです、私に短所を残します



All Articles