أمن وحماية الهواتف الذكيةالمقال المثبتمواضيع ومقالات

مقال: هندسة عكسية لتطبيقات الأندرويد بواسطة APKTool

تم أرشفة هذا المحتوى


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

تطبيقات الأندرويد ما هي إلا ملفات مضغوطة تم تغيير امتدادها إلى APK وهو اختصار إلى Android Application Package، يمكننا التأكد من طبيعة الملف من خلال أمر file الموجود في اللينكس:

1

في معظم الأحيان يتكون الملف المضغوط من الملفات التالية:

2

يمكننا التأكد من ذلك من خلال فك ضغط ملف الـAPK كما هو موضح في الصورة التالية:

3

حسنٌ، هذه هي مكونات ملف الـAPK ولكن كيف يعمل تطبيق الأندرويد؟ يعمل تطبيق الأندرويد من خلال عدة مكونات وهي كالتالي:

4

دعنا الآن نقوم بتثبيت الـAPKTool على نظام اللينكس ونقوم باستخدامه في عكس برمجة تطبيق أندرويد:

أولاً: سنقوم بتحميل هذا الملف:

https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool

يمكنك حفظه بامتداد sh إن أردت.

ثانيًا: سنقوم بالذهاب إلى الرابط التالي وتحميل أحدث نسخة من الـAPKTool وهي بامتداد jar:

https://bitbucket.org/iBotPeaches/apktool/downloads

سنقوم بإعادة تسمية الملف الذي قمنا بتحميله إلى apktool.jar وبعدها ننتقل إلى الخطوة التالية.

ثالثًا: سنقوم بنقل الملفين إلى هذا المسار:

/usr/local/bin

5

رابعًا: نقوم بإعطاء الملفين صلاحيات التنفيذ من خلال الأمر التالي:

6

الـAPKTool يعمل من خلال تحويل ملفات الـdex إلى ملفات smali وهي ملفات سياقها مشابه للغة اسمها Jasmin. من أهم مميزات أداة APKTool أن لها القدرة على عمل decompile للتطبيقات ويمكنك حينها التعديل عليها وإعادة عمل recompile مجددًا لصنع ملف apk جديد.

كل ما علينا فعله لعمل decompile لملف apk هو أن نقوم بالأمر التالي:

7

يمكننا الآن الدخول إلى مجلد smali والتحقق من الـJava Classes التي تم كتابتها اثناء تطوير التطبيق:

8

يمكننا الآن التعديل على كود التطبيق وبعد ذلك إعادة بناء التطبيق من خلال أداة APKTool وذلك من خلال الأمر التالي:

9

كما نرى فيمكننا أن نجد ملف الـAPK الجديد بداخل مجلد dist.

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

هل مهمتك تنتهي عند هذا الحد!؟ بالطبع لا، فمن أهم مميزات الأندرويد وهي من أسباب نجاح هذا النظام هي ما نطلق عليه Application Signing. يوجد على الـPlay Store الخاص بجوجل أكثر من مليون تطبيق، مع العلم أنه يمكن لأي شخص أن يقوم بإضافة تطبيقه الخاص على الـStore ولكن عليك أن تكون على علم بـApplication Signing وفائدته للمطورين. فائدته هي أنه وسيلة مهمة جدًا للوثوق في التطبيق المنشور على الـStore وبالتالي فيجب عليك كمختبر اختراق أن تكون على علم بهذا أيضًا فبعد تعديلك لتطبيق معين يجب عليك أن تقوم بعمل Signing له ليحمل نفس ثقة التطبيق الأصلي.

يوجد نوعان من آليات الـSigning بشكل عام، الطريقة الأولى هي الـGoverning Certificate Authority (CA)، أما الطريقة الثانية فهي Self-Signed. تعتبر الطريقة الثانية هي الأكثر استخدامًا بالنسبة للمطورين وهي الطريقة التي تتبعها بشكل افتراضي بيئات التطوير مثل Eclipse أو Android Studio.

