كيفية اكتشاف وتجنب استخدام واجهات برمجة التطبيقات الخاصة في مكتبات الطرف الثالث
-
16-09-2019 - |
سؤال
الآن بعد أن تقوم Apple بتشغيل نوع من التحليل الثابت للتحقق من استخدام API الخاص تلقائيا، تم القبض على عدد من الأشخاص بسبب مكتبة الثلاثة عشر. يمكنني استخدام مكتبة أخرى لجهة خارجية (التي تجميع نفسي من التعليمات البرمجية) وأود أن تدقيقها تلقائيا لاستخدام API الخاص قبل أن أقدم إلى Apple، حتى أتمكن من القضاء على / إعادة كتابة هذه الأجزاء.
إذا كنت أركض nm
في تطبيقي قابل للتنفيذ، أحصل على قائمة بالرموز، وأرى رموزا هناك لا أستخدمها. على سبيل المثال، أرى _audioservicesplaystemsound، وإذا كنت ابحث عن "audioservicesplaystystemound" في xcode، لا أحصل على نتائج. هل هناك أي طريقة لتمييز المكالمات تلقائيا ب APIs الخاص، على سبيل المثال، لاحظت أن Apple لها عادة تضمينها مع تسطير الأسفل الأولي.
ومع ذلك: إذا قمت بتضمين مكالمة عمدا إلى API الخاص، فلا تظهر في إخراج nm
, ، لكنها تظهر إذا كنت تعمل strings
على ثنائي. بناء على ذلك، كانت فكرة واحدة كان لدي هي جمع قائمة كبيرة من جميع واجهة برمجة التطبيقات الخاصة الخاصة بجدول ضخم، والبحث عنها تلقائيا في إخراج السلاسل. أنا لم أفعل ذلك حتى الآن.
هل لدى أي شخص أي نصائح حول كيفية التقاط هذه الأشياء تلقائيا حتى أذهب فقط عملية المراجعة مرة واحدة؟
المحلول
يمكنك محاولة تشغيل NM على ملفات الكائنات بدلا من الملف القابل للتنفيذ المرتبط:
nm -g -j *.o | sort | uniq
يجب أن تكون الكائنات في build/<app>.build/*/<app>.build/Objects-normal
الدليل الفرعي.
كنت ترى إشارة إلى AudioServicesPlaySystemSound
لأن واحدة من الوظائف التي اتصلت بها بدوره المكالمات AudioServicesPlaySystemSound
.
المكالمات C الهدف لن تظهر عموما nm
مقالب، ستحتاج إلى استخدام otool
من أجل هذا:
otool -ov <object file>
نصائح أخرى
استخدم أداة DEV هذه، التطبيق الماسح الضوئي. وبعد يقوم بمسح ملف .APP الخاص بك لطرائق API الخاصة. سيحقق الإصدار المستقبلي أيضا لمتغيرات مثيل API الخاص.