2014-06-14 20 views
7

से हस्ताक्षर प्रमाणपत्र निर्धारित करें मैंने एंड्रॉइड के लिए एक्लिप्स से एक हस्ताक्षरित एपीके बनाया है। मैं जानना चाहता हूं कि आरएसए-1024 या आरएसए 2048 जैसे हस्ताक्षरित एपीके में कौन सी आरएसए प्रमाणपत्र प्रकार का उपयोग किया जाता है।एपीके

मुझे एपीके फ़ाइल से कैसे पता चलेगा?

संपादित करें शीर्षक "किस आरएसए प्रमाणपत्र का उपयोग ग्रहण में हस्ताक्षरित एपीके में किया जाता है? आरएसए कुंजी आकार (1024/2048) कैसे जानें?"

+0

आपको यह जानने की आवश्यकता क्यों है? इसके अलावा यहां एक प्रश्न पूछने के बजाय आप एंड्रॉइड डेवलपर वेबसाइट क्यों नहीं खोज रहे हैं? – Squonk

+0

हम एंड्रॉइड देशी और एक्शन स्क्रिप्ट में ऐप्स विकसित कर रहे हैं .. हमें Google से ओपन एसएसएल की त्रुटि मिल रही है। एक्शन स्क्रिप्ट में हमने आरएसए प्रमाणपत्र का एक विकल्प चुना है। तो हम जानना चाहते हैं कि एंड्रॉइड मूल में कौन सा प्रमाण पत्र उपयोग किया जाता है। धन्यवाद। :) –

+0

आप प्रमाण पत्र जेनरेट करते हैं जिसमें एंड्रॉइड साइट पर निर्देशों के अनुसार स्वयं एक कीपर शामिल है। तो आपको जवाब जानना चाहिए। –

उत्तर

7

ग्रहण में हस्ताक्षरित एपीके में कौन सा आरएसए प्रमाण पत्र उपयोग किया जाता है?

डिबगिंग के दौरान ग्रहण के तहत (और दूसरी कुंजी की अनुपस्थिति में), आप डिफ़ॉल्ट एंड्रॉइड डीबग कुंजी के साथ साइन करेंगे।

ग्रहण अगर यह मौजूद नहीं है तो इसे बनाता है। औरएंड्रॉइड के कुंजी पासवर्ड के साथ debug.keystore में कुंजी जोड़ा गया है। एंड्रॉइड के Signing Your Application पर डीबग मोड में साइन इन करें।


आप keytool या jarsigner सहित कुछ उपकरण, के साथ प्रवेश कर सकते हैं। लेकिन मेरा मानना ​​है कि आपको एपीके में प्रमाण पत्र की जांच करने के लिए किसी अन्य टूल का उपयोग करने की आवश्यकता है।

आप अपने पीकेसीएस # 7 के बाद प्रासंगिक बिट्स को डंप करने के लिए ओपनएसएसएल का उपयोग कर सकते हैं, लेकिन आपको एपीके से प्रासंगिक फ़ाइलों को मैन्युअल रूप से निकालने की आवश्यकता है।


पर हस्ताक्षर करने के लिए, मैं jarsigner का उपयोग करते हैं कमांड लाइन से काम कर रहे। उदाहरण के लिए, विंडोज़ पर डीबग कुंजी के साथ:

jarsigner -verbose -keystore C:\Users\<user>\.android\debug.keystore \ 
    -storepass android -keypass android -digestalg SHA1 \ 
    -sigalg SHA1withRSA <package name>.apk androiddebugkey 

ग्रहण आईडीई के तहत आपके लिए समान प्रदर्शन करता है।


आप जानकारी डंप करने के लिए नहीं उपयोग jarsigner कर सकते हैं। उदाहरण के लिए, निम्नलिखित विशिष्ट नाम प्रिंट होगा, लेकिन यह नहीं होगा प्रिंट subjectPublicKeyInfo ब्लॉक:

$ jarsigner -verbose -certs -verify Test.apk 

इसी तरह, आप नहीं उपयोग keytool क्योंकि यह subjectPublicKeyInfo ब्लॉक या तो प्रिंट नहीं करता सकते हैं :

$ keytool -printcert -file META-INF/CERT.RSA 

APK में प्रमाण पत्र n निर्धारित करने के लिए, आप कुछ फाइलों को देखने के लिए eed। ब्याज की फाइलें एपीके की META_INF निर्देशिका में हैं। प्रत्येक हस्ताक्षरकर्ता के लिए .RSA फ़ाइल (या .DSA फ़ाइल) के साथ हस्ताक्षर .SF फ़ाइल में हैं। हस्ताक्षरकर्ता .RSA फ़ाइल (या .DSA फ़ाइल) केवल PKCS # 7 प्रारूप हैं।

मैं कहता हूं "हस्ताक्षर हैं ..." क्योंकि एपीके के व्यक्तिगत तत्व हस्ताक्षरित हैं, न कि पूरे एपीके।तो classes.dex, AndroidManifest.xml पर हस्ताक्षर किए हो जाता है, res/ में प्रत्येक आइकन पर हस्ताक्षर किए हो जाता है, पर हस्ताक्षर किए हो जाता है आदि

