दिलचस्प पोस्ट
मैं C # के साथ सभी रिक्त स्थान को कैसे बदलूं? स्विफ्ट में ठोस रंग के साथ UIImage बनाएं सी ++, फ्री-स्टोर बनाम हीप संख्याओं के साथ फ़ाइल नाम से फाइलों की सूची कैसे लाएं? PHP में ईमेल पते को मान्य कैसे करें मान्य जावास्क्रिप्ट वस्तु संपत्ति नाम स्प्रिंग एमवीसी यूटीएफ -8 एन्कोडिंग जावास्क्रिप्ट का उपयोग कर आरएसएस फ़ीड को कैसे पार्स करना है? जावाएक्सएक्स नियंत्रक वर्ग काम नहीं कर रहा है वेबव्यू और एचटीएमएल 5 <वीडियो> सूचि धागे-सुरक्षित हैं 1-5 से 1-7 तक यादृच्छिक सीमा का विस्तार करें 'उपयोगकर्ता परिभाषित प्रकार निर्धारित नहीं' त्रुटि क्या जावा से कई मान प्राप्त करने के लिए सुरक्षित है? अभिव्यक्ति बनाम विवरण

ऐप्पल कैसे जानता है कि आप निजी एपीआई का उपयोग कर रहे हैं?

मैंने किसी भी स्रोत कोड के बिना ऐप के लिए एक बाइनरी फ़ाइल सबमिट की है।

मैन्युअल रूप से स्रोत कोड की जांच के अलावा ऐप्पल को पता है कि क्या इस्तेमाल किया गया था और आपने कौन सी एपीआई बुलाया है?

वेब के समाधान से एकत्रित समाधान "ऐप्पल कैसे जानता है कि आप निजी एपीआई का उपयोग कर रहे हैं?"

मुझे पता है कि 3 तरीके हैं ये सिर्फ कुछ अटकलें हैं, क्योंकि मैं ऐप्पल की समीक्षा टीम में काम नहीं करता हूं।

1. otool -L

यह उन सभी पुस्तकालयों को सूचीबद्ध करेगा जिनसे ऐप ने लिंक किया है। कुछ स्पष्ट रूप से आपको इसका उपयोग नहीं करना चाहिए, जैसे IOKit और WebKit को इसके द्वारा पता लगाया जा सकता है।

2. nm -u

यह सभी लिंक किए गए प्रतीकों की सूची देगा यह पता लगा सकता है

  • गैर-दस्तावेजी सी फ़ंक्शन जैसे _UIImageWithName;
  • उद्देश्य-सी कक्षाएं जैसे कि यूआईआईपीआरजीएचयूडी
  • UITouch._phase जैसे कि UITouch._phase (जो कि पिछले कुछ महीनों में UITouch._phase -आधारित ऐप की अस्वीकृति का कारण हो सकता है।)

3. उद्देश्य-सी चयनकर्ताओं, या strings सूचीबद्ध करना

उद्देश्य-सी चयनकर्ताओं को बाइनरी के एक विशेष क्षेत्र में संग्रहित किया जाता है, और इसलिए ऐप्पल वहां से सामग्री निकाल सकता है, और जांचें कि क्या आपने कुछ गैर-दस्तावेज उद्देश्य-सी विधियों का उपयोग किया है, जैसे -[UIDevice setOrientation:]

चूंकि चयनकर्ता वर्ग से स्वतंत्र हैं, आप संदेश -setOrientation: रहे हैं, भले ही आपका कस्टम वर्ग परिभाषित करता है -setOrientation: यूआईडीवाइस के लिए अप्रासंगिक, अस्वीकार किए जाने की संभावना होगी।


आप निजी एपीआई (गलत अलार्म) के कारण संभावित अस्वीकृति का पता लगाने के लिए एरिका सदन के एपीआई किट का उपयोग कर सकते हैं।


(यदि आप वास्तव में वास्तव में वास्तव में इन चेक का समाधान करना चाहते हैं, तो आप रनटाइम सुविधाओं का उपयोग कर सकते हैं जैसे कि

  • ड्लोपें, डीएसएलएसएम
  • objc_getClass, sel_registerName, objc_msgSend
  • -valueForKey: :; object_getInstanceVariable, object_getIvar, आदि।

उन निजी पुस्तकालयों, कक्षाओं, विधियों और आयवरों को प्राप्त करने के लिए )

