2

私は多数のEXEファイルを持っており、どれがデジタル署名を持っているか把握する必要があります。 WinVerifyTrustへのアクセスなしでチェックする方法があるかどうかは誰にも知られています(彼らはすべてUnixサーバー上にあります)。WinVerifyTrustを使用せずにデジタル署名を検出する

実際にEXE内でデジタル署名が実際にどこにあるのかわかりません。私はそれがどこにあるかを知ることができれば、私はファイルを開いて、テストする場所に行くことができるかもしれません。私は証明書の "真の"検証をする必要はありません.WinVerifyTrustを使わずに、デジタル署名が存在するかどうか(または、もっと重要なことに、存在しないかどうか)を確認したいだけです。

+0

私はこれをテストしませんでしたが、monoと 'chktrust'ユーティリティを使って行うことができるかもしれません。 – datasage

+0

ありがとう、私はそれについて考えましたが、証明書を完全に検証するのではなく、ファイルを直接調べる方法があります。これは、一度に何千ものファイルのスケジュールで実行する必要があり、chktrust(またはWinVerifyTrustを使用することも)が遅すぎるのではないかと心配しています。デジタル署名がEXEの中でどこにあるべきかを知ることができれば、それは最速であるように思えます。ありがとう! –

答えて

0

あなたはMono.Security.dll AuthenticodeBaseからのコードを使用してこの情報を見つけることができます[1]

[1] https://github.com/mono/mono/blob/master/mcs/class/Mono.Security/Mono.Security.Authenticode/AuthenticodeBase.cs

あなたの最高のヒントは、(Authenticode署名が存在する場合)である:

// 2.2. Locate IMAGE_DIRECTORY_ENTRY_SECURITY (offset and size) 
dirSecurityOffset = BitConverterLE.ToInt32 (fileblock, peOffset + 152); 
dirSecuritySize = BitConverterLE.ToInt32 (fileblock, peOffset + 156); 

dirSecuritySizeが8より大きい場合は、署名エントリ(有効かどうか)があります。

1

上記のように、IMAGE_DIRECTORY_ENTRY_SECURITYディレクトリが存在することは、PEファイル内のシグネチャの存在を検出する明確な指標です。大量のファイルをテストしてフィルタリングする場合は、この標準ディレクトリの存在をテストするだけです。これを行うためのライブラリは必要ありません。

+0

これは、PeStudio(http://www.winitor.com)がPEイメージを処理するときにこのインジケータを検出する方法です。 – mox

関連する問題