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

يمكن للتطبيق أن يستخدم نوعين من الحماية لحماية الكود الخاص به وهما:

ProGuard: يقوم بعدة وظائف لحماية الكود الخاص بالتطبيق ومنها:

  1. File Shrinker: يقوم باكتشاف الـClasses، الـFields، الـMethods، والـAttributes الغير مستخدمة ليقوم بعد ذلك بحذفها.
  2. Optimizer: يقوم بتحسين الـByteCode وإزالة التعليمات (Instructions) الغير مستخدمة.
  3. Obfuscator: يقوم بالتشويش على أسماء الـClasses، الـFields، والـMethods وذلك بتغيير اسمها إلى أسماء قصيرة لا مغزى لها.

DexGuard: يقوم بوظائف مختلفة وذلك لحماية الكود داخل ملفات الـDex ومنها:

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

2. يقوم بتشفير الـString، وتشفير الـClass، بالإضافة إلى وظيفة الـDex Splitting.

بما أننا تعرفنا على الطريق التي تقوم بحماية الكود الخاص بالتطبيق، يمكننا الآن أن نتعرف على طريقة تمكننا من اكتشاف هذه التغييرات في الكود والتي تدل على استخدم نوع من أنواع حماية الكود.

بالطبع يمكننا اكتشاف إن كان تم استخدام أيًا من أنواع الحماية بشكل يدوي وذلك بالإطلاع على الكود بشكل يدوي وتحديد إن كان يوجد ما يدل على ذلك أم لا. ولكن هناك أداة تقوم بهذه العملية بشكل آلي لنتمكن من خلالها باكتشاف هذه الدلائل بشكل أفضل 🙂

الأداة التي سنستخدمها اليوم اسمها DexInfo وهي متواجدة في توزيعة Santoku بشكل افتراضي:

01

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

دعنا نرى الآن مثال أخر على تطبيق تم استخدام ProGuard لحماية الكود الخاص به:

02

كما هو واضح في الصورة السابقة، نحنُ نرى أن أسماء الـClasses تم استبدالها بجملة No index. وهذه طريقة الـProGuard في حماية الكود الخاص بالتطبيقات.

دعنا الآن نستخدم أداة أخرى وهي Dexdump للتحقق من الكود الخاص بملف الـDex:

04

في الصورة السابقة قمت باستخدام أداة Dexdump على تطبيق لا يستخدم حماية وكما نرى فنحن نطلع على البيانات بكل بساطة.

سأقوم الآن باستخدام نفس الأداة على تطبيق يستخدم حماية ونرى الفرق:

03

كما نرى فنحن لم نستطع الاطلاع على اسم الملف الذي يحتوي على كود هذا الـClass وهذا يدل على أن التطبيق يستخدم نوع من أنواع الحماية لحماية الكود الخاص به.

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

05

في الصورة السابقة نرى أننا نستطيع التعرف على أسماء الـVirtual Methods باسمها الطبيعي بدون أي مشاكل.

06

في الصورة السابقة نجد أنه تم استبدال أسماء الـVirtual Methods بحروف لا معنى لها ولا تدل على شيء وهذا يدل أنها تستخدم الـProGuard كحماية.

ملاحظة: الـProGuard يستخدم حروف مثل a,b,c,d لاستبدال الأسماء في التطبيقات، أما الـDexGuard فيستخدم حروف من نوع Single Characters مثل oa أو من نوع UTF16 Characters.

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

أتمنى أن تكونوا قد استفدتم وإن شاء الله نلتقي في دروس أخرى 🙂