المساعد الشخصي الرقمي

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



Rise Company
21-07-2017, 15:24
الهندسة العكسية لتطبيقات الأندرويد بـ APKTool

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

https://www.rise.company/forum/images/imported/2017/07/72.jpg (http://www.isecur1ty.org/wp-content/uploads/2015/05/114.jpg)

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

https://www.rise.company/forum/images/imported/2017/07/72.png (http://www.isecur1ty.org/wp-content/uploads/2015/05/21.png)

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

https://www.rise.company/forum/images/imported/2017/07/73.jpg (http://www.isecur1ty.org/wp-content/uploads/2015/05/34.jpg)

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

https://www.rise.company/forum/images/imported/2017/07/73.png (http://www.isecur1ty.org/wp-content/uploads/2015/05/4.png)
دعنا الآن نقوم بتثبيت الـ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

https://www.rise.company/forum/images/imported/2017/07/74.jpg (http://www.isecur1ty.org/wp-content/uploads/2015/05/54.jpg)

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

https://www.rise.company/forum/images/imported/2017/07/75.jpg
(http://www.isecur1ty.org/wp-content/uploads/2015/05/63.jpg)

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

https://www.rise.company/forum/images/imported/2017/07/76.jpg (http://www.isecur1ty.org/wp-content/uploads/2015/05/73.jpg)

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

https://www.rise.company/forum/images/imported/2017/07/77.jpg (http://www.isecur1ty.org/wp-content/uploads/2015/05/82.jpg)

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

https://www.rise.company/forum/images/imported/2017/07/78.jpg (http://www.isecur1ty.org/wp-content/uploads/2015/05/93.jpg)

كما نرى فيمكننا أن نجد ملف الـ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 كما هو موضح في الصورة التالية:

https://www.rise.company/forum/images/imported/2017/07/79.jpg (http://www.isecur1ty.org/wp-content/uploads/2015/05/102.jpg)

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