2010-08-02 17 views
20

यह एक .apk फ़ाइल पर हस्ताक्षर करने के बारे में कोई प्रश्न नहीं है। मैं जानना चाहता हूं कि वास्तव में क्या हस्ताक्षर करना है और यह कैसे कार्यान्वित किया जाता है।एक .apk फ़ाइलों को कैसे हस्ताक्षरित किया जाता है

.एपीके फ़ाइल के अंदर मेटा-आईएनएफ फ़ोल्डर है और अंदर दो फाइलें हैं।

पहले एक CERT.SF SHA1 विभिन्न घटकों के लिए हैश होता है और इस तरह दिखता है:

Name: res/layout/main.xml 
SHA1-Digest: Cox/T8fN1X9Hv4VqjH9YKqc/MsM= 

Name: AndroidManifest.xml 
SHA1-Digest: wZ418H9Aix1LNch3ci7c+cHyuZc= 

Name: resources.arsc 
SHA1-Digest: P+uoRrpFyVW6P3Wf+4vuR2ZSuXY= 

Name: classes.dex 
SHA1-Digest: cN3zXtGii9zuTOkBqDTLymeMZQI= 

वहाँ भी एक फ़ाइल CERT.RSA कहा जाता है। मुझे लगता है कि हस्ताक्षर को सत्यापित करने के लिए यह सार्वजनिक कुंजी है।

मेरा सवाल है, पूरे .apk फ़ाइल के लिए हस्ताक्षर कहां संग्रहीत किया जाता है? और वास्तव में क्या हस्ताक्षर किया जाता है? यह या तो

  • .apk एक भी बाइनरी वस्तु के रूप में इस्तेमाल किया जा सकता है फ़ाइल और इस
  • हस्ताक्षरित किया गया है या CERT.SF हस्ताक्षरित किया गया है जो विभिन्न घटकों

यह भी ज्यादा होगा के लिए व्यक्तिगत हैश शामिल बेहतर अगर आप मुझे विस्तृत हस्ताक्षर और सत्यापन प्रक्रिया के दस्तावेज़ीकरण के लिए इंगित कर सकते हैं।

उत्तर

4

इसका वास्तव में एंड्रॉइड के साथ कुछ लेना देना नहीं है। jarsigner का उपयोग कर एपीके फाइलों पर हस्ताक्षर किए गए हैं। Here is a link to the manpage

24

वास्तव में इस एक विशिष्ट एंड्रॉयड सवाल नहीं है, लेकिन जावा में सामान्य प्रश्न हालांकि मैं एक जवाब वैसे भी ...

सबसे पहले पोस्ट एक: केवल XXX.SF फ़ाइल पर हस्ताक्षर किए है; इसका मतलब है कि XXX.SF फ़ाइल में उल्लिखित सभी फाइलें "परोक्ष रूप से" पर हस्ताक्षर की गई हैं क्योंकि XXX.SF में उनके हैंश शामिल हैं। वास्तव में "मेटा-इंफ" में स्थित सभी फाइलें वहां हैंश नहीं होनी चाहिए! पूरा। एपीके संग्रह हस्ताक्षरित नहीं है।

XXX.SF फ़ाइल MANIFEST.MF फ़ाइल की प्रतिलिपि कम या कम है। एक पंक्ति "SHA1-Digest-Manifest" है जो "MANIFEST.MF" का SHA-1 हैश है; "SHA1-Digest" लाइनों में फ़ाइलों के हैंश नहीं होते हैं, लेकिन पेड़ के हैंश मैनिफेस्ट.एमएफ फ़ाइल में इसी तरह की लाइनें हैं:

SHA1 ("नाम: फ़ाइल नाम" + सीआर + एलएफ + "SHA1 -डिजिस्ट: "+ SHA1 (file_content) + सीआर + एलएफ + सीआर + एलएफ)

XXX.DSA/.RSA का फ़ाइल प्रारूप एस/एमआईएम ईमेल हस्ताक्षर (XXX की सामग्री के लिए) के समान है। एसएफ) हालांकि डेटा बेस 64 एन्कोडेड नहीं है और कोई हेडर/ट्रेलर लाइनों का उपयोग नहीं किया जाता है। "openssl smime -ign -outform डीईआर" इस ​​प्रारूप को बनाएगा।

ज़िप फ़ाइल पर हस्ताक्षर करने के लिए एकाधिक प्रमाणपत्र का उपयोग किया जा सकता है। इस मामले में (XXX.SF/.RSA, YYY.SF/.RSA, ...) के कई जोड़े मौजूद होंगे।

+0

मार्टिन, मैं .NET का उपयोग कर अंतिम चरण (आरएसए फ़ाइल उत्पन्न) को दोहराने की कोशिश कर रहा हूं। साइन इन करने के लिए इनपुट, क्या मुझे यह लेना चाहिए कि यह फ़ाइल प्रविष्टियों में है। एसएफ फ़ाइल (यानी 3 लाइनें)? क्या यह डेटा यूटीएफ 8 या यूनिकोड के रूप में एन्कोड किया जाना चाहिए? मैं एक ही आउटपुट (हालांकि) को उसी प्रमाण पत्र/डेटा के लिए jarsigner टूल के समान नहीं कर पा रहा हूं। कोई संकेत मदद करेगा! –

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

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