مهندسی معکوس یا Reverse Engineering


orinag

به طور کلی، دو نوع مهندسی وجود دارد مهندسی مستقیم (forward engineering) و مهندسی معکوس (reverse engineering) مهندسی مستقیم، فرآیند حرکت سنتی از مفاهیم انتزاعی سطح بالا و طراحی های منطقی به اجرای فیزیکی یک سامانه است.

اگر چه بر اساس نوع کاربرد و رشته ای که در مورد آن صحبت می کنیم، معنا و مفهوم مهندسی معکوس تفاوت خواهد داشت، اما شاید بتوان تعریف زیر را به عنوان یک تعریف مختصر و مفید از مهندسی معکوس پذیرفت:

به علمی گفته می شود که از پاسخ به سؤال می رسند و در واقع فرایند کشف اصول تکنولوژیکی یک دستگاه، شیء یا یک سیستم می باشد که از طریق تجزیه و تحلیل ساختار و عملکرد آن حاصل می شود. در اکثر مواقع بدون داشتن دانش قبلی و تنها با جداسازی اجزا و تجزیه و تحلیل شیوه عملکرد آن، سعی در ایجاد یک نمونه جدید از آن می‌ گردد.

دلایل استفاده از مهندسی معکوس :

- نوسازی نرم افزار: مهندسی معکوس به صورت کلی برای درک وضعیت موجود برنامه مورد نیاز است. این عمل به منظور برآورد درست کوشش های مورد نیاز برای مهاجرت اطلاعات سیستم به یک وضعیت دلخواه است.

- نگهداری نرم افزار: مهندسی معکوس نرم افزار می تواند مستندات لازم را برای درک وضعیت فعلی نرم افزار سیستم را فراهم کند.
- آنالیز محصول: برای بررسی اینکه یک محصول چگونه کار می کند، از چه اجزایی تشکیل شده، برآورد هزینه ها و مشخص کردن حقوق مالکیت بالقوه.
- بازبینی امنیتی : بدست آوردن اطلاعات حساس به کمک دیس اسمبل و تجزیه و تحلیل طراحی اجزای سیستم.

در اینجا برخی از این کاربردها را مرور می‌کنیم:

- زمانی که یک قطعه‌ی صنعتی، مثلاً یک گیربکس یا موتور، به خوبی کار می‌کند و عملکرد بالایی دارد ممکن است یک شرکت تولیدی تصمیم بگیرد به جای طراحی از نقطه‌ی صفر، آن قطعه را به اجزای کوچک‌تر تفکیک کرده و هر جزء را تحلیل و مدلسازی کند تا به توانایی بازتولید آن قطعه دست پیدا کند.
- وقتی دندان پزشکان بر اساس شکل یک دندان قالب می‌سازند و می‌کوشند مدلی مشابه آن را تولید کنند.
- وقتی یک برنامه نویس، به جای طراحی سیستم و برنامه نویسی از نقطه صفر، یک برنامه یا سیستم موفق را مورد تجزیه و تحلیل قرار می‌دهد و سعی می‌کند اجزای آن را بازتولید کند.
- وقتی ارتش یا سازمان‌های نظامی یک کشور، محصولات نظامی کشور دیگر را به دست می‌آورند و می‌کوشند با مهندسی معکوس به دانش و فن آوری آن کشور دست یابند یا لااقل توان علمی و فنی سازنده را ارزیابی کنند.
- تلاش برای استخراج کدهای سطح بالای یک برنامه نرم افزاری بر اساس کدهای اسمبلی محصول نهایی.