push/pop method
mov method
push dword ptr fs:[30h]
pop edx
cmp byte ptr [edx+2], 1
je DebuggerDetected
mov eax, dword ptr fs:[30h]
mov ebx, byte ptr [eax+2]
test ebx, ebx
jz NoDebuggerDetected
در کد سمت چپ جدول۴-۱مکان PEB به ریجستر EAXمنتقل شده است. EBX در مرحلۀ بعد آفست EAX به علاوه ۲ به EBX حرکت کرده است، که متناظر با آفست درون PEB از مکان نشانه BeingDebugged است. درنهایت EBX بررسی میشود که آیا صفراست. اگر این چنین باشد اشکال زدا نصب نشده است، و جهش رخ خواهد داد.
مثال دیگری درسمت راست جدول ۴-۱نشان داده شده است. مکان PEB با استفاده ازیک ترکیب دستورهای push/pop به EDX منتقل میشود سپس نشانه BeingDebugged در آفست دوم بطور مستقیم با عدد یک مقایسه میشود. این بررسی میتواند شکلهای زیادی داشته باشد، جهش شرطی مسیر کد را تعیین میکند. شما میتوانید یکی از روشهای زیر را برای برطرف کردن این مشکل انتخاب کنید:
تعیین کنید جهش با اصلاح دستی نشانه صفر بلافاصله پیش از اینکه دستور جهش اجرا شود رخ دهد. این سادهترین روش است. بطوردستی Flag مربوط به BeingDebugged را به صفر تغییر دهید.
هر دو گزینه مقابل در تمامی تکنیکهای توضیح داده شدۀ این بخش تأثیرگذارند.
نکته: تعدادی از پلاگینهای DllyDbg نشانه BeingDebugged را برای شما تغییر میدهند. محبوبترینها HideDebugger، Hidedebug، phantom هستند که تمامی آنها برای غلبه بررسی نشانه BeingDebugged مفیدهستند و با تکنیکهای دیگری که ما در این فصل بحث کردیم کمک میکند.
۴-۳-۲- بررسی نشانه ProcessHeap
یک مکان ثبت نشده، درآزمایش reserved4 نشان داده شده درشکل (۴-۳) شناخته شده به عنوان ProcessHeap، که برای مکان توده اولیه پردازش تشخیص داده شده، توسط بارگذاری تنظیم شده است. ProcessHeap در ۰x18 در ساختار PEB قرارگرفته است. اولین heap حاوی یک سرعنوان با زمینههای استفاده شده برای اعلام بهKernel مورد استفاده قرار میگیرد. که آیا توده در یک اشکال زدا ایجاد شده است. اینها به عنوان زمینههای forceflagsو flags شناخته شدهاند. آفست ۰x44 در سر عنوان heap زمینه forceflagsدر ویندوز XP است اما برای ویندوز ۷ این درآفست۰x44 برای برنامههای کاربردی ۳۲ بیتی است. بدافزار ممکن است به آفست۰x0c در ویندوز XP یا آفست۰x40 در ویندوز ۷ برای زمینه flagsنگاه کند. این زمینه همیشه برابربا زمینه forceflagsاست، اما معمولا oredبا مقدار ۲ میباشد. (شکل۴-۳) کد مرهم بندی برای این تکنیک را نشان میدهد (قابل ذکراست که دوتفاوت مجزا باید رخ دهد).
mov eax, large fs:30h
mov eax, dword ptr [eax+18h]
cmp dword ptr ds:[eax+10h], 0
jne DebuggerDetected
شکل۴-۳: بررسی دستی نشانه ProcessHeap
بهترین راه برای غلبه بر این روش، تغییر دستی نشانه processHeap یا استفاده از یک پلاگین
hide-debug برای اشکال زدای شماست. اگر شما از winDbg استفاده میکنید میتوانید برنامه را باتوده اشکال زدای غیرفعال شده آغاز کنید. برای مثال دستور windbg-hd notepad. exe، heap را در حالت نرمال درمقابل حالت اشکالزدایی شروع میکند و نشانههایی که بحث شد تنظیم نمیشوند.
۴-۳-۳- بررسی NTGlobalFlag
در حالی که پردازشها بصورت متفاوتی اجرا میشوند در زمانی که با اشکال زدا شروع شده باشد، آنها تودههای متفاوتی را ایجاد میکنند. اطلاعاتی که سیستم برای تعیین چگونگی ایجاد توده استفاده میکند در یک مکان ثبت نشده در قفل کردن محیط فرایند در آفست ۰X68 نگهداری میشود. اگر مقدار در این مکان ۰X70 است، میدانیم که در یک اشکال زدا در حال اجرا هستیم.
مقدار ۰X70 ترکیبی از نشانهای زیر است زمانی که یک هیپ توسط اشکال زدا ایجاد شده است. این نشانهها برای پردازش تنظیم شدهاند اگر از درون یک اشکال زدا شروع شده باشد.
(FLG_HEAP_ENABLE_TAIL_CHECK|FLG_HEAP_ENABLE_FREE_CHECK|FLG_HEAP_VALIDATE_PARAMETERS)
شکل ۴-۴ کد سر هم بندی را برای اجرای این بررسی نشان میدهد.
mov eax, large fs:30h
cmp dword ptr ds:[eax+68h], 70h
jz DebuggerDetected
شکل۴-۴ بررسی NTGlobalFlag
سادهترین راه برای غلبه بر این تکنیک تغییر دستی نشانه یا با یک پلاگین gide-debaug برای اشکال زدای خود است. اگر شما از WinDbg استفاده میکنید، میتوانید برنامه را با گزینه توده اشکال زدایی غیرفعال شده شروع کنید، همانطور که در بخش قبل بیان شد.
۴-۴- بررسی باقی مانده سیستم
در زمان آنالیز بدافزار، ما معمولاً از ابزارهای ضد اشکال زدایی استفاده میکنیم، که ردپایی را روی سیستم میگذارد. بدافزار میتواند برای تعیین زمانی که شما برای آنالیز آن تلاش میکنید این ردپا را جستجو کند. در زیر یک مکان رایج برای حضور یک اشکال زدا آمده است.
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionAeDebug
این کلید ریجستری اشکال زدا را مشخص میکند که زمانی که یک خطای کاربردی رخ میدهد فعال میشود. بطور پیش فرض، برروی Dr. Watson تنظیم شده است، پس اگر به نرمافزاری شبیه OllyDbg تغییر کند، بدافزار تصور میکند که زیر یک میکروسکوپ است.
بدافزار میتواند سیستم را برای فایلها و فولدرهایی مانند برنامه اشکال زدایی رایج، که در طول آنالیز بدافزار حضور دارند جستجو کند. یا بدافزار میتواند باقی مانده را در حافظه زنده تشخیص دهد، با دیدن فهرست پردازش کنونی، یا با اجرای یک FindWindow در جستجوی یک اشکال زدا، همانطور که در شکل۴-۵ نشان داده شده است.
If(FindWindow("OLLYDBG", 0) == NULL)
{
//Debugger Not Found