2012-12-03 20 views
11

Çeşitli kavanozları imzalamak için kullanılan genel anahtarların MD5 karmalarını içeren bir kitaplığım ve farklı APK'ları imzalamak için kullandığımız ilgili anahtar dosyalarına bir eşleme kitaplığım var. Yapmak istediğim, bir APK'yı imzalamak için hangi anahtar deposunun kullanıldığı, ancak deneme ve hata kullanmadan tanımlanmasıdır. (Ayrıca, ne yazık ki, anahtarlarımızın çoğu benzer veya özdeş DN'leri paylaşırlar.)İşlenmemiş bir APK veya ham X.509 Sertifikasını ayıklayın JAR

Çözümüm, META-INF/FOO.RSA (veya FOO.DSA) sertifikasını içerdiğini bildiğimden, sertifikanın APK'nın RSA dosyasını ve doğrudan MD5 karma değerini hesaplayın. (Sertifikanın var olduğunu biliyorum çünkü çalışan bir android uygulamasına erişilebildiğinden ve jarsigner belgelerinin bana orada olduğunu söyler.)

Ancak, sertifikanın gerçek baytlarını veren herhangi bir araç bulamıyorum. jarsigner -verbose -verify -certs my.apk kullandığımda DN ve sertifika meta verilerini alabilirim, ancak bu bana bayt vermiyor.

cevap

22

çıkışa sertifikayı 'openssl' kullanmak sonra JAR Özü çok

mkdir temp 
cd temp 
jar -xvf ../foo.jar 
cd META-INF 
openssl pkcs7 -in FOO.RSA -print_certs -inform DER -out foo.cer 
1

Hexdump FOO.RSA. Son n baytlar imzanın kendisidir, burada n anahtar uzunluğuna bağlıdır (ör., 1024 bit RSA). Aynı tuşla iki kez bir şey imzalarsanız, .RSA dosyalarını değiştirebilir ve yalnızca son n baytın değiştiğini görebilirsiniz; Dosyanın statik kısmı sertifikadır ve değişen bitler FOO.sf. Kaldırmanız gereken sertifika ve imza arasında bir sınırlayıcı olabilir. Yani 'foo.jar' varsayarak

, geçerli dizinde böyle bir şey yapmak:

+1

teşekkür! Çalıştığım bir senaryo var. Merak edenler için .RSA dosyası aşağıdaki gibi görünüyor: * 54 bayt bilinmeyen bilgiler * a 2 baytlık kısa (büyük-endian) gelecek sertifikanın uzunluğu * n bayt sertifika * bilinmiyor –

İlgili konular