مقال: هندسة عكسية لتطبيقات الأندرويد بواسطة APKTool
تقيمك :تحدثنا قبلاً عن الأدوات التي تساعدنا في اختبار اختراق تطبيقات الأندرويد وذكرنا أداة APKTool، في هذا المقال إن شاء الله سنتحدث عن كيفية عمل هندسة عكسية لتطبيقات الأندرويد، لكن قبل أن أتحدث عن ذلك يجب علينا أن نفهم مكونات تطبيقات الأندرويد وطبيعتها.
تطبيقات الأندرويد ما هي إلا ملفات مضغوطة تم تغيير امتدادها إلى APK وهو اختصار إلى Android Application Package، يمكننا التأكد من طبيعة الملف من خلال أمر file الموجود في اللينكس:
في معظم الأحيان يتكون الملف المضغوط من الملفات التالية:
يمكننا التأكد من ذلك من خلال فك ضغط ملف الـAPK كما هو موضح في الصورة التالية:
حسنٌ، هذه هي مكونات ملف الـAPK ولكن كيف يعمل تطبيق الأندرويد؟ يعمل تطبيق الأندرويد من خلال عدة مكونات وهي كالتالي:
دعنا الآن نقوم بتثبيت الـAPKTool على نظام اللينكس ونقوم باستخدامه في عكس برمجة تطبيق أندرويد:
أولاً: سنقوم بتحميل هذا الملف:
https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
يمكنك حفظه بامتداد sh إن أردت.
ثانيًا: سنقوم بالذهاب إلى الرابط التالي وتحميل أحدث نسخة من الـAPKTool وهي بامتداد jar:
سنقوم بإعادة تسمية الملف الذي قمنا بتحميله إلى apktool.jar وبعدها ننتقل إلى الخطوة التالية.
ثالثًا: سنقوم بنقل الملفين إلى هذا المسار:
/usr/local/bin
رابعًا: نقوم بإعطاء الملفين صلاحيات التنفيذ من خلال الأمر التالي:
الـAPKTool يعمل من خلال تحويل ملفات الـdex إلى ملفات smali وهي ملفات سياقها مشابه للغة اسمها Jasmin. من أهم مميزات أداة APKTool أن لها القدرة على عمل decompile للتطبيقات ويمكنك حينها التعديل عليها وإعادة عمل recompile مجددًا لصنع ملف apk جديد.
كل ما علينا فعله لعمل decompile لملف apk هو أن نقوم بالأمر التالي:
يمكننا الآن الدخول إلى مجلد smali والتحقق من الـJava Classes التي تم كتابتها اثناء تطوير التطبيق:
يمكننا الآن التعديل على كود التطبيق وبعد ذلك إعادة بناء التطبيق من خلال أداة APKTool وذلك من خلال الأمر التالي:
كما نرى فيمكننا أن نجد ملف الـ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 كما هو موضح في الصورة التالية:
كمختبر اختراق وبعد التعديل على التطبيق الذي تعمل على فحصه يمكنك الآن أن تقوم بنقل ملف الـresources.arcs وأي ملفات من نوع xml قمت بالتعديل عليها ونقلها للملف الـAPK الأصلي وبعدها عمل recompile للتطبيق ليصبح لديك الآن تطبيق شرعي 🙂
أتمنى أن تكونوا قد استفدتم وإن شاء الله نلتقي في مقالات أخرى ممتعة 🙂

