ابزارهاى System Monitoring
براى بخش System Level ابزارهایى نیاز است که به وسیله آنها اطلاعات کلى در مورد برنامه (فایل اجرایى) را در اختیار قرار میدهد که معمولااین اطلاعات توسط سیستم عامل ایجاد میگردد براى مثال مشخص میگردد که نرم افزار با چه ابزارى توسعه داده شده یا با چه ابزارى Protect شده است.
ابزارهاى Code Level Disassembler
ابزارى است که یک فایل اجرایى را دریافت نموده و یک فایل متنى که شامل کدهاى زبان Assembly که مربوط به قسمتهاى مختلف برنامه است را تولید میکند. Disassembler هاى پیشرفته یکى از ابزارهاى کلیدى مهندسى معکوس به شمار میروند.
Debugger برنامه اى است که به توسعه دهنده (Developer) اجازه مى دهد برنامه را در حال اجرا مشاهده نماید. Debugger یکى از مهمترین ابزارهاى مهندسى معکوس بوده که از یک Disassembler براى برگرداندن کدها به زبان اسمبلى استفاده مینماید.
زمانیکه یک فایل اجرایى با استفاده از یک Debugger باز میشود حالت Register هاى CPU، محتویات حافظه و Stack هاى فعال قابل مشاهده هستند.
ویژگى هاى مهم Debugger ها:
Disassembler قدرتمند: یکى از ویژگیهاى مهم و لازم براى هر Debugger بوده به طوریکه محتواى فایل اجرایى به وضوح قابل مشاهده میباشد. همچنین متدهاى برنامه قابل تجزیه و تحلیل بوده و Trace کردن آنها ساده میشوند.
Breakpoint هاى سخت افزارى و نرم افزارى: یکى دیگر از ویژگیهاى مهم Debugger ها بوده و هر Debugger داراى این ویژگى میباشد. Breakpoint هاى نرم افزارى دستوراتى هستند که در زمان اجرا (Runtime) توسط Debugger به برنامه اضافه میشوند و باعث میشوند اجراى برنامه توسط پردازشگر متوقف شده و کنترل برنامه به Debugger سپرده میشود. Breakpoint هاى سخت افزارى یکى از قابلیتهاى ویژه CPU بوده که به پردازشگر اجازه میدهد اجراى برنامه را متوقف کرده و کنترل آنرا به Debugger منتقل نماید و زمانى اتفاق مى افتد که یک آدرس از حافظه مورد دسترسى قرار گیرد.
دیدن Register ها و حافظه: یکى از قابلیتهاى خوب Debugger ها دیدن Register ها و محتواى حافظه سیستم میباشد.
اطلاعات Process :یکى از قابلیتهاى بسیار مفید Debugger ها دیدن جزییات Process ها در حال Debug کردن میباشد. دیدن ماجول هاى قابل اجرا و یا Thread هایى که در حال اجرا هستند را امکان پذیر میسازد.
انواع Debugger
User Mode Debugger
بیشتر Debugger ها از این نوع هستند. این نوع Debugger ها برنامه هایى هستند که به Process هاى دیگر متصل شده و کنترل آنرا در دست میگیرند. مزیت دیگر آنها نصب و استفاده آسان از آنها میباشد. از طرف دیگر User Mode Debugger ها فقط میتوانند با یک Process کار کنند و کدهاى User Mode درون آن Process را ببینند. گاهى اوقات شما با استفاده از این نوع Debugger برنامه اى را باز میکنید که چندین Process را شامل میشود که به نوعى به هم متصل هستند. در اینطور موارد شما ممکن است ندانید کد مورد نظر شما در کدام Process اجرا میشود. User Mode Debugger ها معمولاظ مشکل خاصى ایجاد نمیکنند مگر اینکه برنامه اى که در حال Debug شدن میباشد داراى مولفه هاى Kernel Mode باشد (همانند Device Driver). بعضى از این نوع Debugger ها عبارتند از:
OllyDbg
این Debugger توسط Oleh Yuschuk ساخته شده که شاید یکى از بهترین ها در نوع خود باشد، این Debugger داراى یک Disassembler بسیار قدرتمند بوده که براى افرادى که در زمینه مهندسى معکوس در سطح مبتدى هستند بسیار مناسب میباشد. وجود Analyzer در این Debugger باعث میشود که حلقه هاى تکرار و شرطها (for، switchو...) و همچنین پارامترهاى متدها به راحتى قابل تشخیص باشد. OllyDbg داراى امکان patching نیز میباشد به این ترتیب که میتوان تغییراتى در فایل اجرایى ایجاد نموده و آنرا ذخیزه نمود. این ابزار کاملا رایگان بوده و از سایتhttp://home.t-online.de/home/Ollydbg قابل دریافت میباشد.
WinDbg
یک Debugger رایگان بوده که سازنده آن شرکت Microsoft میباشد. در حالیکه تعدادى از ویژگیهاى آن از طریق رابط کاربر قابل دسترسى هستند، داراى یک کنترلگر دستورى نیز میباشد. دارا ى یک Disassembler ضعیف بوده و امکانات دیگر آن نیز چندان براى کاربران ساده نیست.
http://www.microsoft.com/whdc/devtoo...g/default.mspx
IDA Pro
یک User Mode Debugger است که داراى Assembler بسیار قدرتمند و همچنین امکانات Debug فراوان میباشد و میتوان گفت از قدرتمندترین Debuggerها میباشد. این Debugger رایگان نبوده ولى میتوان از نسخه هاى Trial آن استفاده نمود.
Decompiler
Decompiler یک سطح بالاتر از Disassembler میباشد. Decompiler یک فایل اجرایى را به عنوان ورودى دریافت نموده و سعى میکند کد سطح بالا را از آن تولید کند. با توجه به اینکه فایل اجرایى با چه ابزارى تولید شده باشد معمولاظ Decompile کردن آنها غیر ممکن است.