سؤال

هناك إجماع متزايد بين مجتمع مطوري iPhone على أن Apple بدأت مؤخرًا في استخدام أداة تحليل التعليمات البرمجية الثابتة لاكتشاف استخدام مكالمات API غير الموثقة.

فقط من أجل الحجة، أتساءل عما إذا كان من الممكن التغلب على هذه الأداة عن طريق إنشاء الاستدعاء في وقت التشغيل مثل هذا:

NSString *const aMethod = @"doStuff:withStuff:";
SEL aSelector = NSSelectorFromString(aMethod);
NSMethodSignature *aSignature = [targetObject methodSignatureForSelector:aSelector];
NSInvokation *anInvokation = [NSInvokation invocationWithMethodSignature:aSignature];
[anInvokation setTarget:targetObject];
[anInvokation setSelector:aSelector];
[anInvokation setArgument:&firstArg atIndex:2];
[anInvokation setArgument:&secondArg atIndex:3];
[anInvokation invoke];

يبدو هذا أمرًا سهلاً للغاية، لذا أتساءل - ما الذي أفتقده؟كيف يمكن لشركة Apple اكتشاف ذلك باستخدام تحليل التعليمات البرمجية الثابتة في التجميع؟

بضع نقاط:

  1. أو أي نوع آخر من التشويش الطفيف (وهو ما يكفي لإرباك المحلل الثابت).
  2. أعلم أنه سيتم الكشف عن هذه الخدعة حتى من خلال تحليل وقت التشغيل الأكثر تافهًا باستخدام gdb - ما أفهمه هو أن Apple تقوم بتحليل الثنائي بنفسها، وربما أكون مخطئًا تمامًا في ذلك.
هل كانت مفيدة؟

المحلول

لماذا الرعاية؟ليس من المفترض أن تستخدم واجهة برمجة التطبيقات الخاصة لسبب وجيه:يمكن لشركة Apple كسر تطبيقك بسهولة في أي وقت، مما يزعج المستخدمين.

ومع ذلك، استخدم NSInvocation، -performSelector:أو أي تقنية أخرى مماثلة ربما تكون كافية لتجنب اكتشافها بواسطة محلل ثابت.

نصائح أخرى

أفترض أنك قرأت هذا المقال.ومن المثير للاهتمام أيضا هذا.تفسيري هو أن محلل Apple الثابت يولد نتائج إيجابية كاذبة لمجرد أن بعض الأشخاص يستخدمون أساليب لها نفس اسم الطرق الخاصة.لم يكن هذا ليحدث إذا كان المحلل قد أجرى تحليل وقت التشغيل أو فحصًا شاملاً لمحدد الفئات الذي تم استدعاؤه.لذا، يبدو أنهم يبحثون بشكل أساسي عن سلاسل أو محددات مطابقة في ملفك الثنائي.أعتقد أن استخدام NSInvocation جنبًا إلى جنب مع بعض تشويش السلسلة سوف يساعدك.ومع ذلك، ما زلت أوصي بعدم الاعتماد على واجهات برمجة التطبيقات الخاصة.

هناك طريقة سهلة لمعرفة ذلك!

أنشئ تطبيقًا يستخدم واجهة برمجة تطبيقات مخفية عن عمد من خلال الطريقة المذكورة في سؤالك وشاهده إذا تم قبوله!

سام

ملاحظة: إذا اكتشفت ذلك، فتأكد من إخبارنا بذلك؛نود جميعًا أن نعرف ذلك بالتأكيد وبالتأكيد لن تخبرنا Apple!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top