مقال : تعريف بالهندسة العكسية

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

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

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

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

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

هل يقتصر هذا العلم على البرمجة فقط؟

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

اذا كم تعطي لأهمية علم الهندسة العكسية في جميع نواحي حياتنا؟ ان كنت مكانك, اعطيها الدرجة القصوى من حيث الاهمية.

ممتاز, بعد ان علمنا ما هي الهندسة العكسية و ما استعمالاتها, ماذا نحتاج لنبدأ باستخدامها و تطبيقها عمليا؟

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

هنا سيأتي سؤال على ذهن كل قارئ, هل الهندسة العكسية أمر قانوني أم لا؟

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

بعض المفاهيم و ترجمتها بالانجليزية:
Compiler : مترجم
Assembler : مجمع
Documentation : وثيقة
Reverse Engineering : هندسة عكسية
Processor : معالج
Controller : متحكم
Integrated Circuit: دائرة متكاملة



أتمنى ان يكون المقال مفيد لكم وأنا جاهز لأي إستفسارات.