الهندسة العكسية Reverse Engineering
تخيل أنك تقوم بتركيب آلة أو جسم ما ابتداءً من أصغر أجزائه إلى اكتماله بحيث تصل إلى شكله النهائي، فربما سيكون من الصعب القيام بذلك إذا انطلقت من الصفر إلى استكمال البناء، لكن ماذا عن وجود الآلة جاهزة ومن ثم تفكيكها وفهم آليتها ثم تركيبها وهكذا ستقلل من احتمالية الخطأ وتختصر من وقت عملية التركيب، هذه العملية تسمى الهندسة العكسيةReverse Engineering . رأينا على مدار القرن الماضي وحتى هذه اللحظة أن عدد قليل جداً من الآلات وخطوط الإنتاج صامدة وتعمل بشكل جيد ومستمر رغم مرور زمن طويل على إنتاجها وأنها لم تتهالك بالقِدم وذلك عائد إلى أهمية الهندسة العكسية التي سمحت لنا باستبدال الأجزاء المعطلة أو التي تحتاج إلى تطوير بدلاً من الاستغناء عن الآلة بأكملها.
يمكن فهم الهندسة العكسية ببساطة على أنها عملية منظمة تختلف أدواتها وطرائقها باختلاف المجال المستخدمة ضمنه، حيث يتم تفكيك البرامج والآلات والهياكل وغيرها من المنتجات لاستخراج معلومات التصميم منها وفهم كيف تعمل بحيث يمكن إعادة إنشاءها بالاستفادة من المعلومات التي تم جمعها سابقاً من خلال عملية التفكيك، وغالباً ما يتضمن تفكيك المكونات الفردية للمنتجات الأكبر حجماً لفهم آلية العمل والأجزاء الداخلية. تدخل الهندسية العكسية وبقوة في العديد من المجالات ومنها البرمجيات Software، تصنيع الآلات الفيزيائية Physical machinery manufacturing، التقنيات العسكرية Military technology والوظائف البيولوجيةBiological functions التي تساعدنا في فهم آلية عمل الجينات.
تختلف مراحل الهندسة العكسية باختلاف الأغراض، لكنها دائماً ما تمر بثلاث مراحل رئيسية على وجه العموم وهي بالترتيب:
- استخلاص المعلومات Information extraction: علينا في البداية جمع المعلومات حول التصميم ومعرفة كيف تتناسب القطع معاً وآلية العمل، وفي مجال البرمجيات لتنفيذ هذه الخطوة نحتاج إلى أدوات مساعدة كبرنامج Disassembler لتقسيم البرنامج أو الكود إلى أجزائه الأساسية لفهم آلية عمله.
- النمذجة Modeling: يتم تلخيص المعلومات التي تم جمعها في نموذج مفاهيمي مما يساعد في تصميم أنظمة أو كائنات جديدة.
- الاستعراض Review: هنا يتم مراجعة النموذج واختباره في سيناريوهات متعددة للتأكد من أنه تجريد واقعي للشكل الأصلي، وفي هندسة البرمجيات تتلخص هذه الخطوة في اختبار البرنامج من أجل فحص وظائفه.
دائماً ما تتم عملية التفكيك على منتج فيزيائي لفحص آلياته الداخلية فتبدأ العملية بتحليل أبعاد وسمات وقياسات المنتج الأصلي، لذلك يستخدم المهندسون اليوم تقنيات المسح ثلاثي الأبعاد لإجراء القياسات باستخدام الماسحات الضوئية ثلاثية الأبعاد التي تمكّن من قراءة دقيقة للمنتج، ثم تدخل القياسات في برامج الـ CAD أو Computer-aided Design وهو أسلوب هندسي عكسي لإعادة إنشاء جزء مصنع عندما لا يكون المنتج الأصلي متاح مما يساعد في عملية النمذجة.
تتم العديد من عمليات الاحتيال بين الشركات والمبرمجين من خلال الهندسة العكسية لأنها تتيح إيجاد كود المصدر Source code من خلال تتبع البرامج ويتمكن الأشخاص ذوي الخبرة من القدرة على الوصول لكود المصدر وتعديله حتى مع عدم حصولهم على إذن الوصول أو عدم الحفاظ على حقوق النشر وهذا ما يعتبر غير قانوني، فعندما يتم رفع دعوى تتعلق بالهندسة العكسية يجب ان يثبت المالك الأصلي أنه من أنشأ المنتج أو الكائن أو يمتلك حقوق نشر أو براءة إختراع وكذلك يجب على من يستخدم الهندسة العكسية أن يثبت أنه حصل على المعلومات بطرق قانونية.
تتعدد الأمثلة والاستخدامات فالهندسة العكسية سهّلت علينا واختصرت الوقت والمال وضمنت استمرار العديد من الوظائف والصناعات وجعلت معرفة الماضي والأصل ممكناً، كما أنها مجال معقد من الأخلاق والقانون وإن انتشار تكنولوجيا المعلومات بشكل واسع في العديد من قطاعات الحياة اليومية يجعل الأمر أكثر تعقيداً وخاصة ً فيما يتعلق بموضوع الجزم في شرعية القيام بالهندسة العكسية أحياناً.