عملية التوثيق في تطبيقات Apple’s iOS تتم بعد أن يقوم المطور برفع التطبيق الخاص به إلى الـApp Store فيتم التحقق منه وبعد ذلك يتم توقيعه أو عمل Signing له بواسطة الـApple’s Certificate. بعد أن يتم يتحميل التطبيق على الهاتف الذي يعمل بنظام iOS يتحقق الهاتف من إن كان التطبيق يحمل توقيع Apple وفي هذه الحالة فقط يتم تشغيل التطبيق على الهاتف.

في نظام أندرويد الأمور مختلفة، فيمكن توثيق التطبيق من خلال الطريقة التي قلنا عنها أنها Self-Signed، فيمكن للمطور أن يقوم بإنشاء وثيقته الخاصة (CA) ويقوم بتوثيق التطبيق من خلالها. بعد أن يتم رفع التطبيق للـPlay Store يمر التطبيق على ما يسمى بالـGoogle Bouncer وهي بيئة افتراضية تم صنعها للتحقيق من إن كان التطبيق خبيث أم إن كان خالي من أي أكواد خبيثة. يظهر التطبيق في الـPlay Store بعد أن تنتهي عملية التحقق. إذن، فجوجل لا تقوم بأي عملية توثيق.

يمكن للمطور أن يقوم بإنشاء الـCA الخاصة به من خلال أداة مرفقة مع حزمة الـSDK والتي يطلق عليها Keytool، أما إن كان المطور قد قام بإنشاء تطبيقه من خلال بيئة تطوير مثل Eclipse أو Android Studio فيمكنه أن يقوم بعملية التوثيق من خلال بيئة التطوير نفسها.

بعد أن يقوم المطور بإنشاء الـCA الخاصة به عليه أن يقوم بحفظ الـKEY الخاص به في مكان آمن لكي لا يستخدمه أي مستخدم خبيث في التعديل على تطبيق معين ويستخدم نفس مفتاح التوثيق الذي أنشائه المطور.

يمكننا الإطلاع على محتويات الوثيقة الخاص بأي ملف APK من خلال أداة Javasigner كما هو موضح في الصورة التالية:

10

كمختبر اختراق وبعد التعديل على التطبيق الذي تعمل على فحصه يمكنك الآن أن تقوم بنقل ملف الـresources.arcs وأي ملفات من نوع xml قمت بالتعديل عليها ونقلها للملف الـAPK الأصلي وبعدها عمل recompile للتطبيق ليصبح لديك الآن تطبيق شرعي 🙂

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

عمر أحمد

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

مقالات ذات صلة

‫30 تعليقات

    1. شكرا اخى على الشرح وجزاك الله خيرا
      انا معى كتب بصيغة apk بتفدنى جدا وساعات بقى عايز اقتبس منها حاجة او احضر منها وللاسف مبقدرش
      وعايز احولها لى pdf
      ممكن تعرفنى الطريقة
      وشكرا ع الاطالة

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

    1. وعليكم السلام ورحمة الله وبركاته،،
      أهلاً عزيزي..
      إن كان التطبيق يستخدم أي نوع من أنواع حماية الكود مثل ProGuard فالكود لن يكون مكتمل وبالتالي ستحدث مشاكل أثناء عمل Import.

  1. السلام عليكم

    هل عند توقيعك لتطبيق ما بعد العبث به ، هل يمكن رفعه عبر جوجل بلاي أم أنه سيكشف ؟

  2. اهلا اخي العزيز حاولت علم لغة smali حتى أقوم بالتعديل على البرامج لكن لم أجد مصادر .
    ممكن تبعث لي بعض المصادر عن هذه اللغة و لك مني جزيل الشكر اخي.

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

  3. هل من الممكن ان تقوم بعمل نفس اﻻمر على بايلود اختراق اﻻندرويد في الميتا سبوليت
    واخفاء ال Activites من الشاشة وجعله يعمل كservices
    ؟
    اعمل شرح لذلك ان كان ممكن
    وشكرا لك موضوع جميل لكن كان ناقصه تطبيق
    لو شرحت على بايلود اختراق اﻻندرويد او بر نامج اخبار مثل برنامج قناة الجزيرة التعديل عليه والنشر من موقعي مثلا

  4. اخي احمد اولا اشكرك ع هل موضوع وثانيا عندي طلب
    اكو تطبيق اندرويد وهوه الموبجيني المطور وقف ميزه المجتمع يعني من ادخل للمجتمع يقول لايوجد اتصال بالشبكه
    اريد حل اعدل ع هل تطبيق وارجعه يشتغل رجاء رجاء ساعدني

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

  5. شكرا لك اخي الفاضل .. ما ذكرته جدا مفيد وهي طريقة الفك ثم التجميع
    ولكم لم تذكر طريقة التعديل استاذي
    نريد منك طريقة التعديل وليكن مثلا على برنامج عملي في داخله in-app-purchase ولنفرض اننا نريد تفغيل هذه الخيارات
    ورفعت لك نسخة قديمة من البرنامج
    https://www.sendspace.com/file/r92rcm

    1. عادةً، خطوات التعديل تعتمد على معرفتك بلغة الـSmali، وبعد التعديل هناك أمامك خيارين لكي يعمل التطبيق بدون مشاكل.
      الطريقة الأولى: هي أن تكون لديك نسخة من الـCert الخاصة بالمطور التي استخدمها لتوثيق التطبيق.
      الطريقة الثانية: أن تستغل ثغرة مثل MasterKey لكي تستطيع أن تقوم بإضافة الكود الخاص بك بدون الحاجة للـCert ولكن الثغرة مصاب بها إصدارات محددة من نظام الأندرويد.

    1. مرحبًا يا عزيزي، إن قمت بفك الضغط أساسًا لأي تطبيق ستجد ملفات Dex..
      أما ملفات الـSmali يجب أن باستخدام أداة Apktool أو BakSmali لتحويل ملفات الـDex لامتداد Smali.

  6. ااستاذ عمر .. لو عندي تطبيق كيبورد فيه اضافات غير مرغوب فيها .. هل من الممكن ان تعيد بناءه وجعله بخواص اقل مع حذف الاضافات الزائده وشكرا …

    1. إن كنت تملك الـKey الذي تم عمل Signing به للتطبيق يمكنك التعديل وبعد ذلك إعادة عمل Signing مجددًا للتطبيق وتثبيته وسيعمل بدون أي مشاكل. أما إن لم تكن أنت مطور التطبيق فلن تستطيع.

  7. السلام عليكم
    اخي عمر .. انا احاول التعديل على برنامج الواتس اب لأنشئ نسخة جديدة معدلة .. قمت بتفكيكه عبر apktool .. بعدها قمت بتعديل اسم الواتس من ملف apktool.yml .. ومن ثم دخلت الى هذا الملف AndroidManifest.xml وعدلت على اسم package:com.whatsapp .. وضعت الاسم نفسه الذي وضعته في ملف apktool.yml
    الان فتحت برنامج notepad++ .. بالضغط على crtl+f .. قمت بعمل replace in files من اسم الواتس للاسم اللي اخترته
    بعدين جمعت التطبيق وعملتله توقيع .. المشكلة الان انني عندما اقوم بتثبيت التطبيق تظهر رسالة التطبيق غير مثبت ولا يتم التثبيت على الجهاز
    ماهو الحل وشكرا.

  8. اخواني .. عندي شبكة داخلية اريد تطبيق للتواصل بين الاعضاء داخلها مثل الفايبر بدون نت الرجاء الدعم الفني

  9. اخي لو قمت بانشاء الكاي باللينكس بشكل يدوي
    ثم نشرته في موقعي كي يقوم المستخدمين بالعمل عليه
    هل هناك مشكلة لي ؟؟ يعني ماهي ماهية المفتاح ؟؟ هل فيه معلومات مثلا عن جهازي ؟؟؟ او ماشابه ؟
    او لا مجرد اكواد برمجية فقط ؟
    وشكرا على الموضوع

  10. اخي يوجد تطبيق لعرض قنوات التلفزيونية علىالاندرويد …. السؤال هو : اين اجد روابط القنوات داخل التطبيق المفكّكة ؟
    من :
    1- res
    2- smali

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى