آبجی
16th December 2009, 12:21 PM
مفهوم مهندسي معكوس
به هر گونه تلاش و فعاليت در راستاي رسيدن از مراحل بالاتر طراحي و توليد به يك يا چند مرحله پايينتر، مهندسي معكوس گويند. اين مفهوم در تمامي شاخهها و زمينههاي مهندسي از جمله نرمافزار و سختافزار مطرح است. براي مثال دستيابي به ايدهها و روشهاي توليد يك محصول، از نمونه محصول نهايي نمونهاي از مهندسي معكوس است.
يكي از اهداف مهندسي معكوس، شناسايي اجزاي سازنده يك محصول و روابط بين آنهاست كه گاهي از آن اجزا براي ساخت يك محصول جديد نيز بهره گرفته ميشود.
گاهي نيز بهمنظور ايجاد تغييرات در سيستمي است كه طرح و اجزاي اوليه آن در دسترس نيست. اين كار كه بهمنظور مطابقت سيستم جديد با خواستهها و نيازهاي جديد صورت ميگيرد، مهندسي دوباره (Reengineering) نيز ناميده ميشود. همچنين با اين كار ميتوان مشكلات موجود در يك سيستم را رديابي و بررسي كرد: طي بررسي يك سيستم ميتوان به مستندسازي آن سيستم نيز پرداخت تا با ايجاد درك بهتر از سيستم در جهت بهبود آن گام برداشت.
البته بايد توجه داشت كه به كارگيري فنون مهندسي معكوس در هر رشتهاي، دشواريها و مشكلات خاص خود را دارد و به ابزار و امكانات خاصي نياز دارد و گاهي با وجود كامل بودن ابزار و امكانات ممكن است نتيجه مطلوب نهايي حاصل نشود. بنابراين در بهكارگيري اين فنون بايد تمامي هزينهها و زمان مصرفي و نتيجه نهايي در نظر گرفته شوند. بهعبارتي بايد توجه داشت كه ميزان هزينه مورد نظر در مقابل دسترسي به چه هدفي صرف ميشود.
در ادامه تلاش خواهيم كرد كه به چند مورد از كاربردهاي مهندسي معكوس در شاخه نرمافزار اشارهاي كوتاه داشته باشيم تا هدف از اين شاخه از علم رايانه نيز تا حدي روش شود.
كشف رمزها و كدها
بايد توجه داشت كه از هر ابزاري ميتوان در راه خوب يا بد استفاده كرد. اين كه شخص از مهارت خود و ابزارهاي موجود استفاده نادرست كند، خود مسوول آن كار خواهد بود.
معمولا كشف كدها يا شكستن رمز، ذهن را به سمت اعمال غيرقانوني ميبرد. كشف كدها و رمزها و كدهاي يك نرمافزار بانك از جمله اين موارد است. اما شكستن رمز هميشه بد و غيرقانوني نيست. اغلب اطلاعات رد و بدل شده بين مجرمان نيز رمزگذاري ميشود و براي جلوگيري از فعاليت آنها، پليس بايد اطلاعات بهدست آمده از آنها را كشف رمز كند. بايد توجه داشت كه معمولا عمل رمزگشايي با استفاده از كليد صورت ميگيرد و در صورت در دسترس نبودن كليد، ناچار به شكستن رمز يا كشف رمز هستيم. بنابراين خوب است در بهكارگيري اين اصطلاحات دقت كنيم.
معمولا در شكستن رمزها از تكنيكهاي مهندسي معكوس استفاده ميشود. بدون استفاده از اين تكنيكها اگر بخواهيم اقدام به كشف رمز كنيم،چارهاي جز حدس، آزمون و خطا و يا بررسي كليه حالتهاي ممكن (Brute force) نخواهيم داشت كه كار بس زمانگير، دشوار و طاقتفرساست.
مبارزه با ويروسها
مبارزه با ويروسها و كشف نرمافزارهاي مخرب، از ديگر كاربردهاي مهندسي معكوس است. معمولا نويسندگان ويروسها و توليدكنندگان نرمافزارهاي مخرب از زبانهاي سطح پايين و اغلب از زبان اسمبلي استفاده ميكنند. دليل اين امر نيز آن است كه اولا ويروسها قصد دارند به نقاطي از سيستم دسترسي پيدا كنند كه شايد زبانهاي سطح بالا امكان دستيابي به آن را نداشته باشند. در ثاني ميخواهند تا جاي ممكن اندازه ويروس كوچك بوده و سرعت اجراي بالايي داشته باشد. پس از نوشتن ويروس آن را به كد ماشين تبديل كرده و اجرا ميكنند. حال براي اينكه بتوان از كاركرد آن ويروس مطلع شده و جلوي فعاليت آن را بگيريم، بايد با استفاده از تكنيكهاي مهندسي معكوس، به كد آن دسترسي پيدا كنيم. در طراحي نرمافزارهاي ضدويروس، با استفاده از تكنيكهاي گفته شده، به نشانههاي مختص هر ويروس پي برده ميشود و با توجه به طريقه عمل آن ويروس، راههاي بازگرداني تغييرات طراحي شده و در نهايت راه از بين بردن آن ويروس تعيين ميشود.
تغيير در كار يا ظاهر نرمافزار
ممكن است نرمافزاري در اختيار داشته باشيم كه كدهاي برنامهنويسي آن در دسترس ما نباشد و بخواهيم تغييركوچكي در روند اجراي برنامه اعمال كنيم. همچنين ممكن است بخواهيم تغييري در ظاهر برنامه ايجاد كنيم. حتي برخي اوقات لازم است قابليتهاي جديدي به يك نرمافزار اضافه شود و يا اشكالات موجود در آن رفع شوند. در كليه اين موارد نيز جز تكنيكهاي مهندسي معكوس، راه ديگري نخواهيم داشت. اغلب اين مسايل در مواقعي رخ ميدهد كه كد برنامه در دسترس نبوده و شركت توليدكننده نرم افزار نيز ديگر از آن پشتيباني نميكند.
يكي از اين مشكلات، مشكل سال 2000 (Y2K) بود كه شايد آن را بهخاطر داشته باشيد. اين مشكل با آغاز هزاره جديد بهوجود آمد و در آن زمان بسياري از سازمانها و كاربران در حال استفاده از نرمافزارهايي بودند كه شايد سالها با آن كار كرده بودند و مشكلات آن را رفع كرده و اطلاعات زيادي در آنها جمعآوري كرده بودند. بسياري از اين نرمافزارها بهعلت آن كه قديمي شده بودند، ديگر از جانب شركت توليدكننده، پشتيباني نميشدند و يا شركتها بهطور كامل منحل شده بودند. اما همچنان براي آن سازمان پركاربرد بودند. با مطرح شدن مشكل سال 2000، شركتها و سازمانهاي زيادي بار مالي زيادي را براي رفع اين مشكل با استفاده از تكنيكهاي مهندسي معكوس، متحمل شدند.
طراحي مجدد
يكي از كاربردها و زمينههاي فعاليت براي مهندسي معكوس كه بسيار مفيد است، طراحي مجدد يك نرمافزار بر اساس يك نمونه موجود است. اين كار معمولا بهدلايل زيادي، از جمله تغيير سيستم عامل، صورت ميگيرد و كاري بسيار پيچيده و دقيق است كه معمولا بهصورت كار گروهي و توسط شركتهاي بزرگ انجام ميشود.
مراحل اين كار كه به دو قسمت مهندسي معكوس و مهندسي مستقيم ( (Forward Engineeringتقسيم ميشود، به اين صورت است كه ابتدا كليه ايدهها و روشهاي پيادهسازي نرمافزار مورد نظر تشخيص داده شده و سپس با توجه به اطلاعات بهدست آمده، نرمافزار جديدي طراحي و پيادهسازي ميشود. شايد اين يكي از دشوارترين و مفيدترين زمينههاي كار در مهندسي معكوس باشد.
مستندسازي
براي برنامهها و يا توابع كتابخانهاي كه بدون كد برنامهنويسي عرضه ميشودند معمولا مستنداتي نيز وجود ندارد. مانند توابع محلي ويندوز NT كه شامل چندين هزار تابع است كه براي آنها جز چند صفحه اطلاعات ابتدايي، مستنداتي از سوي شركت سازنده يعني مايكروسافت ارايه نشده است. براي مستندسازي اينگونه برنامهها يا توابع نيز، تكنيكهاي مهندسي معكوس چارهساز خواهند بود.
Crack
يكي از كاربردهاي غيرقانوني مهندسي معكوس، كرككردن يك نرمافزار است. معمولا شركتهاي توليدكنده نرمافزار، كل امكانات مربوط به برنامه را در بسته نرمافزاري قرار ميدهند.
اما براي مجبور كردن كاربران به خريد برنامه، براي آن محدوديت زماني ميگذارند. افراد بسياري هستند كه با نفوذ به اين نرمافزارها، محدوديت آن را برداشته و يا كد توليد و تشخيص كليد را از درون برنامه استخراج ميكنند و در اختيار ديگران قرار ميدهند.
به اين ترتيب كاربران بدون پرداخت هزينه، از نرمافزار مورد نظر براي مدت زمان نامحدود استفاده ميكنند. البته همه جاي دنيا افرادي وجود دارند كه براي حمايت از توليدكنندگان نرمافزار از نسخههاي كركشده استفاده نكرده و اصل آن را خريداري ميكنند. مسلما كاربردهاي مهندسي معكوس به همين چند مورد خلاصه نميشود و با توجه به شرايط و زمانهاي مختلف ميتواند كاربردهاي ديگر و حتي كاربردهاي ديگري نيز داشته باشد.
به هر گونه تلاش و فعاليت در راستاي رسيدن از مراحل بالاتر طراحي و توليد به يك يا چند مرحله پايينتر، مهندسي معكوس گويند. اين مفهوم در تمامي شاخهها و زمينههاي مهندسي از جمله نرمافزار و سختافزار مطرح است. براي مثال دستيابي به ايدهها و روشهاي توليد يك محصول، از نمونه محصول نهايي نمونهاي از مهندسي معكوس است.
يكي از اهداف مهندسي معكوس، شناسايي اجزاي سازنده يك محصول و روابط بين آنهاست كه گاهي از آن اجزا براي ساخت يك محصول جديد نيز بهره گرفته ميشود.
گاهي نيز بهمنظور ايجاد تغييرات در سيستمي است كه طرح و اجزاي اوليه آن در دسترس نيست. اين كار كه بهمنظور مطابقت سيستم جديد با خواستهها و نيازهاي جديد صورت ميگيرد، مهندسي دوباره (Reengineering) نيز ناميده ميشود. همچنين با اين كار ميتوان مشكلات موجود در يك سيستم را رديابي و بررسي كرد: طي بررسي يك سيستم ميتوان به مستندسازي آن سيستم نيز پرداخت تا با ايجاد درك بهتر از سيستم در جهت بهبود آن گام برداشت.
البته بايد توجه داشت كه به كارگيري فنون مهندسي معكوس در هر رشتهاي، دشواريها و مشكلات خاص خود را دارد و به ابزار و امكانات خاصي نياز دارد و گاهي با وجود كامل بودن ابزار و امكانات ممكن است نتيجه مطلوب نهايي حاصل نشود. بنابراين در بهكارگيري اين فنون بايد تمامي هزينهها و زمان مصرفي و نتيجه نهايي در نظر گرفته شوند. بهعبارتي بايد توجه داشت كه ميزان هزينه مورد نظر در مقابل دسترسي به چه هدفي صرف ميشود.
در ادامه تلاش خواهيم كرد كه به چند مورد از كاربردهاي مهندسي معكوس در شاخه نرمافزار اشارهاي كوتاه داشته باشيم تا هدف از اين شاخه از علم رايانه نيز تا حدي روش شود.
كشف رمزها و كدها
بايد توجه داشت كه از هر ابزاري ميتوان در راه خوب يا بد استفاده كرد. اين كه شخص از مهارت خود و ابزارهاي موجود استفاده نادرست كند، خود مسوول آن كار خواهد بود.
معمولا كشف كدها يا شكستن رمز، ذهن را به سمت اعمال غيرقانوني ميبرد. كشف كدها و رمزها و كدهاي يك نرمافزار بانك از جمله اين موارد است. اما شكستن رمز هميشه بد و غيرقانوني نيست. اغلب اطلاعات رد و بدل شده بين مجرمان نيز رمزگذاري ميشود و براي جلوگيري از فعاليت آنها، پليس بايد اطلاعات بهدست آمده از آنها را كشف رمز كند. بايد توجه داشت كه معمولا عمل رمزگشايي با استفاده از كليد صورت ميگيرد و در صورت در دسترس نبودن كليد، ناچار به شكستن رمز يا كشف رمز هستيم. بنابراين خوب است در بهكارگيري اين اصطلاحات دقت كنيم.
معمولا در شكستن رمزها از تكنيكهاي مهندسي معكوس استفاده ميشود. بدون استفاده از اين تكنيكها اگر بخواهيم اقدام به كشف رمز كنيم،چارهاي جز حدس، آزمون و خطا و يا بررسي كليه حالتهاي ممكن (Brute force) نخواهيم داشت كه كار بس زمانگير، دشوار و طاقتفرساست.
مبارزه با ويروسها
مبارزه با ويروسها و كشف نرمافزارهاي مخرب، از ديگر كاربردهاي مهندسي معكوس است. معمولا نويسندگان ويروسها و توليدكنندگان نرمافزارهاي مخرب از زبانهاي سطح پايين و اغلب از زبان اسمبلي استفاده ميكنند. دليل اين امر نيز آن است كه اولا ويروسها قصد دارند به نقاطي از سيستم دسترسي پيدا كنند كه شايد زبانهاي سطح بالا امكان دستيابي به آن را نداشته باشند. در ثاني ميخواهند تا جاي ممكن اندازه ويروس كوچك بوده و سرعت اجراي بالايي داشته باشد. پس از نوشتن ويروس آن را به كد ماشين تبديل كرده و اجرا ميكنند. حال براي اينكه بتوان از كاركرد آن ويروس مطلع شده و جلوي فعاليت آن را بگيريم، بايد با استفاده از تكنيكهاي مهندسي معكوس، به كد آن دسترسي پيدا كنيم. در طراحي نرمافزارهاي ضدويروس، با استفاده از تكنيكهاي گفته شده، به نشانههاي مختص هر ويروس پي برده ميشود و با توجه به طريقه عمل آن ويروس، راههاي بازگرداني تغييرات طراحي شده و در نهايت راه از بين بردن آن ويروس تعيين ميشود.
تغيير در كار يا ظاهر نرمافزار
ممكن است نرمافزاري در اختيار داشته باشيم كه كدهاي برنامهنويسي آن در دسترس ما نباشد و بخواهيم تغييركوچكي در روند اجراي برنامه اعمال كنيم. همچنين ممكن است بخواهيم تغييري در ظاهر برنامه ايجاد كنيم. حتي برخي اوقات لازم است قابليتهاي جديدي به يك نرمافزار اضافه شود و يا اشكالات موجود در آن رفع شوند. در كليه اين موارد نيز جز تكنيكهاي مهندسي معكوس، راه ديگري نخواهيم داشت. اغلب اين مسايل در مواقعي رخ ميدهد كه كد برنامه در دسترس نبوده و شركت توليدكننده نرم افزار نيز ديگر از آن پشتيباني نميكند.
يكي از اين مشكلات، مشكل سال 2000 (Y2K) بود كه شايد آن را بهخاطر داشته باشيد. اين مشكل با آغاز هزاره جديد بهوجود آمد و در آن زمان بسياري از سازمانها و كاربران در حال استفاده از نرمافزارهايي بودند كه شايد سالها با آن كار كرده بودند و مشكلات آن را رفع كرده و اطلاعات زيادي در آنها جمعآوري كرده بودند. بسياري از اين نرمافزارها بهعلت آن كه قديمي شده بودند، ديگر از جانب شركت توليدكننده، پشتيباني نميشدند و يا شركتها بهطور كامل منحل شده بودند. اما همچنان براي آن سازمان پركاربرد بودند. با مطرح شدن مشكل سال 2000، شركتها و سازمانهاي زيادي بار مالي زيادي را براي رفع اين مشكل با استفاده از تكنيكهاي مهندسي معكوس، متحمل شدند.
طراحي مجدد
يكي از كاربردها و زمينههاي فعاليت براي مهندسي معكوس كه بسيار مفيد است، طراحي مجدد يك نرمافزار بر اساس يك نمونه موجود است. اين كار معمولا بهدلايل زيادي، از جمله تغيير سيستم عامل، صورت ميگيرد و كاري بسيار پيچيده و دقيق است كه معمولا بهصورت كار گروهي و توسط شركتهاي بزرگ انجام ميشود.
مراحل اين كار كه به دو قسمت مهندسي معكوس و مهندسي مستقيم ( (Forward Engineeringتقسيم ميشود، به اين صورت است كه ابتدا كليه ايدهها و روشهاي پيادهسازي نرمافزار مورد نظر تشخيص داده شده و سپس با توجه به اطلاعات بهدست آمده، نرمافزار جديدي طراحي و پيادهسازي ميشود. شايد اين يكي از دشوارترين و مفيدترين زمينههاي كار در مهندسي معكوس باشد.
مستندسازي
براي برنامهها و يا توابع كتابخانهاي كه بدون كد برنامهنويسي عرضه ميشودند معمولا مستنداتي نيز وجود ندارد. مانند توابع محلي ويندوز NT كه شامل چندين هزار تابع است كه براي آنها جز چند صفحه اطلاعات ابتدايي، مستنداتي از سوي شركت سازنده يعني مايكروسافت ارايه نشده است. براي مستندسازي اينگونه برنامهها يا توابع نيز، تكنيكهاي مهندسي معكوس چارهساز خواهند بود.
Crack
يكي از كاربردهاي غيرقانوني مهندسي معكوس، كرككردن يك نرمافزار است. معمولا شركتهاي توليدكنده نرمافزار، كل امكانات مربوط به برنامه را در بسته نرمافزاري قرار ميدهند.
اما براي مجبور كردن كاربران به خريد برنامه، براي آن محدوديت زماني ميگذارند. افراد بسياري هستند كه با نفوذ به اين نرمافزارها، محدوديت آن را برداشته و يا كد توليد و تشخيص كليد را از درون برنامه استخراج ميكنند و در اختيار ديگران قرار ميدهند.
به اين ترتيب كاربران بدون پرداخت هزينه، از نرمافزار مورد نظر براي مدت زمان نامحدود استفاده ميكنند. البته همه جاي دنيا افرادي وجود دارند كه براي حمايت از توليدكنندگان نرمافزار از نسخههاي كركشده استفاده نكرده و اصل آن را خريداري ميكنند. مسلما كاربردهاي مهندسي معكوس به همين چند مورد خلاصه نميشود و با توجه به شرايط و زمانهاي مختلف ميتواند كاربردهاي ديگر و حتي كاربردهاي ديگري نيز داشته باشد.