आप टर्मिनल में निम्नलिखित एक-लाइनर का उपयोग करके मैक-ओ प्रोग्राम में चयनकर्ताओं को सूचीबद्ध कर सकते हैं:

 otool -s __TEXT __objc_methname "$1" |expand -8 | cut -c17- | sed -n '3,$p' | perl -n -e 'print join("\n",split(/\x00/,scalar reverse (reverse unpack("(a4)*",pack("(H8)*",split(/\s/,$_))))))' 

मान लें कि आप कुछ निजी एपीआई का उपयोग करना चाहते हैं; उद्देश्य सी आपको स्ट्रिंग से किसी भी एसईएल का निर्माण करने की अनुमति देता है:

  SEL my_sel = NSSelectorFromString([NSString stringWithFormat:\ @"%@%@%@", "se","tOr","ientation:"]); [UIDevice performSelector:my_sel ...]; 

एक रोबोट या लाइब्रेरी कैसे स्कैन कर सकता है? उन्हें कुछ उपकरण का उपयोग करके इसे पकड़ना होगा जो रनटाइम पर निजी अभिगमों पर नज़र रखता है। यहां तक ​​कि अगर उन्होंने इस तरह के एक रनटाइम उपकरण का निर्माण किया है, तो इसे पकड़ना मुश्किल है क्योंकि यह कॉल शायद ही कभी प्रयोग किए गए रास्ते में छिपी हो सकती है।

मैं सोचता हूं कि वे अपने बाइनरी के सभी प्रतीकों को आयात करने की कोशिश कर रहे हैं (जानकारी उनके लिए प्रतीक तालिका में आसानी से उपलब्ध नहीं है) और आपको इनमें से किसी भी प्रतीक को उनकी "निजी एपीआई सूची" में पाया जाता है। वास्तव में स्वचालित करने के लिए बहुत आसान है, वास्तव में

एक निष्पादन योग्य बिल्कुल एक ब्लैक बॉक्स नहीं है यदि आप किसी पुस्तकालय में कॉल करते हैं, तो यह खोजने के लिए एक आसान बात है यही कारण है कि मैं आधुनिक सीएस शिक्षाओं में विधानसभा भाषाओं के नुकसान को विलाप करता हूं। =] एलडीडी जैसे उपकरण आपको बताएंगे कि आपने क्या जोड़ा है, हालांकि मुझे याद नहीं है कि एलडीडी के अवतार क्या मैक आईफोन देव किट में बना है।

यहां तक ​​कि अगर आप स्थायी रूप से लिंक कर रहे हैं, तो सबसे खराब स्थिति में, वे निजी लिंक्स के कोड के नमूने अपनी सूची में ले सकते हैं, और उनके खिलाफ अपनी बाइनरी खोज सकते हैं (यह स्वचालित रूप से आसान भी है)।

एपल को जानना, मुझे यकीन है कि उनके पास एक व्यापक, स्वचालित प्रणाली है, और शायद किसी भी अनिश्चितता को या तो मैन्युअल रूप से अस्वीकार या समीक्षा की जाती है

दिन का अंत, मुझे लगता है कि यह संभवत: ऐप्पल की कोशिश करने और बेवकूफ बनाने का प्रयास नहीं है।

 otool -L somebinary 

यह डेस्कटॉप अनुप्रयोग, ऐप स्कैनर , मैक-ओ बाइनरी फ़ाइल को अलग करके निजी एपीआई उपयोग के लिए एपी फ़ाइलों को स्कैन कर सकता है। अगर ऐसा हो सकता है, तो एप्पल भी कर सकता है!

प्रतीक जांच से अलग …

सेब बहुत आसानी से एसडीके का एक संस्करण हो सकता है जो प्रत्येक निजी तरीकों के ढेर को जांचता है, जब यह सुनिश्चित किया जाता है कि यह किसी निर्दिष्ट विधियों में से प्रवेश किया जाता है।