जब अनुप्रयोग कोड-हस्ताक्षरित होते हैं, तो .app बंडल के कौन से भाग हस्ताक्षर को कवर करते हैं?


13

माउंटेन लायन में, मुझे पता है कि मैक ऐप स्टोर पर सभी एप्लिकेशन सहित कुछ एप्लिकेशन डिजिटल रूप से डेवलपर द्वारा हस्ताक्षरित हैं, ताकि यदि उन्हें संशोधित किया जाता है, तो हस्ताक्षर मेल नहीं खाएगा, और यह सभी प्रकार की त्रुटियों (और स्थिति) को बढ़ाएगा। ऑपरेटिंग सिस्टम की अगली रिलीज के साथ आगे बढ़ेगा ...)।

मेरा प्रश्न है कि .app बंडल के कौन से भाग हस्ताक्षर कवर करते हैं? अगर कुछ भी में Appname.app/Contents परिवर्तन (मेटाडेटा सहित, के लिए संशोधित तिथि की तरह Contents फ़ोल्डर), क्या वह हस्ताक्षर को तोड़ता है? क्या यह सिर्फ बाइनरी में है Contents/MacOS? क्या .plists हस्ताक्षर में शामिल हैं? Resources? अंत उपयोगकर्ता के रूप में, मैं हस्ताक्षर को तोड़ने के बिना (यदि कुछ भी) हैक कर सकता हूं तो क्या होगा?


लगता है जैसे आपको परीक्षण शुरू करने की आवश्यकता है, और हमें बताएं!
Adam Davis

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

1
वह पहिया पूरी तरह से हालांकि कुछ सुधार का उपयोग करें। मुझे लगता है कि क्रोम स्पिनर एक चीज के लिए बहुत जरूरी हैं।
Adam Davis

जवाबों:


13

TL; DR यह डेवलपर के लिए है कि ऐप के कौन से टुकड़ों पर हस्ताक्षर किए जाएं और उन टुकड़ों के साथ छेड़छाड़ की जाए या नहीं, जब ऐप लॉन्च किया जाता है। ऐप-दर-ऐप आधार पर इसका पता लगाने के लिए आपको परीक्षण और त्रुटि का उपयोग करना होगा।

यह मोटे तौर पर डेवलपर को तय करना है कि उनके आवेदन बंडल में कौन से घटक सील में दर्शाए गए हैं जो उनके आवेदन देने से पहले हस्ताक्षरित हो जाते हैं। सील में कुछ भी प्रभावी रूप से छेड़छाड़-प्रूफ है क्योंकि इन चीजों को अपने हैश हस्ताक्षर को बदलने के बिना संशोधित करना ज्यादातर असंभव है। लेकिन इसका मतलब यह नहीं है कि आप उनके साथ छेड़छाड़ नहीं कर सकते।

Apple डेवलपर गाइड इस बारे में कहना चाहिए कि आपको क्या हस्ताक्षर करना चाहिए:

आपको अपने उत्पाद में प्रत्येक निष्पादन योग्य पर हस्ताक्षर करना चाहिए, जिसमें शामिल हैं   अनुप्रयोगों, उपकरण, छिपा सहायक उपकरण, उपयोगिताओं और आगे।   एक एप्लिकेशन बंडल पर हस्ताक्षर करना उसके संसाधनों को कवर करता है, लेकिन इसके नहीं   उपकरण और उप-बंडलों जैसे सब-कंप्यूटर्स। इनमें से प्रत्येक होना चाहिए   स्वतंत्र रूप से हस्ताक्षर किए।

यदि आपके एप्लिकेशन में एक या अधिक छोटे के साथ बड़ा UI हिस्सा है   सहायक उपकरण जो उपयोगकर्ता को एक एकल चेहरा पेश करने की कोशिश करते हैं, आप कर सकते हैं   उन सभी को देकर कोड हस्ताक्षर करने के लिए उन्हें अप्रभेद्य बनाएं   समान कोड हस्ताक्षरकर्ता पहचानकर्ता। (आप यह सुनिश्चित करके कर सकते हैं   वे सभी में एक ही CFBundleIdentifier मान है   Info.plist, या codeign कमांड में -i विकल्प का उपयोग करके, को   समान पहचानकर्ता असाइन करें।) उस स्थिति में, आपके सभी प्रोग्राम घटक   उसी किचेन आइटम तक पहुंचें और उसी के रूप में मान्य करें   कार्यक्रम। यह केवल तभी करें जब शामिल कार्यक्रम वास्तव में बनने के लिए हों   कोई एकल इकाई, जिसमें कोई अंतर नहीं है।

