ग्रहण में हस्ताक्षरित एपीके में कौन सा आरएसए प्रमाण पत्र उपयोग किया जाता है?
डिबगिंग के दौरान ग्रहण के तहत (और दूसरी कुंजी की अनुपस्थिति में), आप डिफ़ॉल्ट एंड्रॉइड डीबग कुंजी के साथ साइन करेंगे।
ग्रहण अगर यह मौजूद नहीं है तो इसे बनाता है। औरएंड्रॉइड के कुंजी पासवर्ड के साथ 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
देखते हैं।
आपको यह जानने की आवश्यकता क्यों है? इसके अलावा यहां एक प्रश्न पूछने के बजाय आप एंड्रॉइड डेवलपर वेबसाइट क्यों नहीं खोज रहे हैं? – Squonk
हम एंड्रॉइड देशी और एक्शन स्क्रिप्ट में ऐप्स विकसित कर रहे हैं .. हमें Google से ओपन एसएसएल की त्रुटि मिल रही है। एक्शन स्क्रिप्ट में हमने आरएसए प्रमाणपत्र का एक विकल्प चुना है। तो हम जानना चाहते हैं कि एंड्रॉइड मूल में कौन सा प्रमाण पत्र उपयोग किया जाता है। धन्यवाद। :) –
आप प्रमाण पत्र जेनरेट करते हैं जिसमें एंड्रॉइड साइट पर निर्देशों के अनुसार स्वयं एक कीपर शामिल है। तो आपको जवाब जानना चाहिए। –