disassembler

m.vahid

عضو جدید
سلام :)

من برای درس زبان ماشین و اسمبلی یه پروزه در باره ی disassemblerدارم.اگر کسی

اطلاعاتی داره یا یه برنامه disassembler ( با طرز کارش)لطفآ برام بذاره.
 

sajad_strant

عضو جدید
dis assembler :عمل تبديل فايل اجرايي به كد زبان اسمبلي كه عمل عكس assemble است disassemble و ابزاري كه اين عمل را انجام مي دهد dis assembler است.


يك مقاله در اين مورد پيدا كردم اما منبع آن يادم نيست:
Disassembler ابزار براي تبديل کدهاي زبان ماشين ، به معادل اسمبلي آنهاست . زبان اسمبلي به عنوان يک زبان سطح پائين ، به ازاي يک دستور يا اصطلاحا" Instruction به يک دستور زبان ماشين تبديل خواهد شد فلذا بازگردوندن کد باينري به معادل اسمبلي اون کار چنان دشواري نيست .
سوال : يک برنامه اجرائي ( PE ) تحت ويندوز داريم که با MASM ( يا Macro Assembler ) نوشته شده است . با يک Disassembler آن را به کدهاي اسمبلي تبديل ميکنيم . آيا خروجي لزوما" با کد اسمبلي اوليه يکسان خواهد بود ؟( بايد دانست که هر دستور زبان اسمبلي لزوما" به يک دستور زبان ماشين ترجمه ميشه ؛ ليکن هر خط کد زبان ماشين رو بسته به شرايط ممکنه بشه به موارد مختلفي تعبير کرد . پس اين ارتباط چندان يک به يک نيست .
با توجه به توضيح فوق الذکر ؛ Disassembler بايد بدونه کامپايلر چطور کار ميکنه ، تا براي يک دستور زبان ماشين "مناسب" ترين معادل اسمبلي رو پيدا کنه . IDA که مخفف Intractive Disassembler هست نه تنها اين ويژگي رو داره ؛ بلکه به تو اجازه ميده بصورت کاملا" محاوره اي ازش بخاي دستورات رو به Assembly تبديل کنه تا تشخيص هوشمندانه تو يا اطلاعات جانبي که داري بتونه بهش کمک کنه حدس هاي بهتري بزنه.
براي مثال:
دستور mov al, 0x61 يا انتقال عدد 97 به al روي IA32 ميتونه چنين معادلي داشته باشه : B061 يا باينري : 101100000110001 ؛ اما اين ترجمه زماني درست انجام ميشه که Disassembler بفهمه بايد B061 رو اولا" تو بخش کد و دوما" به عنوان کد ماشين در نظر بگيره ؛ دوما" Instruction Set مورد نظر يعني مثلا" IA32 رو به دقت و با در نظر گرفتن همهء جزئيات پياده سازي کرده باشه ؛ از اونجائيکه هنوز انسانها برنامهء کامل و بدون نقصي توليد نکرده اند ؛ Disassembler ها هم در اثر پيچيدگيهاي نرم افزار ، تفاوت خروجي کامپايلرها مختلف و تفاوتهاي جزئي برخي از Binary Encoding هاي Assembler ها ( مثلا" MASM که مايکروسافت ازش استفاده ميکنه و BASM که بورلند ازش استفاده ميکنه و تفاوتهاشون ) ايضا" نقائص موجود در پياده سازي IS باعث ميشه Disassembler نتونه هميشه همه چيز رو درست تشخيص بده . به عنوان مثال 10110000 01100001 همواره معادل يک دستور ماشين نيست ؛ فقط به شرطي که در محل مناسب قرار بگيره يک دستور ماشينه در حاليکه داخل برنامه اجرائي وجود داره . براي ديدن اين تفاوتها دو تا فايل اجرائي ، يکي ساده و يکي بزرگ و پيچيده رو به هر دوي IDA Pro و WinDasm بده و خروجي ها رو تماشا کن) .
جواب : لزوما" خير . Disassembler هاي امروزي عموما" به اندازه کافي هوشمند و خوب هستند اما نميشه انتظار داشت "هوش" داشته باشند . اين ابزارها با استفاده از Knowledge Base اي که براي کامپايلرهاي مختلف داخلشون تعبيه شده ، کدهاي باينري رو به معادل اسمبلي تبديل ميکنند اما تضميني وجود نداره توسعه گر اصلي برنامه ، نيز دقيقا" همين کدها رو نوشته باشه . ميزان خطاي Disassembler ها رابطه مستقيمي با ميزان پيچيدگي و سطح بالا بودن زبان داره . يعني Disasembler با دريافت ورودي که با MASM يا GCC توليد شده خطاي کمتري خواهد داشت نسبت به زماني که قراره فايل باينري توليد شده توسط دلفي يا VC رو بررسي کنه ؛ خصوصا " اگر کتابخانه هاي مفصلي مثل VCL و MFC هم استفاده شده باشه ؛ ليکن در مجموع ميشه تا حدود زيادي به خروجي Disassembler هاي امروزي براي درک منطق و روند فعاليت برنامه اعتماد کرد.
سوال : Disassembler چه کاربردهائي دارد ؟
جواب : فرض کنيد قرار روتين مقايسهء سريال نامبر يک Protection کودکانه رو بررسي کنيد . ديباگر بهتون کمک خواهد کرد تا بتونيد نقل و انتقال مقادير بين متغيرها و محل انجام مقايسه رو پيدا کنيد ؛ و Disassembler کمک خواهد کرد با مشاهدهء دقيق و تک تک دستورات ، انتخابهاي خوبي براي عبور از اون حفاظ يا توليد يک Patch و دستکاري نسخهء باينري برنامه داشته باشيد . براي يک نفوذگر نرم افزاري حرفه اي ، مطالعهء خروجي Disassembler از يک روال حفاظتي ، معادل مطالعهء سورس کده !
Disassembler هاي معتبر و قابل اتکاء تحت ويندوز يعني IDA Pro و WinDasm و PView ، داراي امکانات ديگري هم هستند :
• - آناليز کد و ايجاد ارتباطات بصري بين اجزاء و روتينهاي مختلف برنامه ؛ نمايش توالي اجرا توابع و کاربري از اشياء و ...
- آناليز کد باينري و تشخيص توابع داخلي بکار برده شده توسط کامپايلرها و ارائه کامنت هاي مفيد
- ارائه کردن امکانات يک ديباگر در کنار Disassembler
- و ...
در مجموع ، Disassembler به عنوان دومين ابزار مهم در حوزهء امنيت نرم افزار ، يکي از عناصر لا ينفک يک روند حرفه اي آناليز و بررسي باينري است . IDA Pro توسط يک تيم توسعه گر هماهنگ و قدرتمند قدرتمند ترين Disassembler موجود در محيط ويندوز است . ( يک نسخهء مبتني بر لينوکس هم داره ، ليکن انتظارات نسخهء ويندوزي رو نميشه ازش داشت ) اين محصول با Borland C توسعه داده ميشه و يک دورهء فشردهء آموزشي اون توسط خود شرکت توسعه گر ، به مدت چهار روز ، براي هر نفر ، چيزي حدود هزار و پانصد دلار هزينه در بر خواهد داشت . WinDasm ديگه تحت توسعه نيست و نسخه هاي جديدتري نخواهد داشت . آخرين نسخه رسمي 8.9 است که دو نسخه 9 و 10 هم توسط افرادي که براش Patch هائي نوشتن منتشر شدن . WinDasm مدتها به عنوان ابزار شمارهء يک استفاده شده ( خصوصا با توجه به گرون قيمت بودن IDA ) و بسياري از مقالات و راهنماهاي موجود مبتني بر اون نوشته شده اند . IDA Pro با داشتن آنالايزر قدرتمند و امکان شناسائي کتابخانه هاي مختلف ، داشتن پلاگينها متعدد و قابليتهاي بي شمار ( که بي اغراق امکان نداره حتي بشه در غالب يک کتاب در مورد همشون حرف زد ) بهترين گزينهء موجوده هر چند تسلط به اون حتي براي کسانيکه دانش بالائي دارند واقعا" دشوار و پر هزينه خواهد بود .
 

rezazd

عضو جدید
سلام :)

من برای درس زبان ماشین و اسمبلی یه پروزه در باره ی disassemblerدارم.اگر کسی

اطلاعاتی داره یا یه برنامه disassembler ( با طرز کارش)لطفآ برام بذاره.

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