آموزش مقدماتی کار با ابزار Ollydbg در تحلیل بدافزار

چکیده

در تحلیل بدافزارها ابزارهای متعددی ارائه شده ‏اند که هر کدام ویژگی های خاص خود را دارند و به نوبه‏ ی خود بار مسئولیتی را از روی دوش متخصصانی که در زمینه تحلیل بدافزارها خدمت‏ رسانی می‏ کنند کم کرده ‏اند البته با رایج شدن این‏ گونه ابزارها مشکلی دیگری به وجود آمده از جمله، هماهنگ نبودن این ابزار ها با هم و همین‏طور افزایش روز‏ افزون تعداد و تنوع این ابزارها متخصصین مجبور به استفاده از ابزارهایی محوری شده‏ اند، به این معنی که( بدون توجه به هزینه‏) ابزاری را انتخاب می‏ کنند که دربرگیرنده‏ ی بیشترین و به ‏روزترین امکانات باشد.

در میان تمام این ابزارها هیچ‏کدام کامل نیستند، به طوری که بتوان با استفاده از آن به ابزاری دیگر متوصل نشد، اما می‏ توان در میان آنها نمونه ‏هایی پیدا کرد که می ‏توان گفت اکثر نیازها را در خود جای داده است اما همان طور که گفته شده کامل نیست.

به طور کلی و اجمالی ابزارهایی که عموما به صورت محوری مورد استفاده قرار می‏گیرد دو ابزار IDA و Ollydbg نام دارند، که هر کدام با هم تشابهات زیاد ولی تفاوت های بیشتری دارد.

در این مقاله می‏خواهیم مختصری به طریقه ‏ی استفاده از Ollydbg بپردازیم و همین طور اصلی ترین ویژگی‏ ها این برنامه یعنی انواع نقاط شکست و تکنیک های ردیابی را معرفی خواهیم کرد و مثال هایی هم در این رابطه خواهیم آورد.

واژه ‏های کلیدی: تحلیل بدافزار، Ollydbg.

 

مقدمه

بدون شک برای وارد شدن در دنیای رقابت مهاجمان و مدافعان سایبری باید از به روز ترین ابزارهای موجود که افراد با تجربه توصیه می کنند استفاده کنیم. که در ادامه ما به بررسی یکی از آن ها خواهیم پرداخت و البته اشاره هایی به ابزار های مشابه و پیش نیاز خواهد شد.

تحلیل بدافزار

تحلیل بدافزار به فرآیندی اطلاق می شود که طی آن تحلیل گران سعی دارند عملکرد یک برنامه را مورد بررسی قرار دهند و به هدف اصلی یک برنامه پی ببرند. این فرآیند معمولا از دو بخش اصلی تشکیل شده است که اول تحلیل گران یک برنامه، چه کوچک و چه بزرگ، را بررسی می کنند که آیا عمل مخربانه ای انجام می دهد یا نه و سپس در مرحله ی دوم اگر عمل مخربانه ای در برنامه ی هدف شناسایی شود به تحلیل عمیق تر برنامه خواهند پرداخت و به بررسی این خواهند پرداخت که چگونه برنامه ی مورد نظر این عمل مخربانه را انجام می دهد. درست در مرحله ی دوم است که حجم کار تحلیل به شدت زیاد می شود.

تحلیل بدافزار عموما به دو طریق صورت می گیرد، ایستاتیک و داینامیک.

این دو روش تفاوت ها و شباهت های زیادی با هم دارند که در ادامه بیشتر بحث خواهد شد.

یکی دیگر از ابزارهایی که معمولا تحلیل گران مورد استفاده قرار می دهند جعبه شنی است که یک محیط ایمن برای پیش گیری از خطرات احتمالی به وجود آمده در حین تحلیل بدافزار را فرآهم می کند.(در ادامه توضیح مختصری داده خواهد شد)

تحلیل بدافزار توسط ابزارهای زیادی ممکن انجام شود تا به نتیجه ای مطلوب برسد. ما در ادامه به معرفی یک ابزار قدرتمند در این زمینه خواهیم پرداخت.

 

جعبه شنی

