تحدثنا في العديد من المقالات السابقة عن الهندسة العكسية سواء كانت بشرح مفاهيم أو مصطلحات أو حتى تطبيقات عملية لبعض البرامج بشكل سريع ,  في هذا المقال إن شاء الله سوف نتحدث عن كيفية تحليل برنامج بسيط جداً مكتوب بلغة java وإستخراج السورس كود الخاص به , تفيدنا طبعاً هذه العملية بشكل كبير جداً في حال كنا نريد تحليل فايروس معين فنقوم بعمل هندسة عكسية وقرأة السورس كود الخاص به , وطبعاً تدخل عملية الهندسة العكسية بهذا الشكل للفايروسات ضمن مرحلة Static Malware analysis حيث تقوم بتحليل الملف ضار دون تشغيله من الأساس , أي أنك فقط تقوم بمحاولة عمل هندسة عكسية عليه أو حتى إستخراج بعض الأمور دون الحاجه لعمل هندسة عكسية.

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

حسناً كما نرى هذا هو البرنامج الخاص بنا والصور التالية توضح كيفية عمله :

الصورة التالية توضح ظهور شاشة تسألنا عن كلمة المرور.

password_java

وهذه الصورة توضح الخطأ الذي يظهر في حال قمنا بإدخال كلمة مرور خاطئه :

error

 

عندما طلب مني البرنامج إدخال كلمة المرور , قمت بإدخال رقم عشوائي فكانت النتيجة كما بالصورة الثانية.

الأن سوف نبدأ بتحليل البرنامج وسوف نحاول معرفة كلمة المرور الصحيحة , دعونا نلقي نظرة على البرنامج بإستعراض جميع الملفات الموجودة بمجلد العمل الحالي:

ls_java

كما نشاهد إسم البرنامج الخاص بنا هو file.class ومن المعروف أن .class هي صيغة لتطبيقات java وطبعاً يكون هذا الملف مترجم من قبل مترجم لغة java وعليه فإننا لا نستطيع تصفحه من خلال محرر النصوص العادي وقرأة السورس كود الخاص بهذا البرنامج وهنا سوف يأتي دور الهندسة العكسية بمحاولة فهم ما يجري بالضبط وإستخراج السورس كود الخاص بهذا البرنامج.

طبعاً كما ذكرنا يتم تحويل السورس كود الخاص بالبرنامج  إلى ملف جافا مترجم لا يمكن قرأته وهو بصيغة .class , هذه الصورة توضح ألية التحويل :

compiler

 

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

من الممكن أن لا يظهر السورس كود ما هو بنسبة 100% ولكن يظهر بشكل برمجي منطقي كامل بأغلب الأحيان.

حسناً هذه صورة برنامج Java Decompiler بعد تشغيله , سوف أرفق رابط تحميل البرنامج بأسفل التدوينة.

JD_img

سوف نقوم بالذهاب إلى file – open file ومن ثم إختبار file.class حيث سوف يظهر لنا التالي :

JD_COde

 

كما نشاهد إستطعنا قرأة السورس كود الخاص بالبرنامج وظهر لنا البرنامج بشكل بسيط جداً , حيث أننا نرى إستدعاء JOtionPane لكي يتم التعامل مع إدخال المستخدم وطباعة الرسائل وأيضاً نقوم بعمل تعريف للمتغير i ومقارنته مع ما يتم إدخاله مع المستخدم ومن ثم طباعة card number , حيث أن المتغير i يشكل كلمة المرور التي نبحث عنها وهي 741852963 , وفي حال قمنا بإدخال الرقم 741852963 سوف نحصل على التالي :

done_java

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

كما ذكرت مسبقاً أن السورس كود لا يكون دقيق 100% والصورة الحقيقة للسورس الخاص بالبرنامج توضح إختلاف بعض المتغيرات والأمور البسيطة.

code_java

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

الموقع الرسمي ل Java Decompiler