web-dev-qa-db-ja.com

Parse VBAマクロデジタルシグネチャー

署名付きマクロをzipファイルとして含むマクロ対応のオフィスファイル(すなわち、.docm、.xlsm、.pptm)を開くと、マクロのデジタル署名が含まれていると想定している次の3つのファイルが表示されます。

  1. vbaprojectsignature.bin.
  2. vbaprojectsignatureAgile.bin.
  3. vbaprojectsignaturev3.bin.

各ファイルにはバイナリデータが含まれていますが、署名証明書の要素は人間が読める形式で表示されます。私はそれをCMS(またはPKCS#7)ファイルとして扱うことによって各ファイルを解析しようとしましたが、それは機能しませんでした。おそらくそれはCMSSignedData構造ですが、いくつかの追加のヘッダーやフッターのデータを削除する必要があるフッターデータですか?

私が知りたいことは、生の署名値を解析する方法です。私もCMSSignedDataのような形式でそれを得ることができれば、そこから署名を簡単に解析することができますので。

1
Hmmmmm

すべてが ms-oshared に文書化されています。ファイルはDigSiginFoSeRialized構造体(リンク内の2.3.2.1)です。そのため、最初に署名バッファのサイズであるUINT32を読みます。その後、署名バッファへのオフセットを表すUINT32を読み取ります(常に44 また 0x2C)。

そのため、オフセットにジャンプし、サイズをバイト配列(または同等)に読み込みます。

あなたが.NETプログラマーの場合は、System.Security.SignedCMSオブジェクトを作成し、オブジェクトのデコードメソッドを呼び出します。

BOUNCYCASTLEを使用している場合は、バッファを使用してCMSSignedDataを作成できるはずです。

3
AlexanderP