جعبه شنی (Sandbox) اصطلاحا به سیستم کامپیوتری اطلاق می شود که منزوی از محیط بیرون بوده و هیچ گونه ارتباطی با دیگر سیستم ها یا دستگاه ها ندارد و حال این محیط به اصطلاح منزوی (ایزوله)، در تحلیل بدافزار، موقعی به کار خواهد آمد که بخواهیم بدافزاری را اجرا کنیم و عملکرد آن را در حین اجرا شدن در سیستم مورد بررسی قرار دهیم و قصد و نیت اصلی بدافزار را کشف و آن را افشا کنیم.

به طور کلی جعبه شنی را به دو دسته تقسیم بندی می کنند:

  1. جعبه شنی نرافزاری که بر روی سیستمی به نام میزبان قرار می گیرد و دسترسی به فایل ها و سیستم میزبان از آن گرفته می شود و همین طور هر گونه ارتباط با خارج.
  2. جعبه شنی فیزیکی که تشکیل شده از یک یا چند کامپیوتر که در محیطی منزوی قرار می گیرند. اگر از چند دستگاه استفاده شده باشد، بین دستگاه ها ارتباط شبکه برقرار می شود.

 

تحلیل بدافزار به صورت ایستاتیک

در این نوع تحلیل عموما بدافزار اجرا نخواهد شد و فقط کدهای باینری برنامه ترجمه خواهند شد و تحلیل بر اساس آن صورت خواهد گرفت.

ابزاری که عموما برای تحلیل بدافزارها به صورت ایستا استفاده IDA است که از امکانات حرفه ای و خوبی برخوردار است که توضیحات آن مفصل است و در مقاله ی دیگر بیشتر مورد بررسی قرار خواهد گرفت.

 

تحلیل بدافزار به صورت داینامیک

در این نوع تحلیل بدافزار معمولا بدافزار مستقیما در سیستم اجرا خواهد شد و برای کنترل بر روی روند اجرایی بدافزار یک دیباگر (اشکال زدا) به بدافزار اختصاص داده می شود تا کنترل مورد نظر بر روی بدافزار حاصل شود و از همین طریق می توان مستقیما رفتار بدافزار را مورد بررسی قرار داد.

در تحلیل داینامیک، الزاما مجبور به استفاده از تکنیک جعبه شنی هستیم، چون بدافزار را برای بررسی رفتارش مستقیما اجرا می کنیم و عملا بدافزار ممکن است در طی تحلیل عمل مخربانه خود را کامل اجرا کند و ما در دفعات اول متوجه آن نشویم برای همین استفاده از جعبه شنی الزامی است.

ابزاری که عموما برای این نوع تحلیل بدافزار مورد استفاده قرار می گیرد ollydbg  نام دارد که همان طور که از اسمش پیدا است می توان فهمید که یک دیباگر است.

در ادامه این مقاله به بررسی اجمالی این ابزار قدرتمند در زمینه تحلیل بدافزار خواهیم پراخت.

Ollydbg

اول از همه اینکه ollydbg یک دیباگر قدرتمند در زمینه تحلیل بدافزار است که حتی امکاناتی بیش از یک دیباگر را به کاربر ارائه می دهد.

از نکاتی مثبتی که می توان برای این برنامه کاربردی نام برد، شامل: محیطی گرافیکی و قابل فهم ، رایگان بودن نسخه های مختلف برنامه، بهره بردن از دیس اسمبلری (disassembler) قدرتمند و دیگر ویژگی هایی است که عموما در یک برنامه یکپارچه بدین شکل نمی توان دید را در خود دارد.

 

نصب و راه اندازی

این ابزار نیاز به نصب ندارد و فقط کافی است به درگاه(وب سایت) اختصاصی ollydbg مراجعه کنید و آخرین نسخه برنامه را دانلود کنید.

آدرس درگاه: www.ollydbg.de

(آخرین نسخه ای که برای این ابزار کاربردی در هنگام تنظیم  این مقاله ارائه شده است نسخه ی ۲.۰.۱ است.)

بعد از دانلود آخرین نسخه برنامه، فایل زیپ آن را از حالت فشرده خارج کنید و فایل های برنامه را در پوشه ای(Folder) جدا قرار دهید.