नोट: jarsigner से अधिक हस्ताक्षरों का समर्थन करता है, जबकि, एंड्रॉयड केवल एक हस्ताक्षरकर्ता का समर्थन करता है (अगर मैं सही ढंग से याद करते हैं)।


यहाँ एक उदाहरण है के साथ APK OpenSSL का उपयोग कर CrackMe.apk कहा जाता है।

$ mkdir APK-test 
$ mv CrackMe.apk APK-test 
$ cd APK-test 

अगला एपीके अनपैक करें। META-INF/ में अतिरिक्त मेटाडाटा के साथ यह सिर्फ एक ज़िप फ़ाइल है।

$ unzip -a CrackMe.apk 
$ ls 
AndroidManifest.xml META-INF    res 
CrackMe.apk   classes.dex   resources.arsc 

अगला, META-INF निर्देशिका में एक नज़र डालें।

$ cd META-INF/ 
$ ls 
CERT.RSA CERT.SF MANIFEST.MF 

हस्ताक्षर CERT.SF में हैं, और हस्ताक्षरकर्ता CERT.RSA में है।

अंत में, CERT.RSA को पार्स करने के लिए ओपनएसएसएल का उपयोग करें।

$ openssl pkcs7 -in CERT.RSA -inform DER -print_certs | openssl x509 -text -noout 
Certificate: 
    Data: 
     Version: 3 (0x2) 
     Serial Number: 1346030704 (0x503acc70) 
    Signature Algorithm: sha1WithRSAEncryption 
     Issuer: C=US, ST=NY, L=New York, O=Unknown, OU=Unknown, CN=Example, LLC 
     Validity 
      Not Before: Aug 27 01:25:04 2012 GMT 
      Not After : Dec 5 01:25:04 2035 GMT 
     Subject: C=US, ST=NY, L=New York, O=Unknown, OU=Unknown, CN=Example, LLC 
     Subject Public Key Info: 
      Public Key Algorithm: rsaEncryption 
       Public-Key: (3072 bit) 
       Modulus: 
        00:8d:a8:9a:34:84:d5:72:4f:e8:e7:69:78:e4:17: 
        13:93:e8:c5:23:a0:93:a7:f8:6c:58:3d:f0:ed:30: 
        ... 
        c1:2d:5e:9f:a4:79:56:19:7d:26:4d:27:6a:3e:26: 
        c0:fd:6a:ed:24:e9:62:80:73:8d 
       Exponent: 65537 (0x10001) 
    Signature Algorithm: sha1WithRSAEncryption 
     80:c0:ac:a5:65:13:f3:2d:dd:d5:71:82:7c:2e:72:63:72:cf: 
     76:49:4b:09:3c:12:e7:d6:9b:3d:53:8b:d4:e0:9c:ff:f2:d6: 
     ... 
     80:4d:9b:15:3f:82:1a:72:b2:4b:fd:05:2b:e7:36:f0:43:98: 
     80:b7:8f:6c:fd:64 

तुम भी -pubkey सार्वजनिक कुंजी PEM प्रारूप को निकालने के लिए जब x509 उपयोग का उपयोग कर सकते हैं:

$ openssl pkcs7 -in CERT.RSA -inform DER -print_certs | openssl x509 -noout -pubkey 
-----BEGIN PUBLIC KEY----- 
MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAjaiaNITVck/o52l45BcT 
k+jFI6CTp/hsWD3w7TAoGMA4RyH1pNcLD3ZZLXqdCPGKzKf107YhmiSp9K3DALG+ 
AHorHroKsnmGJFXglIEOLAq7gBVrfxOiBAxr0HW4MLXXGMvr2Asq4AkJAbFFmApU 
5I3bGv3DCApHBbH6B10V5gTT0VzbkxHAejqNJVIHBmi6ueKLKh5ytJeRZufgD3ZX 
+uEszGfJrD48woXkqSlCOyxHSi4PWyHLm95OXYkvlBSudNt5q9yDuy+KkJgrSHLC 
jwxISkM2JzEoWYhqNqRgosBv6pg16+97YPeE6tHoG6dHazjCClhr5oZxw/7t6969 
8rZ8m/fcLf3cOtcApqOFhCViq0ddADrOxMD2Qsp/xHx1kUg7eprE6dOEvQKr4oT5 
oBiJkOStnAQFWRw/GDFTqpvDsYSOKn64/1cJ/+NEeLw4y+HCTMcNAsPknBQlXxNc 
hzX0zSqrJ+vBLV6fpHlWGX0mTSdqPibA/WrtJOligHONAgMBAAE= 
-----END PUBLIC KEY----- 

तो एंड्रॉयड APK सत्यापन कोड में रुचि, PackageParser.java से collectCertificates देखते हैं।

संबंधित मुद्दे