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

مفهوم مهندسی معکوس‌

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

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

گاهی نیز به‌منظور ایجاد تغییرات در سیستمی است که طرح و اجزای اولیه آن در دسترس نیست. این کار که به‌منظور مطابقت سیستم جدید با خواسته‌ها و نیازهای جدید صورت می‌گیرد، مهندسی دوباره(Reengineering)  نیز نامیده می‌شود. همچنین با این کار می‌توان مشکلات موجود در یک سیستم را ردیابی و بررسی کرد: طی بررسی یک سیستم می‌توان به مستندسازی آن سیستم نیز پرداخت تا با ایجاد درک بهتر از سیستم در جهت بهبود آن گام برداشت.

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

در ادامه تلاش خواهیم کرد که به چند مورد از کاربردهای مهندسی معکوس در شاخه نرم‌افزار اشاره‌ای کوتاه داشته باشیم تا هدف از این شاخه از علم رایانه‌ نیز تا حدی روش شود.

کشف رمزها و کدها

باید توجه داشت که از هر ابزاری می‌توان در راه خوب یا بد استفاده کرد. این که شخص از مهارت خود و ابزارهای موجود استفاده نادرست کند، خود مسوول آن کار خواهد بود.

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

معمولا در شکستن رمزها از تکنیک‌های مهندسی معکوس استفاده می‌شود. بدون استفاده از این تکنیک‌ها اگر بخواهیم اقدام به کشف رمز کنیم،چاره‌ای جز حدس، آزمون و خطا و یا بررسی کلیه حالت‌های ممکن (Brute force) نخواهیم داشت که کار بس زمان‌گیر، دشوار و طاقت‌فرساست.

مبارزه با ویروس‌ها

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

تغییر در کار یا ظاهر نرم‌افزار

ممکن است نرم‌افزاری در اختیار داشته باشیم که کدهای برنامه‌نویسی آن در دسترس ما نباشد و بخواهیم تغییرکوچکی در روند اجرای برنامه اعمال کنیم. همچنین ممکن است بخواهیم تغییری در ظاهر برنامه ایجاد کنیم. حتی برخی اوقات لازم است قابلیت‌های جدیدی به یک نرم‌افزار اضافه شود و یا اشکالات موجود در آن رفع شوند. در کلیه این موارد نیز جز تکنیک‌های مهندسی معکوس، راه دیگری نخواهیم داشت. اغلب این مسایل در مواقعی رخ می‌دهد که کد برنامه در دسترس نبوده و شرکت تولیدکننده نرم‌ افزار نیز دیگر از آن پشتیبانی نمی‌کند.

یکی از این مشکلات، مشکل سال‌2000  (Y2K) بود که شاید آن را به‌خاطر داشته باشید. این مشکل با آغاز هزار جدید به‌وجود آمد و در آن زمان بسیاری از سازمان‌ها و کاربران در حال استفاده از نرم‌افزارهایی بودند که شاید سال‌ها با آن کار کرده بودند و مشکلات آن را رفع کرده و اطلاعات زیادی در آنها جمع‌آوری کرده بودند. بسیاری از این نرم‌‌افزارها به‌علت آن که قدیمی شده بودند، دیگر از جانب شرکت تولیدکننده، پشتیبانی نمی‌شدند و یا شرکت‌ها به‌طور کامل منحل شده‌ بودند. اما همچنان برای آن سازمان پرکاربرد بودند. با مطرح شدن مشکل سال 2000، شرکت‌ها و سازمان‌های زیادی بار مالی زیادی را برای رفع این مشکل با استفاده از تکنیک‌های مهندسی معکوس، متحمل شدند.

طراحی مجدد

یکی از کاربردها و زمینه‌های فعالیت برای مهندسی معکوس که بسیاری مفید است، طراحی مجدد یک نرم‌افزار بر اساس یک نمونه موجود است. این کار معمولا به‌دلایل زیادی، از جمله تغییر سیستم عامل، صورت می‌گیرد و کاری بسیار پیچیده و دقیق است که معمولا به‌صورت کار گروهی و توسط شرکت‌های بزرگ انجام می‌شود.

مراحل این کار که به دو قسمت مهندسی معکوس و مهندسی مستقیم ‌ (Forward Engineering)تقسیم می‌شود، به این صورت است که ابتدا کلیه ایده‌ها و روش‌های پیاده‌سازی نرم‌افزار مورد نظر تشخیص داده شده و سپس با توجه به اطلاعات به‌دست آمده، نرم‌افزار جدیدی طراحی و پیاده‌سازی می‌شود. شاید این یکی از دشوارترین و مفیدترین زمینه‌های کار در مهندسی معکوس باشد.

مستندسازی‌

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

Crack

یکی از کاربردهای غیرقانونی مهندسی معکوس، کرک‌کردن یک نرم‌افزار است. معمولا شرکت‌های تولیدکنده نرم‌افزار، کل امکانات مربوط به برنامه را در بسته‌ نرم‌افزاری قرار می‌دهند.

اما برای مجبور کردن کاربران به خرید برنامه، برای آن محدودیت زمانی می‌گذارند. افراد بسیاری هستند که با نفوذ به این نرم‌افزارها، محدودیت آن را برداشته و یا کد تولید و تشخیص کلید را از درون برنامه استخراج می‌کنند و در اختیار دیگران قرار می‌دهند.

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

پارسا ستوده‌نیا

منبع :‌کلیک


دسته ها : برنامه‌نویسی
شنبه نهم 6 1387
X