(توجه : فایل های برنامه را درون دسکتاپ یا صفحه اصلی قرار ندهید.)

حال بعد از انجام مراحل بالا،بر روی فایل اجرایی، فایل با پسوند .exe و نام ollydbg، کلیک راست کنید و بر روی گزینه ی Run as administrator کلیک کنید و بعد با زدن گزینه ی yes، برنامه را اجرا کنید.(همیشه برنامه را به این طریق اجرا کنید)

حال می توانید از برنامه استفاده کنید.

شروع به کار با ابزار

خوب به طریقی که گفته شد برنامه را اجرا کنید.

شکل ۱ محیط کار ollydbg

باز کردن یک فایل در ollydbg

Ollydbg این قابلیت را دارد که هم فایل های اجرایی(فایل های با پسوند .exe) و هم فایل های با پسوند .dll را باز کرد.

  • برای باز کردن فایل های اجرایی در ollydbg کافی فایل مورد نظر خود را با انتخاب گزینه ی open از منوی file بالای صفحه و از پنجره ی ظاهر شده انتخاب کنید. در این صورت برنامه توسط ollydbg اجرا شده و یک دیباگر(debugger) به روند آن اختصاص داده می شود، تا بتوان فایل مورد نظر را مورد تحلیل و بررسی قرار داد.
  • برای باز کزدن فایل های با پسوند .dll به طریق گفته شده در بالا عمل کنید فقط چون نمی توان این گونه فایل ها را به تنهایی اجرا کرد ollydbg یک برنامه کمکی برای انجام این کار به نام LOADDLL.EXE در اختیار دارد که با اجرای آن و سپس وارد کردن فایل .dll مورد نظر خود در این برنامه کمکی فایل را باز خواهد کرد.
  • روش دیگری که در ollydbg وجود دارد این است که شما قادرید با چسباندن یک دیباگر به یک روند در حال اجرا درسیستم به کدهای آن روند اجرا دسترسی پیدا کنید و عملکرد آن را مورد تجزیه و تحلیل قرار دهید البته باید شناسه روند اجرا(process id) و شناسه نخ(thread id) برنامه مورد نظر خود را داشته باشید تا بتوانید نخ مربوط به روند اجرای مورد نظر خود را پیدا کنید.این کار از طریق انتخاب گزینه ی attach از منوی file قابل انجام است.

بخش های پرکاربرد ollydbg

در شکل ۱ شما چهار بخش اصلی برنامه که بیشترین کاربرد را خواهند داشت می بینید که عبارت اند از:

۱. پنجره ی دیس اسمبلر(disassembler): کدهای دیباگ شده ی برنامه را نشان می دهد، در واقع این کدهای اسمبلی(assembly) دستورات ترجمه شده از روی کدهای باینری ذخیره شده درون حافظه ی فایل اجرایی برنامه است که بر روی حافظه رم(ram) مجسم(map) شده اند. در اینجا دستوری که قرار است اجرا شود به صورت نشانه گزاری شده نشان داده خواهد شد. بیشترین عملیات از طریق همین بخش از ollydbg صورت می گیرد. یعنی تحلیل، تغییر، حذف و اضافه کردن کدها در اکثر مواقع از این بخش است، البته نه به تنهایی.

 

۲. پنجره ی رجیستر(register): در این جا شما رجیستر های مربوط به برنامه را مشاهده می کنید. هنگامی که کدها دیباگ می شوند این داده ها تغییر می کنند و با تغییر هر ریجستری بعد از اجرای هر دستور آن قسمت به رنگ قرمز در خواهد آمد. به عبارت دیگر از این بخش شما می توانید اطلاعات ذخیره شده در رجیستر مربوط به اجرای هر دستور برنامه را مشاهده کنید. به علاوه از این قسمت شما می توانید خود داده های داخل ریجستری را تغییر دهید.

 

۳. پنجره ی پشته(stack): از این قسمت می توانید وضعیت فعلی پشته داخل حافظه مربوط به نخ(thread) دیباگ شده از برنامه را مشاهده کنید.

 

