3

多数の EXE ファイルがあり、どのファイルにデジタル署名があるかを調べる必要があります。WinVerifyTrust にアクセスせずにチェックする方法があるかどうかは誰にもわかりません (それらはすべて Unix サーバー上にあります)。

デジタル署名が実際に EXE 内のどこにあるかについての情報が見つからないようです。それがどこにあるかがわかれば、ファイルを開いてテストする場所に fseek できるかもしれません。証明書に対して「実際の」検証を行う必要はありません。WinVerifyTrust を使用せずに、デジタル署名が存在する (または、さらに重要なことに、存在しない) かどうかを確認したいだけです。

4

3 に答える 3

1

前述のように、IMAGE_DIRECTORY_ENTRY_SECURITY ディレクトリのみが存在することは、PE ファイル内の署名の存在を検出するための明確な指標です。テストするファイルが大量にあり、これらをフィルタリングしたい場合は、この標準ディレクトリの存在をテストするだけで有効です。これを行うためにライブラリは必要ありません。

于 2012-12-19T09:44:49.633 に答える
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 より大きい場合は、署名エントリがあります (有効かどうかに関係なく)。

于 2011-08-07T19:01:18.543 に答える