एक सार्वभौमिक बाइनरी (बंडल या टूल) में स्वचालित रूप से व्यक्ति होता है   हस्ताक्षर प्रत्येक वास्तुकला घटक पर लागू होते हैं। य़े हैं   स्वतंत्र, और आमतौर पर अंत में केवल मूल वास्तुकला   उपयोगकर्ता की प्रणाली सत्यापित है।

इंस्टॉलर पैकेज (.pkg और .mpkg बंडल) के मामले में, सब कुछ   अनुमानित रूप से हस्ताक्षरित है: CPIO संग्रह जिसमें पेलोड है,   CPIO संग्रह जिसमें स्क्रिप्ट स्थापित हो, और सामग्री का बिल हो   (बीओएम) प्रत्येक के पास एक्सएआर हैडर में एक हैश दर्ज होता है, और उस हेडर में   बारी हस्ताक्षरित है। इसलिए, यदि आप एक स्थापित स्क्रिप्ट को संशोधित करते हैं (के लिए)   उदाहरण) पैकेज पर हस्ताक्षर किए जाने के बाद, हस्ताक्षर होगा   अवैध।

आप अपने प्लग-इन और पुस्तकालयों पर हस्ताक्षर करना भी चाह सकते हैं। हालांकी यह   वर्तमान में आवश्यक नहीं है, यह भविष्य में होगा, और नहीं है   इन घटकों पर हस्ताक्षर होने का नुकसान।

स्थिति के आधार पर, कोडसाइन आपके Mach-O निष्पादन योग्य में जोड़ सकता है   फ़ाइल, इसमें विस्तारित विशेषताएँ जोड़ें, या अपने में नई फ़ाइलें बनाएँ   बंडल की सामग्री निर्देशिका। आपकी कोई अन्य फाइल संशोधित नहीं है।

भी यहां से यह जरूरी नहीं है कि एक आवेदन के लिए अमान्य हस्ताक्षर होने का मतलब यह लॉन्च करने में विफल होगा। पृष्ठ कहता है:

यह उस सिस्टम या प्रोग्राम पर निर्भर है जो हस्ताक्षरित या लॉन्च या लोड हो रहा है   यह निर्धारित करने के लिए कोड कि क्या हस्ताक्षर को सत्यापित करना है और, अगर यह करता है, तो   निर्धारित करें कि उस सत्यापन के परिणामों का मूल्यांकन कैसे करें।

एक आवेदन संशोधनों की अनुमति देने के लिए चुन सकता है।

आपका सबसे अच्छा दांव किसी भी आवेदन के साथ परीक्षण और त्रुटि दृष्टिकोण है जिसे आप संशोधित करने का प्रयास कर रहे हैं। यह काम कर सकता है, यह नहीं हो सकता है। कोई भी हमेशा सही जवाब नहीं दिया जा सकता है।

अगर कोई ऐप साइन किया गया है तो आप उसकी तलाश कर सकते हैं Contents/CodeResources फ़ाइल या ए Contents/_CodeSignature/CodeResources बंडल में फ़ाइल। यह फ़ाइल बंडल में सभी हस्ताक्षरित घटकों और उनके अपेक्षित हैश मूल्यों को सूचीबद्ध करती है। यह समझने के लिए शुरू करने के लिए एक अच्छी जगह है कि डेवलपर के कौन से टुकड़े महत्वपूर्ण हैं जो परिवर्तनों के लिए देखने के लिए महत्वपूर्ण हैं।


0

भले ही प्रश्न विशेष रूप से माउंटेन लायन का संदर्भ देता है, लेकिन macOS के नए संस्करण में एक महत्वपूर्ण बदलाव है। MacOS पर 10.11 और बाद में, हस्ताक्षर जो पूरे कोड को कवर नहीं करते हैं अस्वीकार कर दिए जाते हैं।

देख तकनीकी नोट TN2206 - macOS कोड गहराई में हस्ताक्षर करना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.