۴. پنجره ی Memory dump: از این جا بخشی از حافظه ی زنده از روند دیباگ شده را خواهید دید که دقیقا همان کدهای باینری داخل فایل اجرایی برنامه است که به صورت زنده می توان موقعیت آن ها را روی حافظه مشاهده کرد و حتی آن ها را دستخوش تغییرات کرد. شما می توانید توسط این قسمت به هر بخشی از حافظه که می خواهید بروید و تغییراتی را اعمال کنید. این می تواند در تغییر متغیرهای جهانی و دیگر داده هایی که بدافزار در حافظه ی اصلی ذخیره کرده، مورد استفاده قرار گیرد.

از دیگر بخش های پر کابرد که در اکثر مواقع مورد استفاده قرار می گیرند می توان به چند مورد زیر اشاره کرد که همگی از منوی view قابل دسترس هستند.

  •  پنجره ی نقشه حافظه(memory map)

از این پنجره شما می توانید موقعیت بدافزار و dll هایی که بدافزار از آن ها استفاده می کند را مشاهده کنید و همین طور بخش هایی(section) که بدافزار و dll ها در خود دارند. این پنجره از دیگر ابزارهای پر کاربرد برنامه ollydbg است که به کاربر کمک می کند موقعیت و حجم بخش های مختلف یک برنامه و dllهای آن را مورد بررسی قرار داد و حتی به آن ها دسترسی داشت.با کلیک راست کردن بر روی هر کدام از این بخش ها و زدن گزینه ی dump in cpu یا گزینه ای مشابه، به کدهای قرار گرفته در آن قسمت از حافظه دسترسی پیدا کرد و حتی تغییراتی در آن ایجاد کرد.

 

  • پنجره ی نخ ها(threads)

از این پنجره در مواقعی استفاده می شود که بدافزار دارای چندین نخ است که توسط این پنجره می توان به دیگر نخ های برنامه دسترسی پیدا کرد و آن نخ را دیباگ کرد و حتی بین نخ ها جابه جا شد، البته باید توجه داشت که در هر لحظه، با ollydbg، فقط می توان یک نخ را دیباگ کرد.

 

نقاط شکست(breakpoint)

شاید بتوان گفت که مهم ترین ابزاری که در تحلیل کدها مورد استفاده قرار می گیرد نقاط شکست هستند که باید متوقف شدن روند اجرایی برنامه در مکانی می شود که ما در آن جا نقطه ی شکستی را تعریف کرده ایم.

اگر دقت کرده باشید وقتی فایلی را در ollydbg برای دیباگ کردن آماده می کنید برنامه در نقطه ای متوقف می شود و با زدن کلید   به برنامه اجازه می هید اجرا شود. نقطه ای که ollydbg برنامه را در آن جا متوقف می کند در اصل یک نقطه ی شکست است که ollydbg به طور پیشفرض تنظیم می کند تا بتواند روند برنامه را در کنترل بگیرد.

انواع نقاط شکست

در ollydbg چهار نوع نقطه ی شکست وجود دارد:

۱.نقاط شکست نرم افزاری

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

برای استفاده از این نوع نقاط شکست کافی است دستور مورد نظر را از پنجره ی دیس اسمبلر انتخاب کنید و سپس کلید f2 را بزنید تا نقطه ی شکست مشخص شود. و بعد برنامه را  اجرا کنید تا به نقطه شکست مورد نظر رسیده و متوقف شود. برای ادامه روند اجرایی از نقطه ی شکست مشخص شده دوباره از کلید play استفاده کنید.

توجه کنید که ممکن است در محلی نقاط شکست خود را قرار دهید که به ندرت اجرا می شوند و ممکن است آن دستور اجرا نشود و همین باعث شود که برنامه به طور کامل اجرا شود و کنترل برنامه از دست برود.

این نقاط شکست چون مقادیر درون حافظه را تغییر می دهند ممکن توسط خود بدافزار شناسایی بشوند و بدافزار نسبت به آن از خود واکنش دفاعی نشان دهد.

۲. نقاط شکست شرطی

این نوع نقاط شکست از تکنیک نقاط شکست نرم افزاری استفاده می کنند اما با این تفاوت که یک شرط به آن تخصیص داده می شود که در صورتی که شرط در آن نقطه برقرار شد برنامه متوقف می شود.

برای استفاده، دستور مورد نظر را از دیس اسمبلر انتخاب کنید و بعد کلیک راست کرده و از شاخه breakpoint گزینه ی conditional را انتخاب کنید و بعد در پنجره ی ظاهر شده شرط مورد نظر خود را وارد کنید.

۳. نقاط شکست سخت افزاری

این نقاط شکست نیز عملکردی مشابه نقاط شکست نرم افزاری دارند با این تفاوت که در اطلاعات حافظه تغییری ایجاد نمی کنند و این کار را توسط خود رجیسترهای اختصاصی سخت افزار انجام می دهند. استفاده از این نوع نقاط شکست سریعتر و بهینه تر از دیگر نقاط است اما محدودیتی که دارند این است که فقط چهار عدد از این نوع نقطه ی شکست قابل استفاده است.

از این نقاط شکست می توان با انتخاب دستور مورد نظر و راست کلیک کردن و انتخاب گزینه Hardware از شاخه ی breakpoint استفاده کرد.

۴. نقاط شکست حافظه

از این نوع نقاط شکست می توان برای گذاشتن نقطه ی شکست بر روی ناحیه ای از حافظه استفاده می شود و می توان دسترسی، تغییر و اجرا شدن کدهای آن بخش از حافظه را کنتری کرد. این نوع هم به صورت نرم افزاری و هم به صورت سخت افزاری در دسترس هستند.

توجه کنید که این نوع نقاط شکست به دلیل این که قابل اعتماد نیستند، بهتر است کمتر مورد استفاده قرار بگیرند.

در همه ی انواع نقاط شکست می توان با انتخاب دستورات مورد نظر خود و سپس راست کلیک کردن بر روی آن و استفاده از گزینه های موجود در شاخه ی breakpoint، به تمام انواع نقاط شکست که در دسترس هستند دسترسی خواهید داشت و می توانید از آن ها استفاده کنید.

برای فهم بهتر طریقه ی استفاده از نقاط شکست از یک مثال کوچک استفاده می کنیم.

مثالی برای فهم بهتر عملکرد نقاط شکست

در نسخه ی ۲.۰.۱ یک برنامه آزمایشی به نام test در کنار برنامه ollydbg قرار داده شده است که می توان از آن برای فهم بهتر قابلیت های ollydbg استفاده کرد.

برای شروع برنامه ollydbg را باز کنید و سپس توسط ollydbg برنامه test.exe را برای دیباگ کردن باز کنید. بعد از شروع روند دیباگ به برنامه توسط گزینه ی اجازه دهید برنامه test به طور کامل اجرا شود. حال از خود برنامه test بر روی گزینه ی read‪[_break]‬ را انتخاب کنید در این صورت برنامه کد باینری محلی از حافظه را که با لیبل(Label) _break مشخص شده است می خواند و مقدار آن را نشان می دهد(مقدار ۰x90). حال به ollydbg برگردید و در پنجره ی دیس اسمبلر کلیک راست کنید و از شاخه ی Goto گزینه ی Expression را انتخاب کنید. در پنجره ی ظاهر شده عبارت _break را وارد کنید و بعد کلید Follow Expression را انتخاب کنید تا دیس اسمبلر به آدرسی از حافظه که لیبل _break به آن تخصیص داده شده است مراجعه کند.

شکل ۲ مقدار لیبل break

همان طور که در پنجره ی دیس اسمبلر مشاهده می کنید. مقدار باینری نشان داده شده در همان مقداری است که در برنامه test هنگام انتخاب گزینه ی read‪[_break]‬ مشاهده کردید. حال ما می خواهیم یک نقطه شکست نرم افزاری در این محل قرار دهیم. برای این کار دستور مشخص شده در شکل بالا را انتخاب کنید و کلید f2 را برای گذاشتن یک نقطه ی شکست نرم افزاری بفشارید.حال دوباره از پنجره ی برنامه test بر روی کلید read‪[_break]‬ کلید کنید این بار مقداری دیگر مشاهده می کنید(۰xCC) که نشان می دهد در این نقطه یک نقطه ی شکست نرم افزاری تنظیم شده است که خود برنامه test از وجود آن مطلع شده است.

