دانلود پژوهش های پیشین در رابطه با شبیه سازی محیط … – منابع مورد نیاز برای مقاله و پایان نامه : دانلود پژوهش های پیشین |
گزینههای غیر بستهای کردن: گزینههای زیادی برای برنامههای بستهای و غیربستهای وجود دارد: آنالیز غیربستهای کردن اتوماتیک آنالیز غیرپویا یا غیربستهای کردن و غیربستهای کردن غیراتوماتیک.
( اینجا فقط تکه ای از متن فایل پایان نامه درج شده است. برای خرید متن کامل پایان نامه با فرمت ورد می توانید به سایت feko.ir مراجعه نمایید و کلمه کلیدی مورد نظرتان را جستجو نمایید. )
تکنیکهای غیربستهای کردن اتوماتیک سریعتروآسان تراز تکنیکهای بستهای کردن غیراتوماتیک است. اما این تکینیکها همیشه جواب نمیدهند. اگر شما زمانی تشخیص دادید که برنامه بستهای شده است، باید بررسی کنید که آیا یک برنامه غیربستهای کننده اتوماتیک موجود است یا نه. زمانی که با یک بدافزار بستهای شده سروکار دارید به خاطر داشته باشید که هدف شما آنالیز رفتار آن بدافزاردست و لازم نیست که شما یک بدافزار را از نو خلق کنید. بیشتر وقتها، زمانی که شما یک بدافزار را غیربستهای میکنید شما برنامهای میسازید که شبیه برنامه اصلی و اولیه نیست. اما دقیقا کارهایی مثل برنامه اولیه انجام میدهد.
۳-۸ غیر بسته ای کردن
۳-۸-۱ خودکار
غیربستهای کردن اتوماتیک: برنامههای غیربستهای کننده اتوماتیک برنامه اجرایی را ازحالت فشردگی درمی آورند و رمزگشایی میکنند. این بهترین و سریعترین روش است. هر برنامه غیربستهای کننده برای یک بستهای شده خاص نوشته شده است و برای بستهای شدههایی که جلوی آنالیز را میگیرند طراحی شده است. PE Explorer یک برنامه مجانی برای کار با EXE و فایلهای Dll است در
پیش فرض خود چندین برنامه غیربستهای کننده را دارد. اگر این نرمافزار تشخیص دهد که فایل شما انتخاب کردید بستهای شده است آن را به صورت اتوماتیک بازمی کند. غیربستهای کنندههای اتوماتیک دینامیک برنامه اجرا را اجرا میکند و اجازه میدهند که زیر برنامه غیربستهای کننده کد برنامه اصلی را باز کند. زمان که برنامه قابل اجرای اصلی بازشد، برنامه به ری دیسک نوشته میشود. برنامههای غیربستهای کننده اتوماتیک باید مشخص کند که در کجا زیر برنامه به پایان میرسد و برنامه اصلی شروع میشود. که این کار دشواری است. اگر بستهای شده نتواند انتهای برنامه زیر برنامه غیربستهای کننده را تشخیص دهد، برنامه غیربستهای کننده نمیتواند به درستی کارکند. متأسفانه اخیرا برنامههای غیربستهای کننده دینامیک واتوماتیک خوبی دربازار موجود نیست. آنها کارهای زیادی برروی بستهای شده انجام میدهد اما برای استفادههای جدی آماده نیستند. هردو تکنیک غیربستهای کننده به سرعت کار میکند و آسان هستند. اما موفقیت کمی دارند. یک تحلیل گر بدافزاری باید تفاوت بین کد غیربستهای کنندههای غیردینامیک ودینامیک را بداند. دینامیکها برنامه را اجرا میکنند اما غیردینامیکها برنامه را اجرا نمیکنند هرزمانی که برنامه اجرا میشود باید اطمینان حاصل کرد که این برنامه در محیطی امن اجرا میشود.
۳-۸-۲-غیر خودکار
گاهی اوقات یک بدافزار بستهای شده میتواند بصورت اتوماتیک بسته بندی شود اما بیشتر مواقع این برنامه باید به صورت غیراتوماتیک بازشود. این کارگاهی اوقات با سرعت انجام میشود ما گاهی اوقات نیز بسیاردشوار است. دوراهکار متداول برای غیربستهای کردن غیراتوماتیک وجود دارد:
الف) الگوریتم بسته بندی را پیداکنید و کدبرنامه را به گونهای بنویسید که آن را برعکس یا معکوس اجرا کند. با این کار برنامه هرکاری را که برای بستهای کردن برنامه انجام شد برعکس انجام میدهد. ابزارهای اتوماتیکی برای این کار وجود دارد. اما این راهکار هنوز کارایی لازم را ندارد. زیرا برنامه غیربستهای کردن باید مخصوص برنامه بسته بندی کردن به کاربرده شده باشد.
بنابراین پروسه زمان بسیار طولانی را میخواهد برنامه بستهای کردن را به گونهای اجرا کنیم که زیر برنامه کارکند (یعنی ازکار بیفتد و برنامه را ازحافظه پاک کند. این یک راهکار بسیار کاراتراست. بیایید راجع به فرایند غیربستهای کردن غیراتوماتیک بحث و صحبت کنیم. برای این مثال ما برنامهای را بازمی کنیم که با برنامه upx بسته بندی شده است. اگرچه upx میتواند به اسانی به طور اتوماتیک بازشود، این مثال نمونه خوبی را به ما نشان میدهد. اول با بارگذاری این برنامه در ollydbg شروع میکنیم. اولین کاریافتن نقطه اصلی ورودی است. که اولین دستور برنامه قبل از بسته بندی شدن است. یافتن نقطه اصلی ورودی یکی از سختترین مراحل است و بعدا در مورد آن دراین فصل صحبت خواهیم کرد.
برای این مثال ما از ابزار اتوماتیک استفاده میکنیم که بخشی از ollydby است. در ollydbg؛ گزینه plugin را انتخاب کنید سپس گزینه ollyDbg سپس Find نقطه ورودی اصلی by section hop. برنامه قبل از آنکه نقطه ورودی اصلی را اجرا کند به نقطه انفصال میرسد. زمانی که آن نقطه انفصال رسیدیم تمام کد در حافظه از حالت بسته بندی شده خارج میشود و برنامه اصلی آماده اجرا شدن است. بنابراین کد برای تحلیل قابل دید و در دسترس است. تنها نقطه باقی مانده اصلاح پرونده اجرایی قابل حمل برای این کد است تا تفسیرگر برنامه بتواند کد را به درستی بخواند. برنامه Debugger و یا اشکال زدا دستور را میشکند. مقدار عددی نقطه ورودی اصلی بنویسید و برنامه ollyDbg را نبندید. حالا گزینهها را به ترتیب زیر بزنید و انتخاب کنید.
Dump Debuygedpross← olly Dump← plugins
این دستور هرچیزی را از حافظه پاک میکند. گزینههای کمی برای این کار وجود دارد. خوشبختانه اگر شما هیچ گزینهای را به روی صفحه نمایش dump تغییر ندهید، گزینه ollyDump تمام این مراحل را به صورت اتوماتیک اجرا میکند. نقطه ورود این برنامه اجرایی باید برروی دستور کنونی و در حال جریان تنظیم شود وجدول دادههای ورودی از نو ساخته میشود. کلید Dump را فشار دهید و در حقیقت شما غیربستهای کردن این برنامه رابه پایان میرسانید. ما توانستیم در چند مرحله بسیار ساده برنامه را ازحالت بستهای خارج کنیم.
دوبارهسازی (بازسازی) جدول دادههای ورودی با بهره گرفتن از import Reconstructor بازسازی جدول داده بسیار پیچیده است وهمیشه در ollyDump کار نمیکند. Stub غیربستهای کننده باید دادههای ورودی را تجزیه تحلیل کند تا به برنامه کاربردی اجازه دهد تا اجرا شود. اما به بازسازی جدول داده ورودی احتیاجی ندارد زمانی که برنامه ollyDbg نتواند به درستی اجرا شود، باید تلاشی کنیم که از برنامه (import Reconstructor (import استفاده کنیم.
Imprec میتواند برای اصلاح جدول دادههای برنامههای بسته بندی شده استفاده شود.
برنامه imprec را اجرا کنید ومنو را دربالای صفحه بازکنید و سپس وارد نقطه ورودی اصلی RVA شوید که درقسمتنقطه ورودی اصلی درسمت چپ وجود دارد به عنوان مثال اگر تصویر ox400000 است و نقطه ورودی اصلی ox403904 است، ox3904 را وارد کنید. سپس دکمه IA، Tamtoseach را فشار دهید.
شماباید پنجره راکه پیغامی مبنی براینکه imprec آدرس برنامه ورودی را یافته است را ببینید. حالا روی getimports کلیک کنید. یک فرمت از توابع ورودی باید پدیدار شود اگر عملیات موفقیت آمیز باشد تمام ورودیها باید پیغام yes را بدهندواگر تابع به خوبی کار نکند دادههای ورودی نمیتوانند با بهره گرفتن از imprec اصلاح شوند ما فرض میکنیم که جدول دادههای ورودی با موفقیت یافته شد. دکمه fix Dump را فشار دهید شما برای اطمینان از این دکمه هرچیزی به درستی کار می کند باید فایل را اجرا کنید. اول باید از برنامههای غیربستهای کننده ابتدایی که برای همه برنامهها تاحدی جواب میدهد استفاده کرد. همانطور که قبلا بیان شد مهمترین چالش درغیربستهای کردن بدافزارها غیراتوماتیک یافتن نقطه ورودی اصلی است.
۳-۹- یافتن نقطه اصلی ورودی
برای یافتن نقطه ورودی اصلی راهکارهای فراوانی وجود دارد ویک راهکار به تنهایی برای همه بستهای شدهها جواب نمیدهد. تحلیل گر معمولا بر طبق سلیقه خود عمل میکنند. اما برای دسترسی به جواب و موفقیت بیشتر تحلیلگران بدافزارها باید با تمام تکنیکها آشنایی داشته باشند. انتخاب یک تکنیک نادرست میتواند بسیار زمان بر و ناامید کننده باشد. یافتن نقطه ورودی اصلی مهارتی است که به تمرین احتیاج دارد. این قسمت شامل چندین راهکار برای کمک به شما در افزایش مهارتتان است. برای یافتن نقطه ورودی اصلی شما باید برنامه بدافزار را روی اشکال زدا اجرا کنید و از نقاط انفصال و یا عملیات تک مرحلهای بهره ببرید. OllyDbg چهار نوع نقطه انفصال را که هر کدام برای اهداف مختلف بکار میروند پیشنهاد میدهد. استفاده از یک ابزار خودکار برای یافتن نقطه ورودی اصلی معمولاً آسانترین راه است. اما این ابزارهای خودکار همیشه کار نمیکنند و گاهی باید نقطه ورودی اصلی را به طریق دستی پیدا کنید.
۳-۹-۱-استفاده از یک ابزار خودکار در یافتن نقطه ورودی اصلی
در مثال قبل ما از یک ابزار خودکار دریافتی نقطه ورودی اصلی استفاده کردیم. این یک ابزار بسیار متداول برای یافتن OllyDump نقطه ورودی اصلی است. معمولاً ریشه غیر بسته کننده در یک قسمت و برنامه اجرایی در قسمت دیگر است. معمولاً بدافزار شامل توابع call هستند و قابل بازگشت نیستند تا اشکال زدا و یا تحلیلگر را گیج کنند. گزینه step-into در هر تابع call وجود دارد و احتمالاً تابع نقطه ورودی اصلی را مییابد. در عمل شما باید تلاش کنید که از روشهای step-over، step-into استفاده کنید.
۳-۹-۲-یافتن نقطه ورودی اصلی بصورت دستی
زمانی که روشهای خودکار برای یافتن نقطه ورودی اصلی جواب مناسب را به ما نمیدهد شما باید نقطه ورودی اصلی را بصورت دستی پیدا کنید. راحتترین راه، یافتن یک جهش ته است. همانطور که قبلاً ذکر شده این دستور از ریشه بازکننده به سمت نقطه ورودی اصلی جهش میکند. بطور عادی این یک دستور جهش است. اما بعضی از نویسندگان برنامههای بدافزاری آن را تبدیل به یک دستور ret میکنند تا ناتوانی آنها را تشخیص دهند. بطور کلی از IDA Pro برای جستجوی برنامههای بسته شده استفاده میشود.
۰۰۴۱۶C31 PUSH EDI
۰۰۴۱۶C32 CALL EBP
۰۰۴۱۶C34 POP EAX
۰۰۴۱۶C35 POPAD
۰۰۴۱۶C36 LEA EAX,DWORD PTR SS:[ESP-80]
۰۰۴۱۶C3A PUSH 0
۰۰۴۱۶C3C CMP ESP,EAX
۰۰۴۱۶C3E JNZ SHORT Sample84.00416C3A
۰۰۴۱۶C40 SUB ESP,-80
۰۰۴۱۶C43 uJMP Sample84.00401000
۰۰۴۱۶C48 DB 00
۰۰۴۱۶C49 DB 00
۰۰۴۱۶C4A DB 00
۰۰۴۱۶C4B DB 00
۰۰۴۱۶C4C DB 00
۰۰۴۱۶C4D DB 00
۰۰۴۱۶C4E DB 00
شکل۳-۱ یک نمونه از جهش ته
این مثال جهش ته را برای UPX در ۱ نشان میدهد که در آدرس ۰x00416c43 قرار دارد. دو مشخصه بطور واضح نشان میدهند که این یک دستور جهش ته است. این دستور در انتهای کد قرار دارد و به آدرس متصل میشود که بسیار دور است. دومین مشخصه اندازه است. معمولاً از جهشها برای گذارهها و جملات شرطی و دستورات شرطی استفاده میشود و معمولاً به آدرسهای دور میروند اما این جهش به آدرسی در ۰x15c43 بایت میرود. بطور عادی جهشها دربین همان تابع هستند و IDAPROفلشی به هدف دستور JMP خواهد کشید. در مورد جهش ته IDAPRO خطایی را مشخص میکند وخطا به رنگ قرمز درمی آید. جهش ته اجرا را به برنامه اصلی منتقل میکند که در یک دیسک بسته بندی شده است. بنابراین جهش ته به آدرسی میرود که حاوی دستور دسترسی نیست زمانی که بازکردن ریشه شروع میشود اما حاوی دستورات دسترسی میباشد، زمانی که برنامه درحال اجرا است.
دستور ADD BYTE PTR DS: [AX]، ALمتناظر با دو OXOO بایت است که یک دستور موجود نیست اما OLLYBDG تلاش میکند که این دستور را به هر صورت پنهان کند.
۰۰۴۰۱۰۰۰ ADD BYTE PTR DS:[EAX],AL
۰۰۴۰۱۰۰۲ ADD BYTE PTR DS:[EAX],AL
۰۰۴۰۱۰۰۴ ADD BYTE PTR DS:[EAX],AL
۰۰۴۰۱۰۰۶ ADD BYTE PTR DS:[EAX],AL
۰۰۴۰۱۰۰۸ ADD BYTE PTR DS:[EAX],AL
فرم در حال بارگذاری ...
[سه شنبه 1401-04-14] [ 02:54:00 ق.ظ ]
|