12

さまざまなjarに署名するために使用される公開鍵のMD5ハッシュのライブラリと、さまざまなAPKに署名するために使用するそれぞれのキーストアへのマッピングがあります。私がやりたいのは、試行錯誤をせずに、APKの署名に使用されたキーストアを特定することです。(また、悲しいことに、私たちのキーの多くは類似または同一のDNを共有しています。)

私の解決策は、META-INF / FOO.RSA(またはFOO.DSA)に証明書が含まれていることを知っているため、APKのRSAファイルから証明書を抽出し、MD5ハッシュを直接計算することでした。(実行中のAndroidアプリケーションからアクセスできるため、証明書が存在することはわかっています。jarsignerのドキュメントには、証明書が存在することが示されています。)

しかし、証明書の実際のバイトを提供するツールが見つかりません。を使用するとDNと証明書のメタデータを取得できますがjarsigner -verbose -verify -certs my.apk、バイトが取得されません。

4

2 に答える 2

28

JARを抽出し、「openssl」を使用して証明書を出力します。

したがって、「foo.jar」が現在のディレクトリにあると仮定して、次のようにします。

mkdir temp
cd temp
jar -xvf ../foo.jar
cd META-INF
openssl pkcs7 -in FOO.RSA -print_certs -inform DER -out foo.cer
于 2013-03-22T17:50:33.433 に答える
1

HexdumpFOO.RSA。最後のnバイトは署名自体です。ここで、nはキーの長さに依存します(たとえば、1024ビットRSA)。同じキーで何かに2回署名すると、.RSAファイルを比較して、最後のnバイトだけが変更されることを確認できます。ファイルの静的部分は証明書であり、変更されるビットはFOO.sfのハッシュの署名です。証明書と署名の間に区切り文字があり、これも削除する必要があります。

于 2013-02-19T02:18:02.397 に答える