في المقال السابق تحدثنا عن بعض المفاهيم الجديدة في الهندسة العكسية, و
علمنا ما الفرق بين كل من الـ Crack و برامج الـ Keygen و Patch. كل ذلك
كون لنا صورة -على الأقل- أولية لمدى أهمية علم الهندسة العكسية, وكيف يمكن
الاستفادة به في كثير من المجالات باستخدام الكثير من الطرق.
اليوم بأذن الله سنتطرق الى كتابة أول برنامج Patch, ولن يكون مقال
اليوم طويلا أو صعبا, تمهيدا للمقال القادم ان شاء الله الخاص بكتابة
برنامج Keygen و هو أكثر تعقيدا لأننا سنتطرق الى بعض الرياضيات و
المعادلات, كما سنبدأ من المقال القادم باستخدام برامج الـ Crackme لتطبيق
كل ما نتعلمه في الهندسة العكسية.
في مقال كسر حماية برنامج Winrar و لحذف الشاشة التي تظهر في البداية
(ملحوظة صغيرة, أي شاشة تظهر في أثناء استخدامك لبرنامج ما لتنبهك على أمر
ما تسمى Nag Screen, سنستخدم هذا اللفظ بأذن الله في المقالات القادمة)
قمنا أولا بتتبع بعض نداءات الدالات أثناء عمل البرنامج حتى وصلنا للتعليمة
التي تقوم بالقفز للكود الخاص بالـ Nag Screen, و غيرنا تلك التعليمة الى
تعليمة أخرى. أفترض معي أن بعض من أصدقائك أعجبوا بما قمت به, و طلبوا منك
أن تفعل نفس الأمر عندهم لأن تلك الـ Nag Screen تزعجهم في كل مرة يقومون
بالعمل على البرنامج, قطعا لن تذهب لكل صديق و تقوم بتنزيل برامج الـ
Debuggers و الـ Disassemblers و تقوم بتتبع نداءات الدالات. بدلا من كل
هذا ستقوم بكتابة برنامج بسيط يقوم بترقيع و تعديل التعليمة مباشرة بدون أي
برنامج خارجي أو تتبع دالات أو شئ من هذا القبيل, البرنامج سيقرأ تعليمات
برنامج Winrar و سيقوم بالتعديل على التعليمة المراد ترقيعها مباشرة.
هذا بالضبط ما سنفعله اليوم بأذن الله ,سنقوم بكتابة برنامج عند وضعه في
نفس مسار برنامج Winrar و عند فتحه, يقوم بترقيع تلك التعليمة.
في البداية, كيف سنخبر البرنامج الذي سنقوم بكتابته عن عنوان التعليمة و
قد يختلف مكانها من جهاز لآخر و من نظام تشغيل لآخر و من اصدار لآخر؟
نستطيع ذلك من خلال البحث على كود التعليمة Operation Code التي نريد
تعديلها. نحن نعلم جيدا أننا نتعامل مع تعليمات معالج Processor
instructions, كل تعليمة لها كود خاص بها, يمكننا الاتطلاع على أكواد
التعليمات المدعومة من معالج Intel من خلال الوثيقة البرمجية الرسمية لتلك
المعالجات Intel Standard Documentation.
نستطيع أيضا رؤية الأكواد الخاصة بالتعليمات من داخل برنامج Immunity, فمثلا اذا نظرنا للتعليمة التي نريد تعديلها في برنامج Winrar.
نستطيع رؤية الأكواد الخاصة بكل تعليمة بجانب خانة العناوين, فمثلا
الأكواد الخاصة بالتعليمة التي نريد تغييرها (المتواجدة عند عنوان:
0x0046DB15) هما 74 و E4 .
نريد أن نعدل على تلك التعليمة, فبدلا من أن تكون Jump if Equal نريدها أن تكون دائما Jump بهذا الشكل.
لاحظنا بعد تغيير التعليمة أن أكواد التعليمة أختلفت أيضا, فأصبحت EB و E4.
اذا كل ما سنقوم به هو كتابة برنامج يصل لتلك التعليمة و يعدل اول Byte
فيها ليجعله EB بدلا من 74, و لكن كيف سنجعل البرنامج الخاص بنا يصل لتلك
التعليمة؟
هذا أمر هين, نستطيع القيام به باستخدام العديد من الطرق, سأستخدم هنا
طريقة يسيرة جدا, وهي جعل البرنامج يبحث عن مجموعة الأكواد التي تبدأ بـ 74
و E4 و 6A و 00, أنا أخذت 2 bytes زائدتين بعد التعليمة التي نريد
تغييرها لأن في برنامج Winrar يوجد الكثير من التعليمات التي تبدأ أكوادها
بـ 74 و E4 فبالتالي حتى اتأكد من أن البرنامج الذي سأقوم بكتابته سيصل
للتعليمة المطلوبة بدقة, اعطيته 2 bytes زائدتين.
اذا كل ما علينا أن نقوم به الآن هو كتابة برنامج بلغة البرمجة المفضلة
لدينا, ثم جعل البرنامج يبحث عن سلسلة الأكواد التالية 74 و E4 و 6ِA و 00
ثم التعديل على أول byte و جعله EB بدلا من 74.
لقد قمت بكتابة برنامج Patch بسيط بلغة البايثون و لغة السي, ستجد الرابط في جزء المراجع.
بفضل الله تعالى استطعنا كتابة برنامج Patch اذا أعطيناه لأي شخص, وبعد
وضعه في نفس مسار برنامج Winrar سيقوم بعد الضغط عليه و تنفيذه بترقيع
برنامج Winrar تلقائيا و سيقوم بإزالة الـ Nag Screen.
ملحوظة, في حالة كتابتك لبرنامج Patch باستخدام لغة scripting language
يجب عليك تحويل الـ Script الى ملف تنفيذي قبل اعطائه لأي شخص آخر, أو يمكن
تفادي تلك الخطوة من خلال تنزيل مترجم Python على الجهاز الذي سيقوم بفتح
البرنامج.
المراجع:
–
Patch in Python.
–
Patch in C.