در ادامه به پنجره ی برنامه test برگردید و بر روی گزینه ی Call _break کلیک کنید این گزینه روند اجرایی را به آدرسی که با لیبل _break مشخص شده است انتقال می دهد و به جای خواندن مقدار از آدرس مورد نظر آن را اجرا می کند.حال اگر در آدرس مشخص شده یک نقطه ی شکست تنظیم شده باشد با زدن کلید مذکور، برنامه ollydbg اجرا را در محل لیبل _break متوقف می کند.در این صورت با زدن کلید   می توان به برنامه اجازه داد که روند اجرایی را ادامه دهد.

حال می خواهیم تفاوت نقاط شکست نرم افزاری و سخت افزاری را ملموس تر کنیم.

به محل لیبل _break بروید و با زدن کلید f2 نقطه ی شکست قبلی را حذف کنید. حال بر روی دستور موجود در مکان لیبل _break کلیک راست کرده و یک نقطه ی شکست سخت افزاری بر اساس اجرای دستور مشخص شده تنظیم کنید.

شکل ۳ پنجره ی تنظیم نقطه ی شکست سخت افزاری

 

به پنجره ی برنامه test برگردید و کلید read‪[_break]‬ را بزنید این بار مقدار موجود در آدرس لیبل _break تغییری را نشان نمی دهد اما با کلیک بر روی گزینه ی call _break خواهید دید که برنامه دوباره در آدرس لیبل _break متوقف خواهد شد و در پنجره ی دیس اسمبلر دستور دارای نقطه شکست را نشان می دهد. حال به برنامه اجازه دهید اجرا شود. به محلی که نقطه ی شکست سخت افزاری در آنجا قرار داده اید بروید و دوباره نقطه ی شکست سخت افزاری در آنجا تنظیم کنید البته این بار در قسمت break on: پنجره ی ظاهر شده از حالت Access ‪(R/W)‬ استفاده کنید. حال از برنامه ی test کلید call _break را بفشارید خواهید که برنامه در نقطه شکست متوقف نخواهد شد. حال کلید read‪[_break]‬ را بفشارید، خواهید دید که برنامه در مکانی دیگر نسبت به آن چه قبلا دیده اید متوقف خواهد شد این مکان جایی است که دستور مشخص شده سعی دارد مقدار موجود در آدرسی که شما نقطه ی شکست در آن جا مشخص کرده اید را بخواند که در این صورت نقطه ی شکست فعال شده و برنامه را متوقف می کند.

این آزمایش با استفاده از نقاط شکست حافظه کاملا نتایج مشابهی دارد اما فقط سرعت اجرا را به شدت کاهش می دهند.

ردیابی(Trace)

ردیابی ابزار قدرتمندی در تکنیکهای دیباگ است که جزئیات اجراهای شما را ثبت می کند. ollydbg سه نوع ردیابی را پشتیبانی می کند : standard back trace ، call stack trace و run trace.

Standard Back Trace

هر لحظه که از پنجره ی disassembler همراه با گزینه های trace-into , trace-over استفاده می کنید حرکات شما ثبت می شود و می توانید با استفاده از دو کلید + و – به مراحل بعدی و قبلی بروید. البته از این روش در محدوده ای از کدها می توانید استفاده کنید که قبلا در آنجا برنامه را متوقف کرده اید. شما نمی توانید به عقب برگردید و راه دیگری از برنامه را امتحان کنید و نکته ی دیگر این است که فقط جزئیات بخش اندکی از دستورات اجرا شده تا قبل از رسیدن به نقطه ی شکستی که موجب توقف برنامه شده است ذخیره می شود با این حال حجم اختصاص داده شده به این کار را می توان افزایش داد ولی تا حجم محدودی.

Call Stack Trace

شما می توانید از ollydbg برای مشاهده ی مسیر اجرایی توابع در Call Stack  استفاده کنید. برای مشاهده ی Call Stack از منوی اصلی View -> Call Stack را انتخاب کنید. شما پنجره ای را که دنباله ای از فراخوانی ها را تا نقطه ی فعلی که در آن جا قرار دارید را نشان می دهد مشاهده خواهید کرد و از طریق همین اطلاعات شما می توانید توابعی را که مورد استفاده قرار گرفته اند را ببینید و به آدرس آن توابع هم دسترسی دارید. اما تغییرات ایجاد شده در register ها و stack را دراین مکان ها نمی توانید ببینید، مگر اینکه run trace را انجام دهید.

