जवाबों:
मुझे पता है कि 3 तरीके हैं। ये सिर्फ कुछ अटकलें हैं, क्योंकि मैं Apple समीक्षा टीम में काम नहीं करता हूं।
otool -L
यह उन सभी पुस्तकालयों को सूचीबद्ध करेगा, जिनसे ऐप जुड़ा है। कुछ स्पष्ट रूप से आपको उपयोग नहीं करना चाहिए, जैसे कि IOKit और WebKit द्वारा इसका पता लगाया जा सकता है।
nm -u
यह सभी लिंक किए गए प्रतीकों को सूचीबद्ध करेगा। यह पता लगा सकता है
UITouch._phase
(जो पिछले कुछ महीनों में तीन20-आधारित ऐप्स की अस्वीकृति का कारण हो सकता है ।)strings
उद्देश्य-सी चयनकर्ताओं को बाइनरी के एक विशेष क्षेत्र में संग्रहीत किया जाता है, और इसलिए ऐप्पल वहां से सामग्री निकाल सकता है, और जांचें कि क्या आपने कुछ अनिर्दिष्ट ऑब्जेक्ट-सी विधियों का उपयोग किया है, जैसे कि -[UIDevice setOrientation:]
।
चूंकि चयनकर्ता आपके द्वारा भेजे जा रहे वर्ग से स्वतंत्र होते हैं, भले ही आपका कस्टम वर्ग -setOrientation:
UIDevice के लिए अप्रासंगिक हो, अस्वीकार किए जाने की संभावना होगी।
निजी एपीआई के (झूठे अलार्म) के कारण संभावित अस्वीकृति का पता लगाने के लिए आप एरिका सदुन के एपीकिट का उपयोग कर सकते हैं ।
(यदि आप वास्तव में वास्तव में वास्तव में इन जांचों को हल करना चाहते हैं, तो आप रनटाइम सुविधाओं का उपयोग कर सकते हैं जैसे कि
-valueForKey:
; object_getInstanceVariable, object_getIvar, आदि।उन निजी पुस्तकालयों, कक्षाओं, विधियों और ivars को पाने के लिए। )
आप टर्मिनल में निम्नलिखित वन-लाइनर का उपयोग करके चयनकर्ताओं को माच-ओ कार्यक्रम में सूचीबद्ध कर सकते हैं:
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/,$_))))))'
मान लें कि आप कुछ निजी एपीआई का उपयोग करना चाहते हैं; उद्देश्य C आपको स्ट्रिंग से किसी भी SEL का निर्माण करने की अनुमति देता है:
SEL my_sel = NSSelectorFromString([NSString stringWithFormat:\
@"%@%@%@", "se","tOr","ientation:"]);
[UIDevice performSelector:my_sel ...];
रोबोट या लाइब्रेरी स्कैन इसे कैसे पकड़ सकता है? उन्हें रनटाइम पर निजी एक्सेस पर नज़र रखने वाले कुछ टूल का उपयोग करके इसे पकड़ना होगा। यहां तक कि अगर वे इस तरह के रनटाइम टूल का निर्माण करते हैं, तो इसे पकड़ना मुश्किल है क्योंकि यह कॉल कुछ दुर्लभ व्यायाम पथ में छिपा हो सकता है।
मुझे लगता है कि वे सभी प्रतीकों को देखने की कोशिश कर रहे हैं जो आपके बाइनरी को आयात करने की कोशिश कर रहे हैं (प्रतीक तालिका में उन्हें आसानी से उपलब्ध होने में कोई संदेह नहीं है) और आपको डिंग करता है यदि उन प्रतीकों में से कोई भी उनकी "निजी एपीआई सूची" में पाया जाता है। वास्तव में स्वचालित करने के लिए बहुत आसान है।
एक निष्पादन योग्य बिल्कुल एक ब्लैक बॉक्स नहीं है। यदि आप किसी पुस्तकालय में बुलाते हैं, तो यह एक आसान बात है। यही कारण है कि मैं आधुनिक सीएस शिक्षा में विधानसभा भाषाओं के नुकसान का शोक मनाता हूं। =] Ldd जैसे उपकरण आपको बताएंगे कि आपने क्या लिंक किया है, हालांकि मुझे याद नहीं है कि ldd के किस अवतार ने इसे मैक iPhone देव किट में बनाया है।
प्रतीक जांच से अलग ...
सेब बहुत आसानी से एसडीके का एक संस्करण हो सकता है जो प्रत्येक निजी तरीकों के स्टैक की जांच करता है जब यह सुनिश्चित करने के लिए बुलाया जाता है कि यह निर्दिष्ट विधियों में से एक से दर्ज किया गया है।
यहां तक कि अगर आप सांख्यिकीय रूप से लिंक कर रहे हैं, तो सबसे खराब रूप से, वे अपनी सूची में निजी एपीआई से कोड के नमूने ले सकते हैं, और उनके खिलाफ अपने द्विआधारी को खोज सकते हैं (यह भी स्वचालित रूप से आसान है)।
Apple को पता है, मुझे यकीन है कि उनके पास एक व्यापक, स्वचालित प्रणाली है, और किसी भी अनिश्चितता को या तो अस्वीकार किया जाता है या मैन्युअल रूप से समीक्षा की जाती है।
दिन के अंत में, मुझे लगता है कि यह शायद ऐप्पल की कोशिश करने और मूर्ख बनाने के लायक नहीं है।
रिवर्स इंजीनियरिंग के लिए बहुत सारे उपकरण हैं जो एक कोड का निरीक्षण करने की अनुमति देता है
nm
- ऑब्जेक्ट फ़ाइलों से प्रतीकों को सूचीबद्ध करता है objdump
- ऑब्जेक्ट फ़ाइलों से प्रदर्शन जानकारी।otool
- मच-ओ [के बारे में] निष्पादनयोग्य की सामग्री देखेंstrings
- यह आपको सभी तार मिल जाएगा।आप उद्देश्य-सी और स्विफ्ट के लिए इन कमांडों का उपयोग करने के उदाहरण / प्रतिनिधित्व पा सकते हैं