مقدمة
في هذه المدونة سأشرح كيف تتم الهندسة العكسية (Reverse Engineering) لتطبيق الاندرويد وكيف يتم إسترجاع الـSource Code, وهذا سيساعدنا في فهم طريقة عمل التطبيق والحماية المطبقة عليه وفي النهاية سنتمكن من فحص التطبيق بشكل أفضل.
ماهي الهندسة العكسية
ببساطة هي طريقة لتفكيك التطبيق نحاول فيها إسترجاع التطبيق لشكله الأول (Source Code),في هذه الطريقة سنتعرف على مكوناته وأيضا طريقة عمله. ويوجد طريقتين لفك تطبيق الاندرويد
- Decompile
- هذه الطريقة تعيد لنا التطبيق تقريبا لSource Code نسخة مشابه للنسخة الأصلية, لكن سيصعب علينا التعديل عليها أو بنائها مرة أخرى (Rebulid) , لكنها مفيدة لأنها تساعدنا على فهم طريقة عمل التطبيق.
- Disassemble
- هذة الطريقة نستطيع فك التطبيق بطريقة تساعدنا ببنائه مرة أخرى (Rebuild أو Reassemble) وميزة هذه الطريقة أننا نستطيع تعديل طريقة عمل التطبيق, لكن الSource Code سيصبح عبارة عن Smali Instruction (صعبة القراءة).
كيف يبنى التطبيق
تحت هي الخطوات التي تتم لتحويل الـSource Code إلى تطبيق يعمل على أنظمة الآندرويد. طبعاً توجد عناصر أخرى لبناء تطبيق الآندرويد لكن هنا سنركز فقط على الجزئية التي كتبها المبرمج لسهولة الشرح.
- النص البرمجي (Source Code) المكتوب بلغة الـJava سيتم عمل Compile له ليتحول إلى Java Bytecode ثم سيتم تحويل الـExtension للملفات من Java إلى Class
- بعدها بإستخدام الـDEX Compiler سيتم تحويل الـJava Bytecode إلى Dalvik Bytecode لتتحول Extension الملفات إلى DEX, ومع العلم أن ملف الـDEX الواحد يتحمل فقط 65,536 Methods من ضمنها Methods تابعة للآتي Android Framework و Libraries وأيضا الMethods التي كتبها المبرمج, فمن الطبيعي تواجد أكثر من ملف DEX داخل التطبيق الواحد.
- في النهاية سيتم جمع الملفات المذكورة سابقاً مع ملفات الـResources وأشياء أخرى لتكوين ملف واحد الذي هو ملف التطبيق
الصورة في الأسفل تمثل الخطوات أعلاها