مهندسي معکوس در نرم افزار
نوشته: کيانوش باقري نوع پرست-کارشناس ارشد مهندسي نرم افزار کامپيوتر-دانشگاه آزاد اسلامي واحد گرمسار
مقدمه
مهندسي معکوس در حيطه نرم افزار نيز همان خصوصيات را دارد. در بيشتر موارد برنامه اي که بايد مهندسي معکوس شود، متعلق به رقيب نيست،بلکه از کارهاي چند سال همان شرکت است که احتياج به رسيدگي پيدا کرده است.رازهايي که بايد کشف شوند هنوز معلوم نيستند، زيرا هيچ بخشي از نرم افزار قابل دسترسي نيست. بنابراين کار مهندسي معکوس درباره برنامه، بازگرداندن آن به سطح بالاتر از برنامه به زبان مبدأ آن است.
همانطور که گفته شد مهندسي معکوس يا به اختصارRE زير مجموعه مهندسي مجدد است و تعاريف گوناگوني از آن شده است که به برخي از آنها اشاره مي کنيم.
مهندسي معکوس، يافتن فرآيند ترميم طراحي است که ابزارهايش اطلاعات، معماري و ساختار زير برنامه اي نرم افزار موجود را به دست مي آورند. مهندسي معکوس به معني پروسه اي است که يک مبناي کاربرد مکانيکي دارد که ساختار خودش، توابع و عملکرد آنها را آناليز و طراحي مي کند. ديگر آنکه پروسه اي براي فهميدن يک سيستم و نيز شناختن نحوه کار توابع داخلي آن است. مهندسي معکوس روش توانمندي براي تشريح يک سيستم نرم افزاري است.
برخي اوقات به مهندسي معکوس، معکوس بودن(Reversing)اطلاق مي شود که در حقيقت از هم باز کردن پيچيدگي نرم افزار است. مهندسي معکوس فرآيند تجزيه و تحليل اجزاء سيستم هاي مربوط مي باشد که براي تشخيص مؤلفه ها و ارتباطات بين آنها و ايجاد نمايش سيستم در ساير فرم ها يا در سطح بالايي از انتزاع به ارث مي رسد. علاوه بر آن در اختيار گرفتن ارتباطات تکنيکي و تعامل بين اطلاعات و قوانين داراي کاربردهاي تجاري مي باشد که براي طراحي، بسيار مناسب و مفيد هستند. اهداف کليدي و اساسي در مهندسي معکوس، توليد ديدگاه هاي ديگر، بازيابي اطلاعات گم شده، آشکار سازي تأثيرات جانبي و ترکيب قسمت هاي مجزاي بالايي و سهولت در استفاده مجدد است. تأثير گذاري اين پروسه بر روي پروژه مهندسي معکوس بسيار مفيد و مؤثر است. مهندسي معکوس داراي تغييراتي در سيستم هاي مختلف است که باعث خلق و ايجاد سيستم هاي جديد مي شوند و همه اين سيستم هاي جديد نيز خود داراي عملکرد ويژه اي مي باشند.
چه خوب بود که مهندسي معکوس همان جعبه جادويي اي بود که از يک سر آن ليست درهم ريخته و بدون توضيح يک برنامه را وارد مي کرديم و از سر ديگر جعبه برنامه را با مستندات کامل تحويل مي گرفتيم. متأسفانه اين جعبه جادويي وجود خارجي ندارد. مهندسي معکوس مي تواند اطلاعات طراحي را از دل اصل برنامه بيرون بکشد، اما دراين ميان، درجه درستي اطلاعات، ميزان کامل بودن توضيحات، تعداد نيرو هاي انساني و ابزارها وخط سير نگهداشت، از برنامه اي با برنامه ديگر بسيار تفاوت دارد.
سطح انتزاع اطلاعات به دست آمده از فرآيند مهندسي معکوس و ابزارهايي که بر آن تأثير مي گذارند، به درجه پيشرفته بودن اطلاعات طراحي به دست آمده مربوط مي شود. حالت ايده آل اين موضوع آن است که سطح انتزاع اطلاعات در حد اعلا باشد، يعني مهندسي معکوس بتواند طراحي زير برنامه اي نرم افزار (نزديکترين سطح به زبان ماشين)، اصل برنامه و ساختمان داده ها(با سطح کمتر از انتزاع اطلاعات)، مدل هاي جريان اطلاعات(سطح نسبتاً بالاي انتزاع)و مدل هاي ارتباط داده اي را به دست آورد. هر چه در سطح انتزاع اطلاعات بالاتر رود، اطلاعاتي دراختيار مهندس نرم افزار قرار مي گيرد که کار فهميدن برنامه را براي او ساده تر مي کند.
درجه کامل بودن يک فرآيند مهندسي معکوس به معناي سطح جزئيات ارائه شده توسط يک سطح انتزاع مشخص است. در بسياري از موارد، کامل بودن نرم افزار با سطح انتزاع نسبت عکس دارد. به عنوان مثال، هنگامي که اصل يک برنامه در دسترس هست، راحت تر مي توان طراحي زير برنامه اي آن را به دست آورد. جريا ن هاي ساده اطلاعات را نيز مي توان به دست آورد، اما کار يافتن نمودارهاي کامل جريان اطلاعات، کاري مشکل خواهد بود.
درجه کامل بودن با مقدار تحليل هاي انجام شده، نسبت مستقيم دارد. اين موضوع همچنين به مقدار هماهنگي بين فرد و ابزارهاي خود کار مهندسي معکوس وابسته است. در بسياري از موارد با بالا رفتن سطح خلوص، بايد هماهنگي فرد-ابزار هم افزايش پيدا کند، در غير اين صورت درجه کامل بودن، کاهش پيدا خواهد کرد.
اگر جهت گيري فرآيند مهندسي معکوس يکسويه باشد، همه اطلاعات به دست آمده از نرم افزار، در اختيار مهندس نرم افزار قرار مي گيرد تا آن را در نگهداشت ديگر به کار گيرد. اگر جهت گيري دو سويه باشد، علاوه بر مهندسي معکوس، منجر به شيوه هاي مهندسي مجدد نيز خواهد شد که توسط آن مي نوان يک برنامه قديمي را دوباره توليد کرد.
ايده مهندسي معکوس ما را در مقابل گزينه هاي ي قرار مي دهد که عبارتند از:
1-ساختار برنامه چگونه است و منطق آن چطور ساخته شده است.
2-ما را به اين سمت هدايت مي کند که عملکرد برنامه چگونه است.
3-براي بهره برداري از نرم افزار خوب و مفيد است.
اگر بخواهيم مزاياي اصلي مهندسي معکوس را در قالبي دسته بندي کنيم، از اين قرار هستند:
1-براي فهميدن عماکرد سيستم يک برنامه به کار مي رود.
2-براي پي بردن به سوابق برنامه هاي قابل دسترس مورد استفاده قرار مي گيرد.
3-پروتکل را با نرم افزار مورد نظر به کار مي برد و ساير قسمت هاي شبکه را مطلع مي سازد.
مهندسي معکوس با محصول نهايي شروع مي کند و مفهوم مهندسي را با تجزيه ساختار سيستم و به دست آوردن رابطه بين مؤلفه هاي آن دوباره زنده مي کند. در حقيقت با مستندسازي بهتري که ارائه مي دهد، نشان مي دهد محصول واقعي براساس طرح اصلي چگونه کار مي کند. آن نه تنها براي چک کردن مسير کار استفاده مي شود، بلکه براي چک نمودن موارد مختلف ديگري نيز به کار مي رود که در زير به آنها اشاره مي کنيم:
1-به کمک يک نتيجه گيري ساده؛ به طور کامل بفهمد که محصول چگونه کار مي کند.
2-برنامه موجود را آزمايش مي کند و اشتباهات و محدوديت هارا بررسي مي نمايد.
3-سيستم و محصول بايد سازگار باشند، بنابراين آنها مي توانند داده ها را به اشتراک بگذارند.
4-به محدوديت محصول خودش پي مي برد.
5-آن محصول را چک مي کند تا اينکه کپي ديگري از تکنولوژي خودش باشد.
6-بدون اعتنا به درخواست سرويس مشتري، مستندات عملکرد محصول را ايجاد مي کند.
7-محصول قديمي را با آداپته کردن آنهابا سيستم جديد و چارچوبي متفاوت، به روز رساني مي کند.
فرآيند مهندسي معکوس
تعاريف داده ها و جريان کنترلي به درخواست مقادير عناصر داده اي بخش هاي مختلف کمک مي کنند و هر چيزي را که به آن کمک نمي کند دور مي ريزند. هدف اصلي،محاسبه عملکردهاي بخش هاي فرعي است، بنابراين اين ارزيابي بخش هاي مجزا از هم بسيار دشوار است.
سه روش بخش بندي و جدا سازي وجود دارد: شرايط پايه، شرايط رو به جلو، و شرايط رو به عقب.
جدا سازي براساس شرايط پايه در واقع نوعي عملکرد تجاري مي باشد که مي تواند تحت شرايط مختلف مورد آزمايش قرار گيرد. اين روش بخش بندي براي برنامه ها وبخش هاي کلي و يا شرايط خاص و براي بيان منطقي دامنه بخش بندي يعني از کجا شروع شده و به کجا ختم مي شود، به کار برده مي شود و بسيار مفيد است. همه برنامه هاي قابل دسترسي مي توانند تحت اين جريان کنترلي درآيند و در بخش هاي مختلف نيز مورد استفاده قرار گيرند.
بخش بندي رو به جلو براي کاربردهايي استفاده مي شود که به طور عادي ورودي پروسه را ارزيابي مي کنند.هدف از اين متد، پيدا کردن و يافتن محدوده اي از کدهاست که بستگي به ارزيابي متغيرهاي ورودي دارد. ونيز داراي تأثيرات کاربردي فراواني مي باشند، که اين تأثيرات کاربردي فراواني مي باشند، که اين تأثيرات با توجه به محدوده بخش، متغير است و گزارشات در اين محدوده مي توانند به شکل بالقوه اي از متغير تعريف شده تأثير پذير باشند.گزارشات(Statements)مي توانند در مورد جريان داده، وابستگي کنترل، و يا پروسه بازگشتي تأثير گذار باشند. در بخش رو به جلو، پروسه با نتايج برنامه موجود شروع مي کند.محدوده اي از کدها که بر مقادير متغيرهاي خروجي تأثير دارند، قسمتي از بخش بندي هستند. بامتغيرو محدوده داده شده، اين روش از بخش بندي، گزارشاتي را که مي توانند بطور بالقوه روي مقدار متغير تأثير گذار باشند، برمي گرداند. ابزارهايي نيز براي تجهيزات بخش بندي قابل دسترسي مي باشند، ولي انجام اين فرآيند با استفاده از ابزار وقت گير و بسيار دشوار است.
مراحل مهندسي معکوس
1-بازبيني و شناختن محصول يا مؤلفه سيستم که مهندسي معکوس خواهد بود، در حقيقت تصميم مي گيرد محصول انتخابي براي طرح و پروژه آنها کدام باشد. طرح شامل آيتم هاي منحصر به فرد، قسمت ها و نيز مؤلفه ها و برخي از قسمت ها را شامل مي شود که ممکن است تعداد زيادي از قسمت ها را به عنوان يک موجوديت واحد ارائه دهد.
مستندات اطلاعاتي را که ممکن است چگونگي کارکرد محصول واقعي را چک کنند، مورد مطالعه دقيق قرار داده و پياده سازي مي کند، در واقع با جمع آوري تمام داده هاي تخصصي ودستور العمل ها، توصيف سيستم را مي سازد. مهندسي معکوس محصول اصلي را به برنامه زبان اسمبلي تبديل مي کند و در واقع عمل دي اسمبل (Disassemble)را انجام مي دهد. بعد آن راعمل دي کامپايل(Decompile)به زبان سطح بالا يا به عبارتي زبان مبدأ تبديل مي کند.
داده هاي تخصصي را که توسط مهندسي معکوس در يک نگارش تعديل شده از محصول واقعي توليد شده است، به کار مي برد. با اين کار هنگام اجرا داده ها را وارسي مي کند. آنها دقت و اعتبار طرحي را که الگوي اوليه تهيه شده است، مورد بررسي و آزمايش قرار مي دهند و ميزان صحت و سقم آن را مي سنجند.
و در نهايت مهندسي معکوس، محصول جديد را به بازار معرفي و عرضه مي کند. اين محصول با طرح هاي تکميلي، ويژگي ها و قابليت هايش تفاوت زيادي با محصول واقعي يا به عبارتي اوليه دارد. البته اين محصول جديد جهت استفاده در ساير سيستم هاي يکپارچه همانند چارچوب متفاوتي از سيستم عامل، ممکن است با محصول واقعي منطبق باشد. در حقيقت اين نوع مهندسي همان کارايي را به شيوه اي متفاوت ايجاد مي کند.
مراحل مهندسي معکوس را به شکل گوناگوني ترسيم نموده اند. برخي آن را به چهار مرحله:پياده سازي،طراحي، درخواست يا نياز و مفهوم تقسيم بندي مي کنند. گروهي آن را در چهار مرحله: پياده سازي، طراحي، آناليز و درخواست جاي مي دهند که در شکل 2 شماي گرافيکي آن آمده است. البته با توجه به بررسي هاي انجام شده روي مقالات گوناگون مي توان اين گونه نتيجه گرفت که مرحله درخواست در حال اول شامل آناليز هم مي باشد.
مهندسي معکوس مناسب
ما از دو ديدگاه اصلي براي ايجاد آن استفاده مي کنيم. اولي از بررسي ايده معکوس کردن فرآيند مهندسي حاصل مي شود، يعني در نطر گرفتن تصويري که حاصل از مهندسي معکوس است و استفاده از آن در بازسازي مجدد يک برنامه. براي کاهش تنوع وعدم اطمينان در اين فرآيند مي خواهيم که بازسازي بطور خودکار صورت گيرد.اگر بتوانيم دو کار ارائه و ايجاد را با هم انجام دهيم، داراي ابزار عملي براي شناسايي تماميت تلاش خود خواهيم بود. ديدگاه دوم کيفيت ارائه را در نظر مي گيرد؛ يعني چگونه تضمين مي دهيم که اين ارائه بينش مفيدي را در برنامه فراهم کند؟ در اينجا مدلي از دامنه کاربرد برنامه را همچون استاندارد خارجي براي مقايسه ارائه به کار گرفتيم. يک مدل دامنه، مجموعه اي از انتظارات موجود در ساخت يک برنامه و چگونگي ارتباط آنها با يکديگر را فراهم مي سازد. هنگام مهندسي معکوس يک برنامه، مقايسه نتايج حاصله از طريق مدل دامنه، به ارائه دقيق برنامه کمک مي کند.
نقش يک مهندس معکوس درک يک برنامه و بيان مکانيزم ارائه است. براي انجام آن، مهندس معکوس بايد دو نوع پرسش را پاسخ دهد: سؤال هاي «چيست»و سؤال هاي چگونه». سؤال هاي «چيست»بر اهداف و نيازمندي هاي برنامه متمرکز مي شود، در حالي که سؤال هاي «چگونه»بر مقاصد طرح که توسط توسعه دهندگان اصلي ايجاد شده اند و اينکه چگونه اين مقاصد در کد نشان داده مي شوند، متمرکز است.مناسب بودن ارائه و نمايش، بيانگرميزان اطلاعات «چيست»و «چگونه»است.
تناسب مي تواند از نظر بروني و دروني مورد ارزيابي قرار گيرد. معياربروني مناسب، محصول را از نظر کاربرد آن تعريف مي کند. در مورد يک آزمايش، قابليت اطمينان مثالي از يک معيار بروني است. به عنوان مثال، اگر برنامه اي مي بايست با قابليت اطمينان 99/9%مورد آزمايش قرار گيرد، بعيد است که کاربردها واقعاً با مشکلي مواجه شوند.معيار دروني به مشخصه هايي باز مي گردد که به طور مستقيم از يک محصول مصنوعي شناسايي مي گردد. به عنوان مثال، پوشش کد(code coverage)که بنيانگر آن است تا هر خط کد در يک سيستم نرم افزاري مورد آزمون قرار گيرد، مثالي ازيک معيار ارزيابي دروني است.
متأسفانه ارزيابي خارجي يک مسأله اجرايي را در مديريت مطرح مي کند، زيرا آنها تا زماني که محصول مورد استفاده قرار نگيرند، قابل بررسي نيستند. در مورد مهندسي معکوس، کاربردها(مصرف ها)تعيين کننده هاي خارجي کليدي هستند، اما قادر نيستيم اين مصارف را در زماني که مهندسي معکوس را انجام مي دهيم اندازه گيري و يا حتي پيش بيني کنيم. از اين رو اميد داريم معيار دروني در مديريت فرايند مهندسي معکوس، کمک کننده باشد. دو معيار متناسب دروني«تماميت»و«دقت»هستند. يک تجسم وقتي کامل بودنش کافي است که قادر باشد به طور خودکار براي بازسازي يک برنامه مشابه با نمونه اصلي، مورد استفاده قرار گيرد. علاوه برتماميت، نياز به ارزيابي داريم که محدوده اي را مشخص کند، تا يک تصوير در آن، طرح نرم افزار و ارتباط بين نرم افزار و اهدافي که براي اجرا شدن طرح، مطرح شده اند را توضيح دهد.
حدي را که اين ارزياب براي يک تصوير فراهم مي کند، دقت مي گوييم. براي تماميت نياز به يک مولد کد(code generator)خودکار است تا توانايي براي توليد يک تصوير و تبديل آن به برنامه هاي مشابه يا برنامه اصلي وجود داشته باشد. براي ارزيابي دقت، از مدلي براي دامنه کاربردي برنامه استفاده مي کنيم. دامنه هاي کاربردي، مجموعه هاي کامل و منسجمي از کاربردهايي هستند که توسط يک واژه نامه، ادبيات و معماري معمول مشخص شده اند.
ابزار کار مهندسي معکوس
متأسفانه سيستم هايي وجود دارند که طبقه بندي آنها داراي استثنائات فراواني مي باشد. بدون داشتن اطلاعات مورد نياز در مورد برنامه هايي نمي توان اين برنامه ها را شناسايي کرد و تشخيص داد. بنابراين پرسنل و اطلاعات بسيار زيادي لازم است تا بتوان به نکات و مشکلات خاص معماري و طراحي داخلي سيستم هاي بزرگتر پي برد.يکي از روش ها، فرآيند مهندسي معکوس است که اطلاعات طراحي را در بر دارد که از سيستم هاي نرم افزاري منشاء گرفته اند و اين اطلاعات براي گسترش و رشد پروژه هاي مهندسي مجدد و مديريت طرح به کار برده مي شود. اين فرآيند همچنين داراي سيستم هاي انتزاعي و پيچيده اي است که با استفاده از مطالعه ساختارها و سيستم هاي کلي مي تواند اين مشکلات و پيچدگي هاي را حل کند. محيط ها، ساختارها و ابزارهاي مهندسي معکوس تأثير بسزايي در استفاده از برنامه هاي خاص دارند.
يکي از اهداف اصلي مهندسي معکوس تغيير منطقي يک برنامه توسط تغيير ساختار آن است که در اصطلاح به «وصله کردن»معروف است و به طور کلي مفهوم آن اين است که يک برنامه از سطح بالاي بازنمايي کد به يک سطح بازنمايي مياني کامپايل مي شود. لازم به ذکر است، کد توليد شده جديد دقيقا در جاي کد اصلي قرار گيرد. وصله کردن اجازه مي دهد ما کد موجود را تغيير دهيم، حذف کنيم و يا به آن اضافه نماييم.
معمولاً بازنمايي مياني در قالب يک زبان مونتاژ است. اين بازنمايي مياني در نهايت به شکل باينري ماشين تغيير پيدا مي کند. در طول مهندسي معکوس کد باينري قابل اجرا به زبان مياني بر مي گردد و اگر نياز بود به کد برنامه سطح بالا تغيير شکل خواهد داد. اين سؤال پيش مي آيد که همه اين کارها چطور انجام مي شود؟ چهار نوع ابزار براي انجام اين مراحل وجود دارد که به توضيح آنها خواهيم پرداخت. جزئيات مرحله پياده سازي در شکل 3 نشان داده شده است.
الف)اشکال زدا
اشکال زداها به دو دسته عمده تقسيم مي شوند: يکي مد کاربر(user)و ديگري مد هسته(kernel)اشکال زدايي هاي(Debug)مد کاربر مانند يک برنامه معمولي تحت سيسيتم عامل و تحت فرمان همان قوانين برنامه هاي عادي اجرا مي شوند. آنها تنها پروسه سطح کاربر را اشکال زدايي مي کنند، درصورتي که مد هسته قسمتي از سيستم عامل است که برنامه هاي راه انداز سيستم و حتي خود مهندسي عامل را رفع عيب مي کند. يک مثال براي مد هسته softiceاست.
يک متد که در مهندسي معکوس به کار گرفته مي شود اين است که براي سرعت بخشيدن به کار از عمل چک کردن ورودي هاي کاربر استفاده مي شود. يعني به جاي اينکه همه مسير چک شود، به کمک نقطه توقف، مکان ورودي چک شود و مکان ورودي جايي است که کاربر داده اش را به برنامه مي دهد. حتي مکان ورودي را مي توان به صورت يک مرحله مجزا در برنامه چک کرد.
ب)ابزار تزريق عيب(fault injection)
پ)دي اسمبلر(Disassembler)
عمدتاً کد برنامه زبان اسمبلي اجازه مي دهد، از ثابت هاي سمبوليک و توضيحات برنامه نويس استفاده شود. معمولاًاينها از کد ماشين توليد شده توسط اسمبلر حذف شده است. پس بنابراين يک عمليات دي اسمبلر در يک کد ماشين کمبود اين ثابت ها و توضيحات را که به طور مجزا بايد توليد شوند، تأمين خواهد کرد. برخي از دي اسمبلرها مي توانند به نام ها و توضيحات مفيدي اشاره کنند و تعداد زيادي از آنها مي توانند از اطلاعات رفع عيب شده سمبوليک موجود در فايل هاي موضوعي مانند ELFاستفاده کنند. تعدادي ديگر از آنها مانند دي اسمبلرهاي فعل و انفعالي (محاوره اي)واقعاًبه کاربر انساني اجازه مي دهند، سمبول هاي يادآور شده را براي مقادير يا بخشي از يک کد در يک دوره محاوره اي بسازد.
در ادامه بايدافزود که برخي اوقات مقايسه دو کد دي اسمبل شده خيلي سخت است. امروزه دي اسمبلر با نام تجاري مشترک افزار (Shareware)و آزاد افزار(freeware)در دسترس است. تعدادي از ابزارهايي که ساخته شده اند، به خوبي عمل دي اسمبلر را بر روي خودشان هم انجام مي دهند که به عنوان مثال از اين دسته مي توان دو محصول تجاري IDApro وIDAsource را نام برد.IDA براي ماهرانه استفاده کردن از پايگاه داده برنامه، API را به کار مي گيرد تا کاربر بتواند تحليل سفارشي انجام بدهد.
ت)دي کامپايلر(Decompiler)
آناليزها و تست هاي مهندسي معکوس
1-توابع چک کننده نامناسب ونامحدود.
2-توابعي که داده هاي تهيه شده کاربر را به فورمت رشته پاس مي دهند.
3-توابعي که قصد دارند محدوده چک کردن را در يک فورمت رشته تقويت کنند.
4-بطور روتين ورودي کاربر بکار رفته در يک حلقه را مي گيرد.
5-پوينترهاي حسابي کاربر بافر روتين ها را تأمين مي کند.
6-سيستمي که داده هاي ديناميکي را مي گيرد، سيستم مطمئن ناميده مي شود.
الف)آناليز و تست جعبه سفيد (White-box)
تحليل هاي استاتيک با بهره گيري از فايل هاي برنامه، مانند ورودي و خروجي مورد استفاده قرار مي گيرند. اين ورودي وخروجي ها مي توانند داده هاي استاتيکي باشند که مشخصه برخي از کدها هستند. اين آزمايش کننده است که ورودي هاي وضعيت آزمايش را انتخاب مي کند و اين کار را بابکارگيري مسيرها به کمک کد انجام مي دهد و خروجي هاي مناسب را تعيين مي کند.
تست جعبه سفيد(تست جعبه پاک، تست جعبه شيشه اي يا تست ساختاري)يک پرسپکتيو داخلي از سيستم را براي طراحي حالت هاي آزمايشي بر پايه ساختار داخلي آن به کار مي برد و اين نيازمند مهارت هاي برنامه نويسي است تا همه مسيرها را به وسيله نرم افزار شناسايي نمايد. اين نوع تست قادر است آسيب ها و ضعف هاي بالقوه اي را که وجود ندارند گزارش کند. انواع تکنيک هاي طراحي تست جعبه سفيد به دو صورت آزمايش جريان داده وآزمايش جريان کنترل مي باشند.
IDA pro که ابزار خودکار در زمينه دي کامپايل کردن کد باينري به کد برنامه است، يک آناليز جعبه سفيد است که همچنين اين ابزار براي تحليل امنيت مفيد است.
جعبه سفيد حتي در سخت افزار نيز کاربرد دارد. براي مثال در يک سخت افزار الکتريکي، آزمايش هرند در يک مدار شايد به دقت بررسي و حساب شده باشد که به عنوان مثال مي توان از يک آزمايش کننده مدار(ICT)نام برد. از وقتي آزمايش ها بر پايه پياده سازي واقعي هستند، اگر پياده سازي تغيير کند، آزمايش ها و تست ها احتمالاًبه هم نياز خواهند داشت. براي مثال در آزمايش کننده مدار اگر مقادير قطعات تغير کند، لازم است به روز رساني انجام شود، ولي اگر مدار تغيير کند نياز است که يا قطعات ثابت آن تعويض و يا قطعات جديدي به آن اضافه شود. اين مسأله براي پروسه تغيير بار مالي دارد، بنابراين محصولات خطادار ممکن است خطا دار بمانند. واحد بازرسي نوري اتوماتيک(AOI)پيشنهاد مي کند که ميزان درستي قطعه مشابه بدون در نظر گرفتن هزينه قطعات ثابت آزمايش کننده مدار بررسي شود، هر چند که هنوز تغييرات نياز دارند که آزمايش به روز انجام شود. تا زماني که آزمايش جعبه سفيد در واحد قابل اجرا باشد، سطوح مجتمع و سيستم پروسه آزمايش نرم افزار معمولاً به واحد مربوط مي شود.
ب)آناليز و تست جعبه سياه (Black-box)
تست جعبه سياه تشکيل شده است از آزمايش رفتار خارجي يک برنامه براساس ورودي هايي که به آن داده مي شود. در حقيقت اين نوع تست که به آزمايش عملکرد نيز معروف است، امتحان مي کند که يک برنامه بدون توجه به چگونگي انجام کارهاي داخلي خود چطور اجرا مي شود و به چه شکلي به پايان مي رسد. اين تست شايد بدون دسترسي به کد باينري نيز ممکن باشد. همچنين يک برنامه مي تواند بر روي شبکه نيز تست شود. يک تست جعبه سياه به خاطر محدوديت هاي تئوريکي نمي تواند به طور عمقي در فضاي ورودي يک برنامه براي مشکلات جستجو کند، اما نسبت به نرم افزار هدف همانند يک حمله کنند حقيقي در يک محيط عملياتي واقعي رفتار مي کند و کار را در يک سيستم زنده انجام مي دهد.
پ)آناليز و تست جعبه خاکستري (Gray-box)
مفهوم پوشش کد
نرم افزارهاي مهندسي معکوس
در روشي که براي مهندسي معکوس بيان خواهد شد، انعطاف پذيري و توسعه پذيري و دامنه فعاليت آنهاست.
در روشي که براي مهندسي معکوس بيان خواهد شد، انعطاف پذيري و توسعه پذيري از الزامات کليدي است. اين روش بايد آنقدر انعطاف پذير باشد تا بتوانند نتايج حاصله را به صورت برنامه هاي عملي و متفاوت به مرحله اجرا برساند.
دامنه فعاليت در اين بخش مي تواند متفاوت باشد که از جمله مي توان حوزه بانکداري يا سيستم هاي پايگاه را نام برد. اين دامنه هاي تحقيق شامل زبان پياده سازي کاربردي مي باشند. هدف اين است که 2 تا3 ميليون خط برنامه را در نظر بگيريم که شامل تعداد زيادي از برنامه هاي بازمانده از قديم است. Rigi يکي از همين محيط هاي مهندسي معکوس بوده که داراي هر سه خصوصيت گفته شده مي باشد. همچنين از ديگر نرم افزارهاMoose است.
منبع: ماهنامه اطلاعات علمي-ش363