قصة قصيرة حول كيفية الراحة في بعض الأحيان يطلق النار على الركبة

أرتيم أزارييف ، رئيس مركز اختصاص قنوات الخدمة عن بعد التابعة لمديرية تكنولوجيا المعلومات التابعة للـ ICD

مرحبا يا هبر!

اسمي Artyom Azariev ، أنا قائد الفريق لفريق Android لبنك موسكو الائتماني ، وأريد اليوم التحدث عن أمان التطبيق من وجهة نظر مكتبات التصحيح. كنت بضع سنوات في العمل الحر ، ثم لمدة 4 سنوات شاركت في تطوير كامل لنظام التشغيل المحمول. لقد حدث أنه خلال سنوات عملي الحر من أجل تحسين مؤهلاتي الخاصة ، تطرقت إلى موضوع الهندسة العكسية لتطبيقات Android ، وتحولت تدريجياً إلى هوايتي.

مقدمة


ليس سراً أن Android Studio لم يقدم لفترة طويلة أي آليات لتلقي بيانات التطبيق على نحو كاف من الجهاز: محتويات قاعدة البيانات ، SharedPrefrences ، طلبات الشبكة. عانى الجميع ، بما في ذلك عمالقة مثل الفيسبوك.

هم الذين قدموا للمجتمع مكتبة مفيدة للغاية لتصحيح الأخطاء Shetho (https://github.com/facebook/stetho) مع دمج بسيط للغاية في المشروع في بضعة أسطر. أنا لا أتحدث عن المكتبة نفسها ؛ على الأرجح ، كثير من الناس يعرفونها بالفعل ، لكن من يهتم ، يقرؤها بمفردهم.

دمج هذه المكتبة على النحو التالي:





باستخدام متصفح Chrome ، لدينا إمكانية الوصول إلى محتويات قواعد البيانات والإعدادات المخزنة على الجهاز ، وإذا وصلنا المكون الإضافي لـ okhttp3 ، ثم أيضًا بمحتويات طلبات الشبكة.



"ولكن مهلا ، سيكون في الإصدار بناء أيضا؟" - سوف يسأل المطور اليقظ نفسه. دعنا ننتقل إلى وصف المكتبة - ماذا نصحنا بهذا؟

يوضح نموذج المشروع أن هذه المكتبة تحتاج إلى التهيئة فقط في فرع التصحيح عن طريق التحميل الزائد في أحد خيارات البناء.



نقوم بتجميع مجموعة الإصدار مع تمكين التصغير (علامة minifyEnabled). نحن نتحقق من المتصفح ، ولا نرى أي تطبيق متاحًا لتصحيح الأخطاء ونذهب إلى النوم بهدوء.

Minification هي عملية تهدف إلى تقليل حجم التعليمات البرمجية المصدر عن طريق إزالة الأحرف غير الضرورية دون تغيير وظائفها. تشارك أداة Proguard المستخدمة في Android أيضًا في تنظيف المشروع من التعليمات البرمجية غير المستخدمة.

hatskery


أي هندسة عكسية للتطبيق تبدأ بدراسة الإشارات المرجعية والخلفيات المحتملة ، والتي تتركها للمطورين لأنفسهم.

أولاً ، نقوم بفك تشفير التطبيق في Java بأكبر قدر ممكن ودراسة شجرة الحزمة.



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

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

سوف يسأل أحدهم: "وما هو؟ إيقاف تشغيله. بالإضافة إلى ذلك ، حتى إذا قمت بتشغيله ، فحاول إنشاء هذا التطبيق لاحقًا. "

صحيح أن إلغاء ترجمته بلغة جافا لا يكاد يعطي كود تشغيل 100٪. ولكن هناك smali / backsmali.
Smali / backsmali عبارة عن أداة تجميع / أداة فك تجميع لتنسيق dex المستخدم بواسطة dalvik ، وهو تطبيق Java VM في Android.

من خلال تفكيك طلبنا ، سوف نرى أنه لا يوجد شيء مدرج بالفعل.



ولكن ، بعد إضافة بضعة أسطر وإضافة كل رموز المكتبة في المشروع ، يمكننا ، من دون جهد خاص ، إعادة تشغيلها.



بالنسبة إلى البرنامج المساعد okhttp3 ، يتم تشغيل الدعم بالمثل - عن طريق إضافة أداة اعتراض إلى OkhttpClient.

بعد تجميع التطبيق مرة أخرى (ومن السهل القيام بذلك من smali) ، نرى أن تصحيح الأخطاء من خلال stetho متاح مرة أخرى ، وجميع البيانات الخاصة بك في مستودع الإعدادات المحلية ، وكل api الخاص بك بالكامل أمام أعين المتسللين الماكرة.

ماذا تفعل؟


هناك العديد من الخيارات لاستبعاد الحزمة من الإنشاء النهائي. أنا شخصياً أفضل كتابة مجموعة صغيرة لتهيئة مكتبة Stetho وتحليل تطبيقاتها المختلفة وفقًا لخيارات التجميع.
إطلاق



التصحيح



وتشير أيضًا إلى أن قاعدة التعليمات البرمجية هذه مطلوبة فقط في إنشاء تصحيح الأخطاء.



يمكن الزفير


أود أن أختتم كلمتي بالتعبير عن المبادئ الأساسية التي أستخدمها عند العمل في سياق أمان تطبيق Android:

  • قم بتصغير كل شيء تحصل عليه إذا أمكن.

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

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

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

آمل أن تكون تجربتي مفيدة لك.

Source: https://habr.com/ru/post/ar471738/


All Articles