Run Trace

Run trace به شما این اجازه را می دهد که کد را اجرا کنید و ollydbg همه ی دستورات اجرا شده و تغییرات صورت گرفته در registerها و flag ها را نشان می دهد.

راه های زیادی برای فعال کردن run trace وجود دارد:

  • کدی که می خواهید در disassembler ردیابی کنید مشخص کنید و راست کلیک کنید و run trace -> add selection را انتخاب کنید.بعد از اجرای آن کد، گزینه ی view -> run trace را برای مشاهده ی دستورات اجرا شده انتخاب کنید. از کلید های + و – برای جابه جایی بین کد های اجرا شده استفاده کنید با انجام این کار شما میتوانید تغییرات ایجاد شده در registerها بعد از اجرای هر دستور را مشاهده کنید.
  • از گزینه های trace into و trace over استفاده کنید. استفاده از این دو گزینه خیلی ساده تر از روش قبلی است، گزینه ی trace into عملی مشابه step into انجام می دهد به علاوه تمام تغییرات انجام شده توسط هر دستور را ثبت می کند تا زمانی که به یک breakpoint برخورد بکند و گزینه ی trace over همین کار را فقط با تابع فعلی انجام می دهد.

توجه : اگر از گزینه های trace into و trace over بدون breakpoint استفاده شود ollydbg سعی می کند که کل برنامه را ردیابی کند، که باعث می شود زمان و حافظه ی بیشتری صرف شود.

  • از conditional debug استفاده کنید. در این صورت شما می توانید تا زمانی که یک شرط برقرار شده برنامه را trace کنید. این برای موقعی مناسب است که برنامه را می خواهید تا جایی trace کنید که شرطی رخ می دهد و بعد قصد دارید برگردید و دلایل برقرار شدن این شرط را بررسی کنید.

مثالی برای فهم بهتر عملکرد ردیابی

برنامه test را باز کنید و بر روی گزینه ی jmp 123456 کلیک کنید، خواهید دید که برنامه متوقف می شود و از آن خارج می شود. حال می خواهیم علت این مشکل را پیدا کنیم و آن را رفع کنیم.

برنامه test را با استفاده از ollydbg باز کنید و از مسیر Options | Debugging گزینه Allow fast command emulation را فعال کنید و سرعت دیباگ برنامه را افزایش دهید. حال از مسیر Options | Run trace گزینه ی Don't enter system DLLs را غیر فعال کنید و برنامه را با گزینه ی   دوباره بارگزاری کنید و بعد به برنامه اجازه دهید اجرا شود. و بعد با زدن گزینه ی    برنامه را متوقف کنید و run trace را شروع کنید. 

حال از برنامه test گزینه ی jmp123456 را بزنید و بعد از متوقف شدن برنامه کلید را بفشارید. در نتیجه پنجره  زیر را مشاهده خواهید کرد که می توانید دستوری را که این مشکل را به وجود آورده است مشاهده کنید.

شکل ۴ آخرین دستورات ردیابی شده قبل از توقف برنامه

آخرین کد اجرا شده را در دیس اسمبلر دنبال کنید و دستور JMP EAX را با زدن کلید space و سپس وارد کردن دستور Nop جایگزین کنید و این تغییرات در فقط در حافظه صورت گرفته است برای ذخیره آن در حافظه جانبی، بر روی خطوطی تغییر ایجاد کرده اید کلیک راست کرده و از edit گزینه ی copy all modifications to executable را بزنید و پنجره ی ظاهر شده را ببندید و گزینه ی yes را بزنید و اسمی برای برنامه تغییر داده شده وارد کنید و گزینه ی save را بزنید حال برنامه جدید ایجاد شده را باز کنید و jmp 123456 را بفشارید دیگر برنامه دچار مشکل نمی شود و به درستی اجرا می شود.(این مثال را بهتر است در ویندوز ۷ انجام دهید)

 

دریافت نسخه PDF: