উত্তর:
আমি জানি 3 উপায় আছে। এগুলি কেবলমাত্র কিছু জল্পনা, কারণ আমি অ্যাপল পর্যালোচনা দলে কাজ করি না।
otool -L
এটি অ্যাপ্লিকেশনটিতে লিঙ্কযুক্ত সমস্ত লাইব্রেরির তালিকা তৈরি করবে। আইওকিট এবং ওয়েবকিট এর মতো আপনার স্পষ্টভাবে কিছু ব্যবহার করা উচিত নয়।
nm -u
এটি সমস্ত সংযুক্ত চিহ্নকে তালিকাভুক্ত করবে। এটি সনাক্ত করতে পারে
UITouch._phase
(যা গত কয়েক মাসে থ্রি -20 ভিত্তিক অ্যাপ্লিকেশন প্রত্যাখ্যানের কারণ হতে পারে ।)strings
উদ্দেশ্য-সি বাছাইকারীরা বাইনারিগুলির একটি বিশেষ অঞ্চলে সংরক্ষণ করা হয়, এবং তাই অ্যাপল সেখান থেকে সামগ্রীটি বের করতে পারে এবং পরীক্ষা করে দেখে নিতে পারে যে আপনি কিছু অনিবন্ধিত উদ্দেশ্য-সি পদ্ধতি ব্যবহার করেছেন কিনা -[UIDevice setOrientation:]
।
যেহেতু নির্বাচকরা আপনি মেসেজ করছেন সে ক্লাস থেকে স্বতন্ত্র, এমনকি আপনার কাস্টম শ্রেণি -setOrientation:
ইউআইডেভাইসকে অপ্রাসঙ্গিকভাবে সংজ্ঞায়িত করলেও প্রত্যাখ্যান হওয়ার সম্ভাবনা থাকবে।
বেসরকারী API গুলির কারণে (এর মিথ্যা বিপদাশঙ্কা) সম্ভাব্য প্রত্যাখ্যান সনাক্ত করতে আপনি এরিকা সাদুনের এপিআইকিট ব্যবহার করতে পারেন ।
(আপনি যদি সত্যই সত্যই এই চেকগুলি বাস্তবায়িত করতে চান তবে আপনি রানটাইম বৈশিষ্ট্যগুলি যেমন ব্যবহার করতে পারেন
-valueForKey:
; অবজেক্ট_জেটসায়েন্সটি ভেরিয়েবল, অবজেক্ট_জেটআইভার ইত্যাদিএই ব্যক্তিগত লাইব্রেরি, ক্লাস, পদ্ধতি এবং 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/,$_))))))'
ধরা যাক আপনি কিছু বেসরকারী এপিআই ব্যবহার করতে চান; উদ্দেশ্য সি আপনাকে একটি স্ট্রিং থেকে যে কোনও এসইএল নির্মাণ করতে দেয়:
SEL my_sel = NSSelectorFromString([NSString stringWithFormat:\
@"%@%@%@", "se","tOr","ientation:"]);
[UIDevice performSelector:my_sel ...];
কোনও রোবট বা পাঠাগার স্ক্যান এটি কীভাবে ধরতে পারে? রানটাইমের সময়ে ব্যক্তিগত অ্যাক্সেসগুলি পর্যবেক্ষণ করে এমন কোনও সরঞ্জাম ব্যবহার করে তাদের এটিকে ধরতে হবে। এমনকি যদি তারা এমন একটি রানটাইম সরঞ্জাম তৈরি করে তবে এটি ধরা শক্ত hard কারণ এই কলটি কিছু বিরল ব্যবহারের পথে লুকিয়ে থাকতে পারে।
আমি ধারণা করি যে তারা আপনার বাইনারিগুলির আমদানি করার চেষ্টা করছে এমন সমস্ত চিহ্নকে লক্ষ্য করে (কোনও চিহ্নই এটির প্রতীক টেবিলটিতে সহজেই তাদের কাছে উপলভ্য হবে) এবং যদি তাদের "ব্যক্তিগত এপিআই তালিকায়" প্রতীকগুলির কোনও পাওয়া যায় তবে আপনাকে ডিং দিবে। প্রকৃতপক্ষে স্বয়ংক্রিয়ভাবে চালানো খুব সহজ।
একটি কার্যকর কার্যকর একটি কালো বক্স নয়। আপনি যদি কোনও লাইব্রেরিতে কল করেন তবে এটি সন্ধান করা সহজ জিনিস। এই কারণেই আমি আধুনিক সিএস শিক্ষায় অ্যাসেম্বলি ভাষাগুলির ক্ষতির জন্য বিলাপ করেছি। =] এলডিডি-এর মতো সরঞ্জামগুলি আপনাকে কী লিঙ্ক করেছে তা আপনাকে জানাবে, যদিও আমি মনে করি না এলডিডি কী অবতারটি এটিকে ম্যাক আইফোন ডেভ কিটে তৈরি করেছে to
প্রতীক তদন্ত বাদ ...
আপেলের কাছে খুব সহজেই এসডির একটি সংস্করণ থাকতে পারে যা নির্ধারিত পদ্ধতিগুলির মধ্যে কোনওটি থেকে প্রবেশ করা হয়েছে তা নিশ্চিত করার জন্য যখন ডাকা হয় তখন প্রতিটি ব্যক্তিগত পদ্ধতি স্ট্যাকের পরীক্ষা করে থাকে।
এমনকি যদি আপনি স্থিতিশীলভাবে লিঙ্ক করেন তবে, সবচেয়ে খারাপভাবেও, তারা তাদের তালিকার প্রাইভেট এপিআই থেকে কোডের নমুনা নিতে পারে এবং তাদের বিরুদ্ধে আপনার বাইনারি অনুসন্ধান করতে পারে (স্বয়ংক্রিয়ভাবে তুলনামূলক সহজ))
অ্যাপলকে জেনে আমি বাজি ধরব যে তাদের একটি বিস্তৃত, স্বয়ংক্রিয় ব্যবস্থা রয়েছে এবং কোনও অনিশ্চয়তা সম্ভবত ম্যানুয়ালি অস্বীকার করা হয়েছে বা পর্যালোচনা করা হবে।
দিনের শেষে, আমি মনে করি অ্যাপলকে চেষ্টা ও বোকা বানানোর প্রচেষ্টা সম্ভবত মূল্যবান নয়।
অ্যাপ স্ক্যানার এই ডেস্কটপ অ্যাপ্লিকেশনটি ম্যাক-ও বাইনারি ফাইলটি আলাদা করে ব্যক্তিগত এপিআই ব্যবহারের জন্য .app ফাইলগুলি স্ক্যান করতে পারে। যদি তা করতে পারে, তবে অ্যাপলও পারবে!
বিপরীত ইঞ্জিনিয়ারিংয়ের জন্য প্রচুর সরঞ্জাম রয়েছে যা একটি কোড পরিদর্শন করতে দেয়
nm
- অবজেক্ট ফাইল থেকে চিহ্নগুলি তালিকাভুক্ত করে objdump
- অবজেক্ট ফাইল থেকে তথ্য প্রদর্শন করুন।otool
- মাচ-ও [সম্পর্কে] এক্সিকিউটেবলের সামগ্রী দেখুনstrings
- এটি আপনাকে সমস্ত স্ট্রিংস পাবে।অবজেক্টিভ-সি এবং সুইফ্টের জন্য এই কমান্ডগুলি গিস্টগুলিতে ব্যবহার করার উদাহরণ / উপস্থাপনা পেতে পারেন