المقال المثبتالهندسة العكسيةالهندسة العكسية - Reverse Engineeringمواضيع ومقالات

مقال : تطبيق على الهندسة العكسية كتابة برنامج Patch

تم أرشفة هذا المحتوى


بسم الله الرحمن الرحيم,

في المقال السابق تحدثنا عن بعض المفاهيم الجديدة في الهندسة العكسية, و علمنا ما الفرق بين كل من الـ 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.

 

1

 

نستطيع رؤية الأكواد الخاصة بكل تعليمة بجانب خانة العناوين, فمثلا الأكواد الخاصة بالتعليمة التي نريد تغييرها (المتواجدة عند عنوان: 0x0046DB15) هما 74 و E4 .

نريد أن نعدل على تلك التعليمة, فبدلا من أن تكون Jump if Equal نريدها أن تكون دائما Jump بهذا الشكل.

 

2

 

لاحظنا بعد تغيير التعليمة أن أكواد التعليمة أختلفت أيضا, فأصبحت 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.

عبدالله محمد

طالب بكلية الهندسة قسم حاسبات و اتصالات, عاشق للهندسة العكسية و أمن المعلومات المادي.

مقالات ذات صلة

‫8 تعليقات

  1. Hi,
    First I really apreciate that I love this ,very
    So I just wanted if you can give me this code written in C
    Cause I’m a student (Bac)
    but I’m learning C,so I want to exploite these things
    Thnak you very much

  2. السلام عليكم
    مسألة البحث عن بايتات بهذا الترتيب الذي أدرج في المقال ليس عمليابشكل دقيق في رأيي حيث يمكن أو احتمال أن نجد نفس الترتيب مكررا عدة مرات وبالتالي سنقع في عدم نجاعة وفاعلية ال patcher ، واقتراحي ، وربما اكون مخطئا، هو كتابة برنامج يبحث عن عناوين البايتات المراد تغييرها، وفي المحصلة برنامج يعمل بشكل فعال
    والسلام عليك

    1. و عليكم السلام و رحمة الله و بركاته أخي,

      شكرا على أضافتك أخي.

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

      أما موضوع البحث من خلال العنوان, هذا كلام صحيح و لكن ليس في جميع الأحوال, وقد تعمدت عدم أستخدام تلك الطريقة لأن بعض الناس تطبق تلك المقالات على نظام تشغيل Windows 7 أو غير ذلك من الأنظمة الحديثة, تلك الأنظمة تستخدم نظام حماية بداخل الذاكرة In-Memory Protection Mechanism يسمى Address Space Layout Randomization و تلك الحماية تقوم كل مرة يعمل فيها النظام باختيار مكان عشوائي يتم فيه تحميل البرامج التنفيذية, لهذا من الصعب أن تعلم أين سيتم تحميل البرنامج في الذاكرة بشكل عام و عناوين التعليمات بشكل خاص مما يجعل تلك الطريقة مستحيلة التنفيذ.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى