ab.mahmoodi
New Member
[FONT="]مهندسی معکوس ([/FONT][FONT="]Reverse Engineering[/FONT][FONT="])[/FONT]
[FONT="]مجموعه ای حساس از تکنیکها و ابزارها برای فهمیدن اینکه محتوای یک نرم افزار شامل چه چیزهایی میباشد. به عبارت دیگر عمل تجزیه و تحلیل یک سیستم برای مشخص کردن مولفه های سیستم و رابطه متقابل آنها به منظور نمایش سیستم به شکلی دیگر یا در سطحی بالاتر میباشد. این نوع تکنیکها باعث میشود تا ساختار یک نرم افزار را نمایان نموده و راههای عملکرد آن و همچنین ویژگیهایی که طبق آن حرکت میکند را مشخص کنیم. در واقع مهندسی معکوس زمانیکه شخصی کد شخص دیگری را کاوش کند نیز اتفاق می افتد.[/FONT]
[FONT="]بحث در مورد علم مهندسی معکوس از سال 1990 میلادی آغاز شده و در بعضی مجله های علمی مثل [/FONT][FONT="]IEEE Software[/FONT][FONT="] به صورت یک طبقه بندی علمی از آن صحبت میشود.[/FONT]
[FONT="]آیا شما مهندسی معکوس را نادیده میگیرید؟[/FONT]
[FONT="]فرض کنید شما نرم افزاری را توسعه داده و به فروش رسانده اید! آیا نمیخواهید دیگران به حقوق کپی ([/FONT][FONT="]Copyright[/FONT][FONT="]) شما احترام بگذارند؟ این بحث معمولا" از معانی منفی عبارت مهندسی معکوس به خصوص در صنعت نرم افزار سازی شروع میشود.[/FONT]
[FONT="]به هر حال تکنیکهای مهندسی معکوس راه هایی هستند برای تولید کننده ها و مصرف کننده های نرم افزار که با مقوله عرضه اقتصادی در یک زنجیره قرار میگیرند. در نظر داشته باشید که این ابزار (راهکار) به طور ذاتی خوب یا بد نیست، موضوع قابل توجه این است که این ابزار در چه راه هایی مورد استفاده قرار میگیرد. مهندسی معکوس به ویژه در نرم افزارهای پیشرفته برای اهداف خاص مورد استفاده قرار میگیرد :[/FONT]
-[FONT="]یافتن کدهای مخرب: تعدادی از تکنیکهای ویروس یابی از مهندسی معکوس برای دستیابی به ساختار و عملکرد این کدهای مخرب استفاده میکنند. به وسیله این تکنیکها نرم افزارهایی تولید میشود که برای مبارزه با ویروس های کامپیوتری مورد استفاده قرار میگیرد.[/FONT]
-[FONT="]کشف خطاهای ذاتی ([/FONT][FONT="]Bug[/FONT][FONT="]) و نقص های غیر منتظره: حتی بهترین سیستمهای نرم افزاری میتواند دارای خطا باشد که با استفاده از مهندسی معکوس میتوان آنها را پیدا کرده و رفع نمود ([/FONT][FONT="]Debug[/FONT][FONT="]).[/FONT]
[FONT="]نرم افزارهای سطح پایین[/FONT]
[FONT="]این نوع نرم افزارها شامل ابزارهای توسعه از قبیل [/FONT][FONT="]Compiler[/FONT][FONT="]، [/FONT][FONT="]Linker[/FONT][FONT="]، [/FONT][FONT="]Debugger[/FONT][FONT="]، سیستم های عامل ([/FONT][FONT="]Operating System[/FONT][FONT="]) و زبان های برنامه نویسی سطح پایین مثل [/FONT][FONT="]Assembly[/FONT][FONT="] میباشد. در واقع لایه ای است که جداکننده توسعه دهندگان نرم افزار و برنامه های کاربردی از سخت افزار میباشد. اگر شخصی بخواهد در زمینه مهندسی معکوس مهارت به دست آورد باید فهم کاملی نسبت به نرم افزارهای سطح پایین داشته باشد.[/FONT]
[FONT="]زبان [/FONT][FONT="]Assembly[/FONT]
[FONT="]این زبان پایین ترین سطح زبان های برنامه نویسی میباشد که به طور باورنکردنی در مهندسی معکوس مورد استفاده قرار میگیرد. اگر یک نرم افزار عملی را انجام دهد آن عمل باید به زبان [/FONT][FONT="]Assembly[/FONT][FONT="] قابل رویت باشد. مبحث مهم دیگر، کد ماشین است که همراه با زبان [/FONT][FONT="]Assembly[/FONT][FONT="] دو نوع تعریف مختلف از یک چیز میباشد. کد ماشین چیزی نیست جز رشته ای از بیتها و شامل لیستی از دستورات (در واقع نمایش متنی آن بیتها)، كه توسط [/FONT][FONT="]CPU[/FONT][FONT="] باید اجرا شود.[/FONT]
[FONT="]Compiler[/FONT][FONT="] و [/FONT][FONT="]Machine Code[/FONT]
[FONT="]با توجه به اینکه [/FONT][FONT="]CPU[/FONT][FONT="] فقط قادر است کدهای ماشین را اجرا کند با استفاده از [/FONT][FONT="]Compiler[/FONT][FONT="] کدهای زبانهای سطح بالا به زبان ماشین تبدیل میشوند.[/FONT]
[FONT="]زبانهایی مثل [/FONT][FONT="]C++[/FONT][FONT="] و [/FONT][FONT="]Pascal[/FONT][FONT="] دارای این نوع [/FONT][FONT="]Compiler[/FONT][FONT="] هستند.[/FONT]
[FONT="]Virtual Machine[/FONT][FONT="] و [/FONT][FONT="]Byte Code[/FONT]
[FONT="]زبانهایی مانند [/FONT][FONT="]Java[/FONT][FONT="] دارای کامپایلری هستند که به جای [/FONT][FONT="]Object Code[/FONT][FONT="] (کدهایی که [/FONT][FONT="]Compiler[/FONT][FONT="] آنها را تولید میکند)، [/FONT][FONT="]Byte Code[/FONT][FONT="] تولید میکنند. [/FONT][FONT="]Byte Code[/FONT][FONT="] ها شبیه به [/FONT][FONT="]Object Code[/FONT][FONT="] ها هستند با این تفاوت که توسط یک برنامه (به جای [/FONT][FONT="]CPU[/FONT][FONT="]) [/FONT][FONT="]Decode[/FONT][FONT="] میشوند. به این برنامه [/FONT][FONT="]Virtual Machine[/FONT][FONT="] گفته میشود. یکی از مزایای این نوع برنامه ها مستقل بودن آنها از محیط اجرا میباشد. مبحث مهندسی معکوس در مورد [/FONT][FONT="]Byte Code[/FONT][FONT="] ها نسبت به کدهای ماشین کاملاً متفاوت بوده و در مقایسه با آن ساده تر میباشد.[/FONT]
[FONT="]شروع عملیات مهندسی معکوس[/FONT]
[FONT="]برای شروع، کار به دو بخش کلی تقسیم میگردد:[/FONT]
[FONT="]1-[/FONT][FONT="]System Level[/FONT][FONT="]: داشتن دیدي کلی از تمام برنامه.[/FONT]
[FONT="]2-[/FONT][FONT="]Code Level[/FONT][FONT="]: به دست آوردن اطلاعات کامل و جزیی روی قسمتی از کد برنامه.[/FONT]
[FONT="]ابزارهای [/FONT][FONT="]System Monitoring[/FONT]
[FONT="]برای بخش [/FONT][FONT="]System Level[/FONT][FONT="] ابزارهایی نیاز است که به وسیله آنها اطلاعات کلی در مورد برنامه (فایل اجرایی) را در اختیار قرار میدهد که معمولاً این اطلاعات توسط سیستم عامل ایجاد میگردد براي مثال مشخص ميگردد كه نرم افزار با چه ابزاري توسعه داده شده يا با چه ابزاري [/FONT][FONT="]Protect[/FONT][FONT="] شده است.[/FONT]
[FONT="]ابزارهای [/FONT][FONT="]Code Level[/FONT]
[FONT="]Disassembler[/FONT]
[FONT="]ابزاری است که یک فایل اجرایی را دریافت نموده و یک فایل متنی که شامل کدهای زبان [/FONT][FONT="]Assembly[/FONT][FONT="] که مربوط به قسمتهای مختلف برنامه است را تولید میکند. [/FONT][FONT="]Disassembler[/FONT][FONT="] های پیشرفته یکی از ابزارهای کلیدی مهندسی معکوس به شمار میروند.[/FONT]
[FONT="]Debugger[/FONT]
[FONT="]Debugger[/FONT][FONT="] برنامه ای است که به توسعه دهنده ([/FONT][FONT="]Developer[/FONT][FONT="]) اجازه می دهد برنامه را در حال اجرا مشاهده نماید. [/FONT][FONT="]Debugger[/FONT][FONT="] یکی از مهمترین ابزارهای مهندسی معکوس بوده که از یک [/FONT][FONT="]Disassembler[/FONT][FONT="] برای برگرداندن کدها به زبان اسمبلی استفاده مینماید.[/FONT]
[FONT="]زمانیکه یک فایل اجرایی با استفاده از یک [/FONT][FONT="]Debugger [/FONT][FONT="] باز میشود حالت [/FONT][FONT="]Register[/FONT][FONT="] های [/FONT][FONT="]CPU[/FONT][FONT="]، محتویات حافظه و [/FONT][FONT="]Stack[/FONT][FONT="] های فعال قابل مشاهده هستند.[/FONT]
[FONT="]ویژگی های مهم [/FONT][FONT="]Debugger[/FONT][FONT="] ها :[/FONT]
[FONT="]Disassembler[/FONT][FONT="] قدرتمند:[/FONT][FONT="] یکی از ویژگیهای مهم و لازم برای هر [/FONT][FONT="]Debugger[/FONT][FONT="] بوده به طوریکه محتوای فایل اجرایی به وضوح قابل مشاهده میباشد. همچنین متدهای برنامه قابل تجزیه و تحلیل بوده و [/FONT][FONT="]Trace[/FONT][FONT="] کردن آنها ساده میشوند.[/FONT]
[FONT="]Breakpoint[/FONT][FONT="] های سخت افزاری و نرم افزاری:[/FONT][FONT="] یکی دیگر از ویژگیهای مهم [/FONT][FONT="]Debugger[/FONT][FONT="] ها بوده و هر [/FONT][FONT="]Debugger[/FONT][FONT="] دارای این ویژگی میباشد. [/FONT][FONT="]Breakpoint[/FONT][FONT="] های نرم افزاری دستوراتی هستند که در زمان اجرا ([/FONT][FONT="]Runtime[/FONT][FONT="]) توسط [/FONT][FONT="]Debugger[/FONT][FONT="] به برنامه اضافه میشوند و باعث میشوند اجرای برنامه توسط پردازشگر متوقف شده و کنترل برنامه به [/FONT][FONT="]Debugger[/FONT][FONT="] سپرده میشود. [/FONT][FONT="]Breakpoint[/FONT][FONT="] های سخت افزاری یکی از قابلیتهای ویژه [/FONT][FONT="]CPU[/FONT][FONT="] بوده که به پردازشگر اجازه میدهد اجرای برنامه را متوقف کرده و کنترل آنرا به [/FONT][FONT="]Debugger[/FONT][FONT="] منتقل نماید و زمانی اتفاق می افتد که یک آدرس از حافظه مورد دسترسی قرار گیرد.[/FONT]
[FONT="]دیدن [/FONT][FONT="]Register[/FONT][FONT="] ها و حافظه: [/FONT][FONT="]یکی از قابلیتهای خوب [/FONT][FONT="]Debugger[/FONT][FONT="] ها دیدن [/FONT][FONT="]Register[/FONT][FONT="] ها و محتوای حافظه سیستم میباشد.[/FONT]
[FONT="]اطلاعات [/FONT][FONT="]Process[/FONT][FONT="] : [/FONT][FONT="]یکی از قابلیتهای بسیار مفید [/FONT][FONT="]Debugger[/FONT][FONT="] ها دیدن جزییات [/FONT][FONT="]Process[/FONT][FONT="] ها در حال [/FONT][FONT="]Debug[/FONT][FONT="] کردن میباشد. دیدن ماجول های قابل اجرا و یا [/FONT][FONT="]Thread[/FONT][FONT="] هایی که در حال اجرا هستند را امکان پذیر میسازد.[/FONT]
[FONT="]انواع [/FONT][FONT="]Debugger[/FONT]
[FONT="]1-[/FONT][FONT="]User Mode Debugger[/FONT]
[FONT="]بیشتر [/FONT][FONT="]Debugger[/FONT][FONT="] ها از این نوع هستند. این نوع [/FONT][FONT="]Debugger[/FONT][FONT="] ها برنامه هایی هستند که به [/FONT][FONT="]Process[/FONT][FONT="] های دیگر متصل شده و کنترل آنرا در دست میگیرند. مزیت دیگر آنها نصب و استفاده آسان از آنها میباشد. از طرف دیگر [/FONT][FONT="]User Mode Debugger[/FONT][FONT="] ها فقط میتوانند با یک [/FONT][FONT="]Process[/FONT][FONT="] کار کنند و کدهای [/FONT][FONT="]User Mode[/FONT][FONT="] درون آن [/FONT][FONT="]Process[/FONT][FONT="] را ببینند. گاهی اوقات شما با استفاده از این نوع [/FONT][FONT="]Debugger[/FONT][FONT="] برنامه ای را باز میکنید که چندین [/FONT][FONT="]Process[/FONT][FONT="] را شامل میشود که به نوعی به هم متصل هستند. در اینطور موارد شما ممکن است ندانید کد مورد نظر شما در کدام [/FONT][FONT="]Process[/FONT][FONT="] اجرا میشود. [/FONT][FONT="]User Mode Debugger[/FONT][FONT="] ها معمولاً مشکل خاصی ایجاد نمیکنند مگر اینکه برنامه ای که در حال [/FONT][FONT="]Debug[/FONT][FONT="] شدن میباشد دارای مولفه های [/FONT][FONT="]Kernel Mode[/FONT][FONT="] باشد (همانند [/FONT][FONT="]Device Driver[/FONT][FONT="]). بعضی از این نوع [/FONT][FONT="]Debugger[/FONT][FONT="] ها عبارتند از :[/FONT]
-[FONT="]OllyDbg[/FONT]
[FONT="]این [/FONT][FONT="]Debugger[/FONT][FONT="] توسط [/FONT][FONT="]Oleh Yuschuk[/FONT][FONT="] ساخته شده که شاید یکی از بهترین ها[/FONT][FONT="] در نوع خود باشد، این [/FONT][FONT="]Debugger[/FONT][FONT="] دارای یک [/FONT][FONT="]Disassembler[/FONT][FONT="] بسیار قدرتمند بوده که برای افرادی که در زمینه مهندسی معکوس در سطح مبتدی هستند بسیار مناسب میباشد.[/FONT][FONT="]وجود [/FONT][FONT="]Analyzer[/FONT][FONT="] در این [/FONT][FONT="]Debugger[/FONT][FONT="] باعث میشود که حلقه های تکرار و شرطها ([/FONT][FONT="]for[/FONT][FONT="]، [/FONT][FONT="]switch[/FONT][FONT="]و ...) و همچنین پارامترهای متدها به راحتی قابل تشخیص باشد. [/FONT][FONT="]OllyDbg[/FONT][FONT="] دارای امکان [/FONT][FONT="]patching[/FONT][FONT="] نیز میباشد به این ترتیب که میتوان تغییراتی در فایل اجرایی ایجاد نموده و آنرا ذخیزه نمود. این ابزار کاملا رایگان بوده و از سایت[/FONT]
[FONT="]http://home.t-online.de/home/Ollydbg[/FONT][FONT="] قابل دریافت میباشد.[/FONT]
-[FONT="]WinDbg[/FONT]
[FONT="]یک [/FONT][FONT="]Debugger[/FONT][FONT="] رایگان بوده که سازنده آن شرکت [/FONT][FONT="]Microsoft[/FONT][FONT="] میباشد. در حالیکه تعدادی از ویژگیهای آن از طریق رابط کاربر قابل دسترسی هستند، دارای یک کنترلگر دستوری نیز میباشد. دارا ی یک [/FONT][FONT="]Disassembler[/FONT][FONT="] ضعیف بوده و امکانات دیگر آن نیز چندان برای کاربران ساده نیست. [/FONT]
-[FONT="]IDA Pro[/FONT]
[FONT="]یک [/FONT][FONT="]User Mode Debugger[/FONT][FONT="] است که دارای [/FONT][FONT="]Assembler[/FONT][FONT="] بسیار قدرتمند و همچنین امکانات [/FONT][FONT="]Debug[/FONT][FONT="] فراوان میباشد و میتوان گفت از قدرتمندترین [/FONT][FONT="]Debugger[/FONT][FONT="]ها میباشد. این [/FONT][FONT="]Debugger[/FONT][FONT="] رایگان نبوده ولی میتوان از نسخه های [/FONT][FONT="]Trial[/FONT][FONT="] آن استفاده نمود.[/FONT]
[FONT="]Debugger[/FONT][FONT="]های [/FONT][FONT="]Kernel Mode[/FONT]
[FONT="]...[/FONT]
[FONT="]Decompiler[/FONT]
[FONT="]Decompiler[/FONT][FONT="]یک سطح بالاتر از [/FONT][FONT="]Disassembler[/FONT][FONT="] میباشد. [/FONT][FONT="]Decompiler[/FONT][FONT="] یک فایل اجرایی را به عنوان ورودی دریافت نموده و سعی میکند کد سطح بالا را از آن تولید کند. با توجه به اینکه فایل اجرایی با چه ابزاری تولید شده باشد معمولاً [/FONT][FONT="]Decompile[/FONT][FONT="] کردن آنها غیر ممکن است.[/FONT]
[FONT="]...[/FONT]
[FONT="]شرکت منشور سیمین[/FONT]
[FONT="]http://dedj.com[/FONT]
[FONT="]http://8df.org[/FONT]
[FONT="]http://6df.org[/FONT]
[FONT="]مجموعه ای حساس از تکنیکها و ابزارها برای فهمیدن اینکه محتوای یک نرم افزار شامل چه چیزهایی میباشد. به عبارت دیگر عمل تجزیه و تحلیل یک سیستم برای مشخص کردن مولفه های سیستم و رابطه متقابل آنها به منظور نمایش سیستم به شکلی دیگر یا در سطحی بالاتر میباشد. این نوع تکنیکها باعث میشود تا ساختار یک نرم افزار را نمایان نموده و راههای عملکرد آن و همچنین ویژگیهایی که طبق آن حرکت میکند را مشخص کنیم. در واقع مهندسی معکوس زمانیکه شخصی کد شخص دیگری را کاوش کند نیز اتفاق می افتد.[/FONT]
[FONT="]بحث در مورد علم مهندسی معکوس از سال 1990 میلادی آغاز شده و در بعضی مجله های علمی مثل [/FONT][FONT="]IEEE Software[/FONT][FONT="] به صورت یک طبقه بندی علمی از آن صحبت میشود.[/FONT]
[FONT="]آیا شما مهندسی معکوس را نادیده میگیرید؟[/FONT]
[FONT="]فرض کنید شما نرم افزاری را توسعه داده و به فروش رسانده اید! آیا نمیخواهید دیگران به حقوق کپی ([/FONT][FONT="]Copyright[/FONT][FONT="]) شما احترام بگذارند؟ این بحث معمولا" از معانی منفی عبارت مهندسی معکوس به خصوص در صنعت نرم افزار سازی شروع میشود.[/FONT]
[FONT="]به هر حال تکنیکهای مهندسی معکوس راه هایی هستند برای تولید کننده ها و مصرف کننده های نرم افزار که با مقوله عرضه اقتصادی در یک زنجیره قرار میگیرند. در نظر داشته باشید که این ابزار (راهکار) به طور ذاتی خوب یا بد نیست، موضوع قابل توجه این است که این ابزار در چه راه هایی مورد استفاده قرار میگیرد. مهندسی معکوس به ویژه در نرم افزارهای پیشرفته برای اهداف خاص مورد استفاده قرار میگیرد :[/FONT]
-[FONT="]یافتن کدهای مخرب: تعدادی از تکنیکهای ویروس یابی از مهندسی معکوس برای دستیابی به ساختار و عملکرد این کدهای مخرب استفاده میکنند. به وسیله این تکنیکها نرم افزارهایی تولید میشود که برای مبارزه با ویروس های کامپیوتری مورد استفاده قرار میگیرد.[/FONT]
-[FONT="]کشف خطاهای ذاتی ([/FONT][FONT="]Bug[/FONT][FONT="]) و نقص های غیر منتظره: حتی بهترین سیستمهای نرم افزاری میتواند دارای خطا باشد که با استفاده از مهندسی معکوس میتوان آنها را پیدا کرده و رفع نمود ([/FONT][FONT="]Debug[/FONT][FONT="]).[/FONT]
[FONT="]نرم افزارهای سطح پایین[/FONT]
[FONT="]این نوع نرم افزارها شامل ابزارهای توسعه از قبیل [/FONT][FONT="]Compiler[/FONT][FONT="]، [/FONT][FONT="]Linker[/FONT][FONT="]، [/FONT][FONT="]Debugger[/FONT][FONT="]، سیستم های عامل ([/FONT][FONT="]Operating System[/FONT][FONT="]) و زبان های برنامه نویسی سطح پایین مثل [/FONT][FONT="]Assembly[/FONT][FONT="] میباشد. در واقع لایه ای است که جداکننده توسعه دهندگان نرم افزار و برنامه های کاربردی از سخت افزار میباشد. اگر شخصی بخواهد در زمینه مهندسی معکوس مهارت به دست آورد باید فهم کاملی نسبت به نرم افزارهای سطح پایین داشته باشد.[/FONT]
[FONT="]زبان [/FONT][FONT="]Assembly[/FONT]
[FONT="]این زبان پایین ترین سطح زبان های برنامه نویسی میباشد که به طور باورنکردنی در مهندسی معکوس مورد استفاده قرار میگیرد. اگر یک نرم افزار عملی را انجام دهد آن عمل باید به زبان [/FONT][FONT="]Assembly[/FONT][FONT="] قابل رویت باشد. مبحث مهم دیگر، کد ماشین است که همراه با زبان [/FONT][FONT="]Assembly[/FONT][FONT="] دو نوع تعریف مختلف از یک چیز میباشد. کد ماشین چیزی نیست جز رشته ای از بیتها و شامل لیستی از دستورات (در واقع نمایش متنی آن بیتها)، كه توسط [/FONT][FONT="]CPU[/FONT][FONT="] باید اجرا شود.[/FONT]
[FONT="]Compiler[/FONT][FONT="] و [/FONT][FONT="]Machine Code[/FONT]
[FONT="]با توجه به اینکه [/FONT][FONT="]CPU[/FONT][FONT="] فقط قادر است کدهای ماشین را اجرا کند با استفاده از [/FONT][FONT="]Compiler[/FONT][FONT="] کدهای زبانهای سطح بالا به زبان ماشین تبدیل میشوند.[/FONT]
[FONT="]زبانهایی مثل [/FONT][FONT="]C++[/FONT][FONT="] و [/FONT][FONT="]Pascal[/FONT][FONT="] دارای این نوع [/FONT][FONT="]Compiler[/FONT][FONT="] هستند.[/FONT]
[FONT="]Virtual Machine[/FONT][FONT="] و [/FONT][FONT="]Byte Code[/FONT]
[FONT="]زبانهایی مانند [/FONT][FONT="]Java[/FONT][FONT="] دارای کامپایلری هستند که به جای [/FONT][FONT="]Object Code[/FONT][FONT="] (کدهایی که [/FONT][FONT="]Compiler[/FONT][FONT="] آنها را تولید میکند)، [/FONT][FONT="]Byte Code[/FONT][FONT="] تولید میکنند. [/FONT][FONT="]Byte Code[/FONT][FONT="] ها شبیه به [/FONT][FONT="]Object Code[/FONT][FONT="] ها هستند با این تفاوت که توسط یک برنامه (به جای [/FONT][FONT="]CPU[/FONT][FONT="]) [/FONT][FONT="]Decode[/FONT][FONT="] میشوند. به این برنامه [/FONT][FONT="]Virtual Machine[/FONT][FONT="] گفته میشود. یکی از مزایای این نوع برنامه ها مستقل بودن آنها از محیط اجرا میباشد. مبحث مهندسی معکوس در مورد [/FONT][FONT="]Byte Code[/FONT][FONT="] ها نسبت به کدهای ماشین کاملاً متفاوت بوده و در مقایسه با آن ساده تر میباشد.[/FONT]
[FONT="]شروع عملیات مهندسی معکوس[/FONT]
[FONT="]برای شروع، کار به دو بخش کلی تقسیم میگردد:[/FONT]
[FONT="]1-[/FONT][FONT="]System Level[/FONT][FONT="]: داشتن دیدي کلی از تمام برنامه.[/FONT]
[FONT="]2-[/FONT][FONT="]Code Level[/FONT][FONT="]: به دست آوردن اطلاعات کامل و جزیی روی قسمتی از کد برنامه.[/FONT]
[FONT="]ابزارهای [/FONT][FONT="]System Monitoring[/FONT]
[FONT="]برای بخش [/FONT][FONT="]System Level[/FONT][FONT="] ابزارهایی نیاز است که به وسیله آنها اطلاعات کلی در مورد برنامه (فایل اجرایی) را در اختیار قرار میدهد که معمولاً این اطلاعات توسط سیستم عامل ایجاد میگردد براي مثال مشخص ميگردد كه نرم افزار با چه ابزاري توسعه داده شده يا با چه ابزاري [/FONT][FONT="]Protect[/FONT][FONT="] شده است.[/FONT]
[FONT="]ابزارهای [/FONT][FONT="]Code Level[/FONT]
[FONT="]Disassembler[/FONT]
[FONT="]ابزاری است که یک فایل اجرایی را دریافت نموده و یک فایل متنی که شامل کدهای زبان [/FONT][FONT="]Assembly[/FONT][FONT="] که مربوط به قسمتهای مختلف برنامه است را تولید میکند. [/FONT][FONT="]Disassembler[/FONT][FONT="] های پیشرفته یکی از ابزارهای کلیدی مهندسی معکوس به شمار میروند.[/FONT]
[FONT="]Debugger[/FONT]
[FONT="]Debugger[/FONT][FONT="] برنامه ای است که به توسعه دهنده ([/FONT][FONT="]Developer[/FONT][FONT="]) اجازه می دهد برنامه را در حال اجرا مشاهده نماید. [/FONT][FONT="]Debugger[/FONT][FONT="] یکی از مهمترین ابزارهای مهندسی معکوس بوده که از یک [/FONT][FONT="]Disassembler[/FONT][FONT="] برای برگرداندن کدها به زبان اسمبلی استفاده مینماید.[/FONT]
[FONT="]زمانیکه یک فایل اجرایی با استفاده از یک [/FONT][FONT="]Debugger [/FONT][FONT="] باز میشود حالت [/FONT][FONT="]Register[/FONT][FONT="] های [/FONT][FONT="]CPU[/FONT][FONT="]، محتویات حافظه و [/FONT][FONT="]Stack[/FONT][FONT="] های فعال قابل مشاهده هستند.[/FONT]
[FONT="]ویژگی های مهم [/FONT][FONT="]Debugger[/FONT][FONT="] ها :[/FONT]
[FONT="]Disassembler[/FONT][FONT="] قدرتمند:[/FONT][FONT="] یکی از ویژگیهای مهم و لازم برای هر [/FONT][FONT="]Debugger[/FONT][FONT="] بوده به طوریکه محتوای فایل اجرایی به وضوح قابل مشاهده میباشد. همچنین متدهای برنامه قابل تجزیه و تحلیل بوده و [/FONT][FONT="]Trace[/FONT][FONT="] کردن آنها ساده میشوند.[/FONT]
[FONT="]Breakpoint[/FONT][FONT="] های سخت افزاری و نرم افزاری:[/FONT][FONT="] یکی دیگر از ویژگیهای مهم [/FONT][FONT="]Debugger[/FONT][FONT="] ها بوده و هر [/FONT][FONT="]Debugger[/FONT][FONT="] دارای این ویژگی میباشد. [/FONT][FONT="]Breakpoint[/FONT][FONT="] های نرم افزاری دستوراتی هستند که در زمان اجرا ([/FONT][FONT="]Runtime[/FONT][FONT="]) توسط [/FONT][FONT="]Debugger[/FONT][FONT="] به برنامه اضافه میشوند و باعث میشوند اجرای برنامه توسط پردازشگر متوقف شده و کنترل برنامه به [/FONT][FONT="]Debugger[/FONT][FONT="] سپرده میشود. [/FONT][FONT="]Breakpoint[/FONT][FONT="] های سخت افزاری یکی از قابلیتهای ویژه [/FONT][FONT="]CPU[/FONT][FONT="] بوده که به پردازشگر اجازه میدهد اجرای برنامه را متوقف کرده و کنترل آنرا به [/FONT][FONT="]Debugger[/FONT][FONT="] منتقل نماید و زمانی اتفاق می افتد که یک آدرس از حافظه مورد دسترسی قرار گیرد.[/FONT]
[FONT="]دیدن [/FONT][FONT="]Register[/FONT][FONT="] ها و حافظه: [/FONT][FONT="]یکی از قابلیتهای خوب [/FONT][FONT="]Debugger[/FONT][FONT="] ها دیدن [/FONT][FONT="]Register[/FONT][FONT="] ها و محتوای حافظه سیستم میباشد.[/FONT]
[FONT="]اطلاعات [/FONT][FONT="]Process[/FONT][FONT="] : [/FONT][FONT="]یکی از قابلیتهای بسیار مفید [/FONT][FONT="]Debugger[/FONT][FONT="] ها دیدن جزییات [/FONT][FONT="]Process[/FONT][FONT="] ها در حال [/FONT][FONT="]Debug[/FONT][FONT="] کردن میباشد. دیدن ماجول های قابل اجرا و یا [/FONT][FONT="]Thread[/FONT][FONT="] هایی که در حال اجرا هستند را امکان پذیر میسازد.[/FONT]
[FONT="]انواع [/FONT][FONT="]Debugger[/FONT]
[FONT="]1-[/FONT][FONT="]User Mode Debugger[/FONT]
[FONT="]بیشتر [/FONT][FONT="]Debugger[/FONT][FONT="] ها از این نوع هستند. این نوع [/FONT][FONT="]Debugger[/FONT][FONT="] ها برنامه هایی هستند که به [/FONT][FONT="]Process[/FONT][FONT="] های دیگر متصل شده و کنترل آنرا در دست میگیرند. مزیت دیگر آنها نصب و استفاده آسان از آنها میباشد. از طرف دیگر [/FONT][FONT="]User Mode Debugger[/FONT][FONT="] ها فقط میتوانند با یک [/FONT][FONT="]Process[/FONT][FONT="] کار کنند و کدهای [/FONT][FONT="]User Mode[/FONT][FONT="] درون آن [/FONT][FONT="]Process[/FONT][FONT="] را ببینند. گاهی اوقات شما با استفاده از این نوع [/FONT][FONT="]Debugger[/FONT][FONT="] برنامه ای را باز میکنید که چندین [/FONT][FONT="]Process[/FONT][FONT="] را شامل میشود که به نوعی به هم متصل هستند. در اینطور موارد شما ممکن است ندانید کد مورد نظر شما در کدام [/FONT][FONT="]Process[/FONT][FONT="] اجرا میشود. [/FONT][FONT="]User Mode Debugger[/FONT][FONT="] ها معمولاً مشکل خاصی ایجاد نمیکنند مگر اینکه برنامه ای که در حال [/FONT][FONT="]Debug[/FONT][FONT="] شدن میباشد دارای مولفه های [/FONT][FONT="]Kernel Mode[/FONT][FONT="] باشد (همانند [/FONT][FONT="]Device Driver[/FONT][FONT="]). بعضی از این نوع [/FONT][FONT="]Debugger[/FONT][FONT="] ها عبارتند از :[/FONT]
-[FONT="]OllyDbg[/FONT]
[FONT="]این [/FONT][FONT="]Debugger[/FONT][FONT="] توسط [/FONT][FONT="]Oleh Yuschuk[/FONT][FONT="] ساخته شده که شاید یکی از بهترین ها[/FONT][FONT="] در نوع خود باشد، این [/FONT][FONT="]Debugger[/FONT][FONT="] دارای یک [/FONT][FONT="]Disassembler[/FONT][FONT="] بسیار قدرتمند بوده که برای افرادی که در زمینه مهندسی معکوس در سطح مبتدی هستند بسیار مناسب میباشد.[/FONT][FONT="]وجود [/FONT][FONT="]Analyzer[/FONT][FONT="] در این [/FONT][FONT="]Debugger[/FONT][FONT="] باعث میشود که حلقه های تکرار و شرطها ([/FONT][FONT="]for[/FONT][FONT="]، [/FONT][FONT="]switch[/FONT][FONT="]و ...) و همچنین پارامترهای متدها به راحتی قابل تشخیص باشد. [/FONT][FONT="]OllyDbg[/FONT][FONT="] دارای امکان [/FONT][FONT="]patching[/FONT][FONT="] نیز میباشد به این ترتیب که میتوان تغییراتی در فایل اجرایی ایجاد نموده و آنرا ذخیزه نمود. این ابزار کاملا رایگان بوده و از سایت[/FONT]
[FONT="]http://home.t-online.de/home/Ollydbg[/FONT][FONT="] قابل دریافت میباشد.[/FONT]
-[FONT="]WinDbg[/FONT]
[FONT="]یک [/FONT][FONT="]Debugger[/FONT][FONT="] رایگان بوده که سازنده آن شرکت [/FONT][FONT="]Microsoft[/FONT][FONT="] میباشد. در حالیکه تعدادی از ویژگیهای آن از طریق رابط کاربر قابل دسترسی هستند، دارای یک کنترلگر دستوری نیز میباشد. دارا ی یک [/FONT][FONT="]Disassembler[/FONT][FONT="] ضعیف بوده و امکانات دیگر آن نیز چندان برای کاربران ساده نیست. [/FONT]
[FONT="]www.microsoft.com/whdc/devtools/debugging/default.mspx[/FONT]
-[FONT="]IDA Pro[/FONT]
[FONT="]یک [/FONT][FONT="]User Mode Debugger[/FONT][FONT="] است که دارای [/FONT][FONT="]Assembler[/FONT][FONT="] بسیار قدرتمند و همچنین امکانات [/FONT][FONT="]Debug[/FONT][FONT="] فراوان میباشد و میتوان گفت از قدرتمندترین [/FONT][FONT="]Debugger[/FONT][FONT="]ها میباشد. این [/FONT][FONT="]Debugger[/FONT][FONT="] رایگان نبوده ولی میتوان از نسخه های [/FONT][FONT="]Trial[/FONT][FONT="] آن استفاده نمود.[/FONT]
[FONT="]Debugger[/FONT][FONT="]های [/FONT][FONT="]Kernel Mode[/FONT]
[FONT="]...[/FONT]
[FONT="]Decompiler[/FONT]
[FONT="]Decompiler[/FONT][FONT="]یک سطح بالاتر از [/FONT][FONT="]Disassembler[/FONT][FONT="] میباشد. [/FONT][FONT="]Decompiler[/FONT][FONT="] یک فایل اجرایی را به عنوان ورودی دریافت نموده و سعی میکند کد سطح بالا را از آن تولید کند. با توجه به اینکه فایل اجرایی با چه ابزاری تولید شده باشد معمولاً [/FONT][FONT="]Decompile[/FONT][FONT="] کردن آنها غیر ممکن است.[/FONT]
[FONT="]...[/FONT]
[FONT="]شرکت منشور سیمین[/FONT]
[FONT="]http://dedj.com[/FONT]
[FONT="]http://8df.org[/FONT]
[FONT="]http://6df.org[/FONT]
آخرین ویرایش:









