4

OpenSSLを使用して(または実際にはPythonを使用して、PEファイルの証明書/署名を検証しようとしていますが、証明書の処理に関してはPythonが悪いようです)。

ここで説明されているように、PE ファイルから DER PKCS7 証明書を抽出しました

そして、ここで説明されているように、チェックサムと署名データのない修正版の PE ファイルを作成しました: http://www.mail-archive.com/cryptography@c2.net/msg04202.html

変更されたファイルの sha1sum は、証明書の sha1sum と同じです。

署名されていない、変更された PE ファイルを openssl で検証しようとしましたopenssl smime -verify -in signature.der -content modified_executable.exe -inform DER -binary

検証失敗 140415508248232:エラー:21075075:PKCS7 ルーチン:PKCS7_verify:証明書検証エラー:pk7_smime.c:342:検証エラー:サポートされていない証明書の目的

-noverifyコマンドに追加すると、取得するだけです

検証失敗 140595583981224:エラー:21071065:PKCS7 ルーチン:PKCS7_signatureVerify:ダイジェスト失敗:pk7_doit.c:1097: 140595583981224:エラー:21075069:PKCS7 ルーチン:PKCS7_verify:署名失敗:PK7_smime.cpk7_smime.c:410:

私は何が欠けていますか?

4

4 に答える 4

0

変更されたファイルのハッシュは、抽出された証明書のハッシュと同じです

私の悪い。私はその部分を逃した。

あなたが失敗しているのはここですpk7_smime.c。その行i = X509_verify_cert

i = X509_verify_cert(&cert_ctx);
if (i <= 0) j = X509_STORE_CTX_get_error(&cert_ctx);
X509_STORE_CTX_cleanup(&cert_ctx);
if (i <= 0) {
    PKCS7err(PKCS7_F_PKCS7_VERIFY,PKCS7_R_CERTIFICATE_VERIFY_ERROR);
    ERR_add_error_data(2, "Verify error:",
        X509_verify_cert_error_string(j));
    sk_X509_free(signers);
    return 0;
}

X509_verify_cert約 150 行に<openssl dir>/crypto/x509/x509_vfy.cあります。これはかなり大きな関数 (約 250 行) であるため、おそらくそれについて説明する必要があります。

-signer関数を実行する前に、関数にオプションを追加してみてくださいopenssl smime。それは簡単な修正かもしれません。simime(3)の OpenSSL ドキュメントを参照してください。

目の前になく、「Microsoft Code Signing CA」を検索するとノイズが多すぎるため、署名証明書をどこで取得すればよいかわかりません。エンド エンティティ証明書をダンプし、発行者を見つけてから、発行者の名前を検索します。

于 2014-03-13T11:32:31.177 に答える
0

そして、ここで説明されているように、チェックサムと署名データのない修正版の PE ファイルを作成しました: http://www.mail-archive.com/cryptography@c2.net/msg04202.html

Microsoft が公開している形式を使用しないのはなぜですか? リバース エンジニアリングに頼る必要はありません。


私は何が欠けていますか?

PE/PE+ 実行可能ファイルには、ファイル全体ではなく、ファイルの一部が署名されています。データをダイジェストするときは、 からチェックサムを省略し、OptionalHeaderから証明書テーブルData Directoryを省略し、Attribute Certificate Tableセクションを省略する必要があります。

よく知っておきたい 2 つのリファレンスを次に示します。

省略すべきセクションは、Windows Authenticode Portable Executable Signature Format、ページ 6 に示されています。以下に再掲します。

ここに画像の説明を入力


PE ファイル形式をプログラムで調べる方法については、MSDN マガジンの Matt Pietrekによる「Win32 ポータブル実行可能ファイル形式の詳細な考察」を参照してください。

于 2014-03-13T07:14:43.493 に答える