مهندسی معکوس یا Reverse Engineering یکی از واژه هایی است که طی دهه های اخیر بسیار بیشتر از گذشته مورد استفاده قرار میگیرد و حتی در ادبیات عمومی و اجتماعی هم وارد شده است.
مهندسی معکوسی به علمی گفته میشود که از پاسخ به سؤال میرسند و در واقع فرایند کشف اصول تکنولوژیکی یک دستگاه، شیء یا یک سیستم میباشد که از طریق تجزیه و تحلیل ساختار و عملکرد آن حاصل میشود. در اکثر مواقع موضوع مورد بررسی یک دستگاه مکانیکی، الکتریکی، برنامه نرمافزاری یا یک ماده بیولوژیکی یا شیمیایی میباشد که بدون داشتن دانش قبلی و تنها با جداسازی اجزا و تجزیه و تحلیل شیوه عملکرد آن، سعی در ایجاد یک نمونه جدید از آن میگردد. مهندسی معکوس بهطور عمده در استفادههای تجاری و نظامی به کار میرود و هدف آن استنباط پارامترهای طراحی یک محصول موجود بدون داشتن دانش کافی در زمینه تولید آن محصول و فقط با پیمودن فرایند معکوس و بهکارگیری تکنیکهای مشابه میباشد.
اما در تعریف دقیق تر مهندسی معکوس نرم افزار (SRE) فرایند تجزیه و تحلیل یک سیستم نرم افزاری ، به طور کلی یا جزئی ، به منظور استخراج اطلاعات و نیز طراحی و پیاده سازی مجدد آن می باشد. همچنین از مهارت های مهندسی معکوس برای تشخیص و خنثی سازی ویروس ها و بدافزارها، بررسی امنیت نرم افزار و خطایابی نرم افزار استفاده می شود.
دلایل استفاده از مهندسی معکوس در حوزه نرم افزار
وجود اسناد ناکافی از طراحی اصلی محصول
برای تقویت ویژگی های خوب یک محصول جهت استفاده بلندمدت از محصول
برای تجزیه و تحلیل ویژگی های خوب و بد محصولات رقبا
نوسازی و آنالیز و نگهداری محصولات
تلاش برای استخراج کدهای سطح بالای یک برنامه نرم افزاری بر اساس کدهای اسمبلی محصول نهایی
وقتی ارتش یا سازمانهای نظامی یک کشور، محصولات نظامی کشور دیگر را به دست میآورند و میکوشند با مهندسی معکوس به دانش و فن آوری آن کشور دست یابند یا لااقل توان علمی و فنی سازنده را ارزیابی کنند.
وقتی یک برنامه نویس، به جای طراحی سیستم و برنامه نویسی از نقطه صفر، یک برنامه یا سیستم موفق را مورد تجزیه و تحلیل قرار میدهد و سعی میکند اجزای آن را بازتولید کند.
رفع محدودیت های نرم افزاری