デジタル署名付きのPEバイナリがあります。 (ファイル全体のハッシュではなく)元のPEハッシュを取得します。
ファイルから読み取る方法がわかりません。 Authenticode仕様では、PKCS#7署名ブロック(属性証明書テーブルなど)に、元のPEハッシュを含むContentInfoフィールドがあることを示唆しています。残念ながら、MicrosoftはContentInfo構造を定義していません。 PKCS#7仕様も同様です。
ファイルが改ざんされている場合、ハッシュの再計算は役に立ちません。
PKCS7(別名CMS)は確実にジェネリックContentInfo
を定義します。 rfc2630セクション et succ、またはrfc2315セクション7(リンクするアンカーなし)を参照してください。
ContentInfo ::= SEQUENCE {
contentType ContentType,
content [0] EXPLICIT ANY DEFINED BY contentType }
ContentType ::= OBJECT IDENTIFIER
しかし、これは意図的に非常に柔軟であり、データの処理に役に立たないほどです。OIDがそのタイプのデータを識別するためにある限り、任意のタイプのデータを含めることができます。
ソースが明確ではありませんが、「Authenticode署名形式」の最初のGoogleヒットはダウンロードです。Microsoft.com/ download/9/c/5/9c5b2167-8017 .../Authenticode_PE.docxとは、 Authenticodeに使用されるcontentInfo
のSignedData
に関する7:
•contentTypeはSPC_INDIRECT_DATA_OBJID(1.3.6.1.4.1.311.2.1.4)に設定する必要があります。
•コンテンツは、後で説明するSpcIndirectDataContent構造体に設定する必要があります。
そして、9ページから11ページ(実際には後で)には、で始まる詳細な定義が含まれています
SpcIndirectDataContent ::= SEQUENCE {
data SpcAttributeTypeAndOptionalValue,
messageDigest DigestInfo
} --#public—
SpcAttributeTypeAndOptionalValue ::= SEQUENCE {
type ObjectID,
value [0] EXPLICIT ANY OPTIONAL
}
ここで、DigestInfo
には、15ページから始まる詳細なプロセスを使用して計算されたファイルの正規ハッシュのAlgIdとダイジェスト値が含まれています。