عمر أحمد من مصر، عضو مؤسس في شركة iSecur1ty، مهتم بأمن المعلومات واختبار الاختراق وبجديد تكنولوجيا المعلومات، وكل ما يخص الحاسوب.
التعليقات
ySH
4 يونيو، 2015 الساعة 11:20 مthe post is so good
i push by mistake unlike sorry
very good post thank u . 🙂
M.Elsawy
12 مارس، 2016 الساعة 4:31 صشكرا اخى على الشرح وجزاك الله خيرا
انا معى كتب بصيغة apk بتفدنى جدا وساعات بقى عايز اقتبس منها حاجة او احضر منها وللاسف مبقدرش
وعايز احولها لى pdf
ممكن تعرفنى الطريقة
وشكرا ع الاطالة
بلال
5 يونيو، 2015 الساعة 9:06 صمين غيرك يا عمر اللى يكتب عن الموضوع ده
مستنين الهندسه العكسيه الباقيه بقى
سيد اندرسون
18 يونيو، 2015 الساعة 4:14 صشي جميل هل هناك اداة اخرى لعمل هندسه عكسيه على برامج الحاسوب
عمر أحمد
18 يونيو، 2015 الساعة 8:26 ملا يوجد برنامج واحد يقوم بعمل هندسة عكسية لبرامج الحاسوب. فعلم الهندسة العكسية على برامج الحاسوب أكبر من ذلك. يمكنك مشاهدة المقالات التي تتحدث عن الهندسة العكسية على مجتمع آي سيكيورتي.
joseph
19 يونيو، 2015 الساعة 7:05 صاخي من وين جاك ملف هذا mapsdemo.apk
عمر أحمد
19 يونيو، 2015 الساعة 7:49 مهذا ملف عادي. لا يوجد به شيء مميز. يمكنك التجربة على أي ملف APK تريده.
Ghassan
22 يونيو، 2015 الساعة 12:16 مالسلام عليكم عند انتها الDecompile هل استطيع عمل import project على android studio
عمر أحمد
24 يونيو، 2015 الساعة 7:00 صوعليكم السلام ورحمة الله وبركاته،،
أهلاً عزيزي..
إن كان التطبيق يستخدم أي نوع من أنواع حماية الكود مثل ProGuard فالكود لن يكون مكتمل وبالتالي ستحدث مشاكل أثناء عمل Import.
محمد
1 يوليو، 2015 الساعة 3:23 مالسلام عليكم
هل عند توقيعك لتطبيق ما بعد العبث به ، هل يمكن رفعه عبر جوجل بلاي أم أنه سيكشف ؟
عمر أحمد
1 يوليو، 2015 الساعة 9:02 ممن المفترض أن يعمل بشكل جيد إن كنت قد استخدمت نفس الـCA الخاصة بالتطبيق الأصلي.
razii
11 يوليو، 2015 الساعة 12:06 صاهلا اخي العزيز حاولت علم لغة smali حتى أقوم بالتعديل على البرامج لكن لم أجد مصادر .
ممكن تبعث لي بعض المصادر عن هذه اللغة و لك مني جزيل الشكر اخي.
Razii
11 يوليو، 2015 الساعة 11:27 صاهلاا اخي العزيز هل لديك مصادر لتعلم لغة smali لاني لم أجد لها مصادر و لك مني جزيل الشكر اخي
عمر أحمد
16 يوليو، 2015 الساعة 5:28 صبالفعل لا يوجد مصادر لهذه اللغة.. خلال دراستي لها اعتمدت على البحث في جوجل.. إن شاء الله إن توفر لي الوقت سأقوم بكتابة بعض المقالات عنها.
مسلم
30 يوليو، 2015 الساعة 5:08 صهل من الممكن ان تقوم بعمل نفس اﻻمر على بايلود اختراق اﻻندرويد في الميتا سبوليت
واخفاء ال Activites من الشاشة وجعله يعمل كservices
؟
اعمل شرح لذلك ان كان ممكن
وشكرا لك موضوع جميل لكن كان ناقصه تطبيق
لو شرحت على بايلود اختراق اﻻندرويد او بر نامج اخبار مثل برنامج قناة الجزيرة التعديل عليه والنشر من موقعي مثلا
emad shtay
5 أكتوبر، 2015 الساعة 10:57 مكيف يمكن تجريب هذا المقال على Windows 7 ؟
عمر أحمد
10 أكتوبر، 2015 الساعة 5:45 صمعظم أدوات التعامل مع الأندرويد تعمل على الويندوز.. يمكنك البحث عن الإصدارات المخصصة للويندوز والعمل من خلالها.
Madara
8 أكتوبر، 2015 الساعة 4:16 صاخي احمد اولا اشكرك ع هل موضوع وثانيا عندي طلب
اكو تطبيق اندرويد وهوه الموبجيني المطور وقف ميزه المجتمع يعني من ادخل للمجتمع يقول لايوجد اتصال بالشبكه
اريد حل اعدل ع هل تطبيق وارجعه يشتغل رجاء رجاء ساعدني
عمر أحمد
10 أكتوبر، 2015 الساعة 5:47 صلا أعلم أي شيء عن التطبيق وإن قمت بالتعديل عليه لن تستطيع تثبيته على هاتفك إلا عن طريق ثغرة MasterKey، ومع ذلك يجب عليك أن تعلم ما الذي تريد أن تعدل عليه لكي يعمل التطبيق معك..
علاء
5 نوفمبر، 2015 الساعة 9:58 صشكرا لك اخي الفاضل .. ما ذكرته جدا مفيد وهي طريقة الفك ثم التجميع
ولكم لم تذكر طريقة التعديل استاذي
نريد منك طريقة التعديل وليكن مثلا على برنامج عملي في داخله in-app-purchase ولنفرض اننا نريد تفغيل هذه الخيارات
ورفعت لك نسخة قديمة من البرنامج
https://www.sendspace.com/file/r92rcm
عمر أحمد
22 نوفمبر، 2015 الساعة 11:26 صعادةً، خطوات التعديل تعتمد على معرفتك بلغة الـSmali، وبعد التعديل هناك أمامك خيارين لكي يعمل التطبيق بدون مشاكل.
الطريقة الأولى: هي أن تكون لديك نسخة من الـCert الخاصة بالمطور التي استخدمها لتوثيق التطبيق.
الطريقة الثانية: أن تستغل ثغرة مثل MasterKey لكي تستطيع أن تقوم بإضافة الكود الخاص بك بدون الحاجة للـCert ولكن الثغرة مصاب بها إصدارات محددة من نظام الأندرويد.
أسامة
28 نوفمبر، 2015 الساعة 3:13 صيا اخي الكريم انا اعمل Decompile لتطبيقات النظام والمشكلة اني ما احصل classes .dex او smali
عمر أحمد
6 ديسمبر، 2015 الساعة 12:00 ممرحبًا يا عزيزي، إن قمت بفك الضغط أساسًا لأي تطبيق ستجد ملفات Dex..
أما ملفات الـSmali يجب أن باستخدام أداة Apktool أو BakSmali لتحويل ملفات الـDex لامتداد Smali.
ahmed
8 فبراير، 2016 الساعة 1:00 مااستاذ عمر .. لو عندي تطبيق كيبورد فيه اضافات غير مرغوب فيها .. هل من الممكن ان تعيد بناءه وجعله بخواص اقل مع حذف الاضافات الزائده وشكرا …
عمر أحمد
11 فبراير، 2016 الساعة 12:18 صإن كنت تملك الـKey الذي تم عمل Signing به للتطبيق يمكنك التعديل وبعد ذلك إعادة عمل Signing مجددًا للتطبيق وتثبيته وسيعمل بدون أي مشاكل. أما إن لم تكن أنت مطور التطبيق فلن تستطيع.
فارس مطر
5 مارس، 2016 الساعة 7:28 مالسلام عليكم
اخي عمر .. انا احاول التعديل على برنامج الواتس اب لأنشئ نسخة جديدة معدلة .. قمت بتفكيكه عبر apktool .. بعدها قمت بتعديل اسم الواتس من ملف apktool.yml .. ومن ثم دخلت الى هذا الملف AndroidManifest.xml وعدلت على اسم package:com.whatsapp .. وضعت الاسم نفسه الذي وضعته في ملف apktool.yml
الان فتحت برنامج notepad++ .. بالضغط على crtl+f .. قمت بعمل replace in files من اسم الواتس للاسم اللي اخترته
بعدين جمعت التطبيق وعملتله توقيع .. المشكلة الان انني عندما اقوم بتثبيت التطبيق تظهر رسالة التطبيق غير مثبت ولا يتم التثبيت على الجهاز
ماهو الحل وشكرا.
محمد عتك
7 أبريل، 2016 الساعة 12:07 ماخواني .. عندي شبكة داخلية اريد تطبيق للتواصل بين الاعضاء داخلها مثل الفايبر بدون نت الرجاء الدعم الفني
jokander
28 مايو، 2016 الساعة 12:45 صاخي لو قمت بانشاء الكاي باللينكس بشكل يدوي
ثم نشرته في موقعي كي يقوم المستخدمين بالعمل عليه
هل هناك مشكلة لي ؟؟ يعني ماهي ماهية المفتاح ؟؟ هل فيه معلومات مثلا عن جهازي ؟؟؟ او ماشابه ؟
او لا مجرد اكواد برمجية فقط ؟
وشكرا على الموضوع
کوردستان
12 أكتوبر، 2016 الساعة 6:42 ماخي يوجد تطبيق لعرض قنوات التلفزيونية علىالاندرويد …. السؤال هو : اين اجد روابط القنوات داخل التطبيق المفكّكة ؟
من :
1- res
2- smali
هشام
17 مارس، 2017 الساعة 1:48 صالسلام عليكم
عندي سؤال بنسبة للبايلود الخاص بالميتا سبلويت كيف يمكنني إخفاءه وتركه يعمل في الخفلية
وهناك شيئ أخر لو دمجت بايلود الميتا سبلويت مع تطبيق ثاني مثل الفيس بوك مثلا..
كيف يمكنني ترك تطبيق الفيس بوك المدمج مع البايلود يشتغل عادي والبايلود يشتغل بخفاء في ملفات النظام حتى وإن تم إغلاق تطبيق الفيس بوك يضل البايلود يشتغل في الخفاء
أتمنى تفيدني أخي الأني عامل تحدي مع عمي وقال لي لاتستطيع فعلها الأني حاولت من قبل أتمنى تفيدني حتى أتغلب عليه هههه وشكرا على الموضوع الحلو