2012-07-04 27 views
175

मेरे पास एक ऐप है जो हस्ताक्षरित है और कई कीस्टोर फाइलें हैं। मैं ऐप को अपडेट करना चाहता हूं, इसलिए मुझे यह पता लगाना होगा कि कौन सी चाबियाँ इस्तेमाल की गई थीं।मैं कैसे पता लगा सकता हूं कि ऐप पर हस्ताक्षर करने के लिए किस कीस्टोर का उपयोग किया गया था?

मैं अपने मशीन पर मौजूद विभिन्न कीस्टोरों के खिलाफ मूल रूप से मेरे ऐप पर हस्ताक्षर करने के लिए किस कुंजीस्टोर का उपयोग कर सकता था?

+0

मुझे नहीं पता कि आप इसे ढूंढ सकते हैं या नहीं, लेकिन यदि आप गलत कुंजी के साथ ऐप पर हस्ताक्षर करते हैं, तो डेवलपर कंसोल (जहां आप ऐप्स प्रकाशित करते हैं) आपको बताएंगे कि यह गलत है। आप उन सभी को आजमा सकते हैं। – logcat

+0

एक सार्वजनिक कुंजी 'डेवलपर कंसोल'> 'प्रोफ़ाइल संपादित करें' है। क्या मैं इसे किसी भी तरह से मदद करने के लिए उपयोग कर सकता हूं? – xliiv

+0

अगर यह गलती से हटा दिया गया है तो कीस्टोर फ़ाइल को फिर से कैसे बनाया जाए? – Gattsu

उत्तर

295

सबसे पहले, एपीके को अनजिप करें और फ़ाइल /META-INF/ANDROID_.RSA निकालें (यह फ़ाइल भी CERT.RSA हो सकती है, लेकिन केवल एक ही आरएसए फ़ाइल होनी चाहिए)।

keytool -printcert -file ANDROID_.RSA 

आप इस तरह के प्रमाण पत्र उंगलियों के निशान मिल जाएगा:

:

 MD5: B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB 
    SHA1: 16:59:E7:E3:0C:AA:7A:0D:F2:0D:05:20:12:A8:85:0B:32:C5:4F:68 
    Signature algorithm name: SHA1withRSA 

फिर अपने हस्ताक्षर करने के कुंजीस्टोर की सभी उपनामों बाहर मुद्रित करने के लिए फिर से Keytool का उपयोग

फिर इस आदेश जारी

keytool -list -keystore my-signing-key.keystore 

आपको उपनामों और उनके प्रमाणपत्र फिंगरप्रिंट की एक सूची मिलेगी:

android_key, Jan 23, 2010, PrivateKeyEntry, 
Certificate fingerprint (MD5): B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB 

वोला! अब हम निर्धारित कर सकते हैं कि इस कुंजीस्टोर के साथ एपीके पर हस्ताक्षर किए गए हैं, और उपनाम 'android_key' के साथ।

कीटोल जावा का हिस्सा है, इसलिए सुनिश्चित करें कि आपके पैथ में जावा इंस्टॉलेशन डीआईआर है। हस्ताक्षर करने के प्रमाण पत्र देखने पर

+1

इसके लिए धन्यवाद। मैंने अपने जीथब प्रोजेक्ट में ऐसा करने के लिए एक टूल जोड़ा। https://github.com/RichardBronosky/ota-tools/blob/master/apk_fingerprint –

+0

हाय मैं इस कमांड को समझ नहीं पा रहा हूं ~ keytool -list -keystore my-sign-key.keystore , मेरी-साइन-कुंजी क्या है। कीस्टोर – Thoman

+2

@ थॉमन माई-साइनिंग-की.किस्टोर कुंजीस्टोर फ़ाइल का नाम है जिसमें एपीके –

11

बहुत ही आसान तरीका:

jarsigner.exe -verbose -verify -certs myapk.apk 

यह केवल डीएन दिखाई देगा, इसलिए यदि आप एक ही डी एन के साथ दो प्रमाणपत्र है, तो आप फिंगरप्रिंट से तुलना करने के लिए हो सकता है।

+0

डीएन क्या है? ज्यादातर मैं इस तरह कई लाइनों है: 509, सीएन = {firstname और lastname} [प्रमाण पत्र के लिए {से तारीख} से मान्य है {date_to}] – xliiv

+0

डीएन के लिए 'विशिष्ट नाम' खड़ा है, आपके मामले में यह है 'सीएन = {पहला नाम और अंतिम नाम}' भाग। –

203

आप किसी भी फाइल को निकाले बिना किसी कीस्टोर या एपीके के हस्ताक्षर की जांच के लिए जावा 7 की कुंजी और प्रमाणपत्र प्रबंधन उपकरण keytool का उपयोग कर सकते हैं। एक APK

keytool -list -printcert -jarfile app.apk 

उत्पादन का

हस्ताक्षर हस्ताक्षर मालिक/जारीकर्ता का पता चलता है और MD5, APK के SHA1 और SHA256 उंगलियों के निशान फ़ाइल app.apk

(ध्यान दें कि -jarfile तर्क जावा 7 में पेश किया गया था। अधिक जानकारी के लिए see the documentation)

एक कीस्ट्रोक के हस्ताक्षर

keytool -list -v -keystore release.jks 

उत्पादन कुंजीस्टोर फ़ाइल में प्रचलित नाम (प्रविष्टियों) का पता चलता है प्रमाण पत्र फिंगरप्रिंट (MD5, SHA1 और SHA256) के साथ release.jks

यदि एपीके और कीस्टोर मैच के बीच SHA1 फिंगरप्रिंट, तो आप आश्वस्त रह सकते हैं कि उस ऐप को कुंजी के साथ साइन किया गया है।

+1

त्रुटि मिली: 'अवैध विकल्प: -jarfile' – goRGon

+0

@goRGon क्या आप जावा 7 या बाद में उपयोग कर रहे हैं? –

+0

नहीं जावा 7 ने बहुत सी समस्याएं लाई हैं =) तो यह केवल जावा 7 पर काम करता है? क्या आप इसे अपने उत्तर के अंदर उल्लेख कर सकते हैं? – goRGon

13

पॉल Lammertsma के जवाब पर निर्माण करने के लिए, इस आदेश का नाम और वर्तमान dir में सभी APK के हस्ताक्षर प्रिंट होगा (मैं श उपयोग कर रहा हूँ क्योंकि बाद में मैं पाइप के उत्पादन grep करने की जरूरत है):

find . -name "*.apk" -exec echo "APK: {}" \; -exec sh -c 'keytool -printcert -jarfile "{}"' \;

नमूना उत्पादन:

APK: ./com.google.android.youtube-10.39.54-107954130-minAPI15.apk 
Signer #1: 

Signature: 

Owner: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US 
Issuer: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US 
Serial number: 4934987e 
Valid from: Mon Dec 01 18:07:58 PST 2008 until: Fri Apr 18 19:07:58 PDT 2036 
Certificate fingerprints: 
     MD5: D0:46:FC:5D:1F:C3:CD:0E:57:C5:44:40:97:CD:54:49 
     SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00 
     SHA256: 3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A 
     Signature algorithm name: MD5withRSA 
     Version: 1 

APK: ./com.google.android.youtube_10.40.56-108056134_minAPI15_maxAPI22(armeabi-v7a)(480dpi).apk 
Signer #1: 

Signature: 

Owner: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US 
Issuer: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US 
Serial number: 4934987e 
Valid from: Mon Dec 01 18:07:58 PST 2008 until: Fri Apr 18 19:07:58 PDT 2036 
Certificate fingerprints: 
     MD5: D0:46:FC:5D:1F:C3:CD:0E:57:C5:44:40:97:CD:54:49 
     SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00 
     SHA256: 3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A 
     Signature algorithm name: MD5withRSA 
     Version: 1 

या फिर आप SHA1 के बारे में परवाह है, तो:

find . -name "*.apk" -exec echo "APK: {}" \; -exec sh -c 'keytool -printcert -jarfile "{}" | grep SHA1' \;

नमूना उत्पादन:

APK: ./com.google.android.youtube-10.39.54-107954130-minAPI15.apk 
     SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00 
APK: ./com.google.android.youtube_10.40.56-108056134_minAPI15_maxAPI22(armeabi-v7a)(480dpi).apk 
     SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00 
+0

दिलचस्प! मैंने उपयोगकर्ता को सूचित करने के लिए हमारे निजी रूप से होस्ट किए गए वितरण स्टोर पर सत्यापन में एक बहुत ही समान दृष्टिकोण का उपयोग किया है कि ऐप को सही तरीके से हस्ताक्षरित नहीं किया गया था। मैं यह भी देखने के लिए विशेष नोट लेता हूं कि क्या मुख्य उपनाम एक अलग शब्द वाले संदेश को प्रदर्शित करने के लिए "एंड्रॉइडबगकी" है। मुझे लगता है कि Google Play एक ही तरीके से सत्यापन करता है। मुझे लगता है कि आप एपीके मिरर पर एपीके को मान्य करने के लिए इसका उपयोग कर रहे हैं? –

+0

@PaulLammertsma हां, हम हैं। –

3

प्रमाण पत्र और ऐसे KeyStore Explorer के रूप में प्रमुख दुकानों की जांच के लिए कई freewares रहे हैं।

एपीके को अनजिप करें और मेटा-आईएनएफ /? आरएसए फ़ाइल खोलें। ? सीईआरटी या एंड्रॉइड होगा या कुछ और हो सकता है। यह आपके एपीके से जुड़े सभी जानकारी प्रदर्शित करेगा।

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

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