مهندسی معکوس (به انگلیسی: Reverse Engineering) به علمی گفته می شود که از پاسخ به سؤال می رسند و در واقع فرایند کشف اصول تکنولوژیکی یک دستگاه، شیئ یا یک سیستم می باشد که از طریق تجزیه و تحلیل ساختار و عملکرد آن حاصل می شود. در اکثر مواقع موضوع مورد بررسی یک دستگاه مکانیکی، الکتریکی، برنامه نرم افزاری یا یک ماده بیولوژیکی یا شیمیایی می باشد که بدون داشتن دانش قبلی و تنها با جداسازی اجزا و تجزیه و تحلیل شیوه عملکرد آن، سعی در ایجاد یک نمونه جدید از آن می گردد.مهندسی معکوس به طور عمده در استفاده های تجاری و نظامی به کار می رود و هدف آن استنباط پارامترهای طراحی یک محصول موجود بدون داشتن دانش کافی در زمینه تولید آن محصول و فقط با پیمودن فرایند معکوس و به کارگیری تکنیک های مشابه می باشد.
نوسازی نرم افزار: مهندسی معکوس به صورت کلی برای درک وضعیت موجود برنامه مورد نیاز است. این عمل به منظور برآورد درست کوشش های مورد نیاز برای مهاجرت اطلاعات سیستم به یک وضعیت دلخواه است.
نگهداری نرم افزار: مهندسی معکوس نرم افزار می تواند مستندات لازم را برای درک وضعیت فعلی نرم افزار سیستم فراهم کند.
آنالیز محصول: برای بررسی اینکه یک محصول چه گونه کار می کند، از چه اجزایی تشکیل شده، برآورد هزینه ها و مشخص کردن حقوق مالکیت بالقوه.
بازبینی امنیتی
بدست آوردن اطلاعات حساس به کمک دیس اسمبل و تجزیه و تحلیل طراحی اجزای سیستم
حذف محافظ کپی، دور زدن محدودیت های دسترسی.
ایجاد کپی های بدون مجوز / تأیید نشده.
اهداف علمی / آموزشی.
در عمل دو نوع عمده از مهندسی معکوس وجود دارد. در حالت اول، سورس کد برای برنامه وجود دارد، اما سطوح بالاتری از جنبه های این برنامه، شاید مستندات ضعیف یا مستنداتی که دیگر اعتبار ندارد، مشاهده می شوند. در حالت دوم، سورس کدی برای برنامه موجود نیست و هرگونه تلاشی در جهت استخراج یک سورس کد ممکن برای نرم افزار به عنوان مهندسی معکوس در نظر گرفته شده است. بسیاری از مردم با استفاده دوم از این اصطلاح آشنا هستند. مهندسی معکوس نرم افزار برای جلوگیری از نقض کپی رایت می تواند از تکنیک طراحی اتاق پاک استفاده کند.
این فرایند برخی مواقع مهندسی معکوس کد یا(Reverse Code Engineering) نامیده می شود. به عنوان یک مثال، دیکامپایل کردن باینری برای پلتفرم جاوا از طریق برنامه JAD می تواند انجام شود. یک مثال از گروهی که مهندسی معکوس نرم افزار را برای لذت بردن (و انتشار کدهای ثبت) انجام می دهند CORE هست که مخفف «چالش مهندسی معکوس» است. مهندسی معکوس نرم افزار در قانون کپی رایت ایالات متحده در صورت استفاده منصفانه محافظت می شود. برنامه Samba که به سیستم های غیر مایکروسافت ویندوز اجازه می دهد به اشتراک فایل با سیستم های ویندوزی بپردازند یک مثال کلاسیک از مهندسی معکوس نرم افزار هست. به این خاطر پروژه Samba باید به مهندسی معکوس اطلاعات منتشر نشده در مورد چگونگی به اشتراک گذاری فایل ویندوز می پرداخت، تا که کامپیوترهای غیر ویندوزی بتوانند آن را شبیه سازی کنند. پروژه Wine همین کار را برای API ویندوز و OpenOffice.org این کار را برای فرمت فایل های مایکروسافت آفیس انجام می دهد.
مهندسی معکوس نرم افزار از روش های گوناگونی می تواند بدست آید. سه گروه اصلی مهندسی معکوس نرم افزار عبارتند از:
نوسازی نرم افزار: مهندسی معکوس به صورت کلی برای درک وضعیت موجود برنامه مورد نیاز است. این عمل به منظور برآورد درست کوشش های مورد نیاز برای مهاجرت اطلاعات سیستم به یک وضعیت دلخواه است.
نگهداری نرم افزار: مهندسی معکوس نرم افزار می تواند مستندات لازم را برای درک وضعیت فعلی نرم افزار سیستم فراهم کند.
آنالیز محصول: برای بررسی اینکه یک محصول چه گونه کار می کند، از چه اجزایی تشکیل شده، برآورد هزینه ها و مشخص کردن حقوق مالکیت بالقوه.
بازبینی امنیتی
بدست آوردن اطلاعات حساس به کمک دیس اسمبل و تجزیه و تحلیل طراحی اجزای سیستم
حذف محافظ کپی، دور زدن محدودیت های دسترسی.
ایجاد کپی های بدون مجوز / تأیید نشده.
اهداف علمی / آموزشی.
در عمل دو نوع عمده از مهندسی معکوس وجود دارد. در حالت اول، سورس کد برای برنامه وجود دارد، اما سطوح بالاتری از جنبه های این برنامه، شاید مستندات ضعیف یا مستنداتی که دیگر اعتبار ندارد، مشاهده می شوند. در حالت دوم، سورس کدی برای برنامه موجود نیست و هرگونه تلاشی در جهت استخراج یک سورس کد ممکن برای نرم افزار به عنوان مهندسی معکوس در نظر گرفته شده است. بسیاری از مردم با استفاده دوم از این اصطلاح آشنا هستند. مهندسی معکوس نرم افزار برای جلوگیری از نقض کپی رایت می تواند از تکنیک طراحی اتاق پاک استفاده کند.
این فرایند برخی مواقع مهندسی معکوس کد یا(Reverse Code Engineering) نامیده می شود. به عنوان یک مثال، دیکامپایل کردن باینری برای پلتفرم جاوا از طریق برنامه JAD می تواند انجام شود. یک مثال از گروهی که مهندسی معکوس نرم افزار را برای لذت بردن (و انتشار کدهای ثبت) انجام می دهند CORE هست که مخفف «چالش مهندسی معکوس» است. مهندسی معکوس نرم افزار در قانون کپی رایت ایالات متحده در صورت استفاده منصفانه محافظت می شود. برنامه Samba که به سیستم های غیر مایکروسافت ویندوز اجازه می دهد به اشتراک فایل با سیستم های ویندوزی بپردازند یک مثال کلاسیک از مهندسی معکوس نرم افزار هست. به این خاطر پروژه Samba باید به مهندسی معکوس اطلاعات منتشر نشده در مورد چگونگی به اشتراک گذاری فایل ویندوز می پرداخت، تا که کامپیوترهای غیر ویندوزی بتوانند آن را شبیه سازی کنند. پروژه Wine همین کار را برای API ویندوز و OpenOffice.org این کار را برای فرمت فایل های مایکروسافت آفیس انجام می دهد.
مهندسی معکوس نرم افزار از روش های گوناگونی می تواند بدست آید. سه گروه اصلی مهندسی معکوس نرم افزار عبارتند از:
wiki: مهندسی معکوس