بدافزار از تکنیکهای گوناگون در جهت جستجو کردن برای تشخیص دادن نصب یک اشکال زدا استفاده میکند، که شامل استفاده ازرابط برنامه نویسی کاربردی ویندوز میباشد بخش (۲-۲)، بررسی دستی ساختار حافظه آثار بوجود آمده توسط اشکال زدایی بررسی میکند و اگر از آن ردپایی باقی مانده باشد آن را بررسی میکند. در تشخیص اشکال زدا رایجترین راه این است که بدافزار ضداشکال زدا را اجرا میکند. استفاده از توابع رابط برنامه نویسی کاربردی ویندوز آشکارترین تکنیک ضداشکال زدایی است. میتوانیم چندین تابع رابط برنامه نویسی کاربردی را که توسط یک برنامه نیز مورد استفاده قرار گیرد برای مشخص کردن وجود اشکالزدا مورد استفاده قرار دهیم بعضی از این توابع مخصوصاً برای تشخیص اشکال بوجود آمدهاند برخی دیگر کاربردهای دیگری نیز خواهند داشت. تعداد کمی از این توابع از قوانین ثبت نشده دررابط برنامه نویسی کاربردی استفاده میکنند. عموماً، سادهترین راه برای غلبه برفراخوانی یک تابع رابط برنامه نویسی کاربردی ضداشکال زدایی اصلاح دستی بدافزار درطی اجرا یا اصلاح فراخوانی نشانه برای اطمینان از درست و امن بودن اجرا است. گزینه دشوارتر تحت کنترل قرار دادن این توابع است.
توابع ویندوز رابط برنامه نویسی کاربردی ذیل میتوانند برای ضداشکال زدایی استفاده شوند:
الف-ISDEBUGGERPRESENT
ساده ترین تابع رابط برنامه نویسی کاربردی برای تشخیص یک اشکال زدایی ISDEBUGGERPRESENT است.این تابع ساختار “قفل کردن محیط فرایند”[۱۶]
بخش (۲-۳) رابرای زمینهISDEBUGGED جستجو میکند، اگر اشکال زدا فعال نباشد صفر را بازگشت میدهد در غیر این صورت یک را بر میگرداند. ساختار قفل کردن محیط فرایند راباجزئیات بیشتردربخش بعدی بحث خواهیم کرد.
ب-chekremoteDebuggerpresent
این تابع رابط برنامه کاربردی تقریباً شبیه بهIs debugger present (تابع قبلی) است. جود اشکال زدا را در یک ماشین از راه دور (دیگر) برسی نمیکند، بلکه برای یک فرایند در یک دستگاه محلی بررسی خواهد کرد این تابع همچنین ساختار قفل کردن محیط فرایند را برای زمینه isdebugged بررسی میکند. اگر چه میتواند این عمل را برای خودش یا فرایند دیگری که دردستگاه محلی قرار دارد انجام دهد. این تابع انجام یک تابع را به عنوان یک پارامتر بدست میگیرد و بررسی میکند که آیا پردازش شامل اشکال زدا هست یا نه. chekremoteDebuggerpresent میتواند برای بررسی پردازش شما استفاده شود.
ج-Ntquery information process
این یک تابع مقیم رابط برنامه نویسی کاربردی در ntdll. dll است که اطلاعات را درباره پردازش داده شده بازیابی میکند. اولین پارامتر برای این تابع، اداره پردازش است و دومین پارامتر برای گفتن نوع اطلاعات پردازش برای بازیابی است.
برای مثال استفاده از مقدار process Debugport (مقدار۰x7) برای این پارامتر به شما خواهدگفت آیا پردازش در حال اجرای اشکال زدایی است. اگر پردازش هنوزاشکال زدایی نشده باشد، صفررا بر میگرداند در غیر این صورت یک شماره پورت بازخواهدگشت.
د-OutputDebugString
این تابع برای ارسال یک رشته به یک اشکال زدا برای نمایش استفاده میشود. این میتواند برای تشخیص حضوریک اشکالزدا استفاده شود. برای مثال شکل۴-۱ از Setlast Error برای تنظیم کدخطای کنونی به مقداری دلـخواه استفاده میکند. اگر Output Debug String فراخـوانده شده باشدوهیچ اشـکال زدایی نـصب نشده باشد Getlast Error دیگر حاوی مقدار دلخواهتان نیست زیرا در صورت لغو کدخطا توسط تابع Output Debug String تنظیم خواهد شد. اگر Output Debug String را فراخوانده شده باشد و اشکال زدایی نصب شده باشد، فراخوانی Output Debug String موفق است و مقدار در GetlastError نباید تغییرداده شود.
DWORD errorValue =12345;
SetLastError(errorValue);
OutputDebugString("Test for Debugger");
if(GetLastError() == errorValue)
{
ExitProcess();
}
else
{
RunMaliciousPayload();
}
شکل۴-۱: تکنیک ضداشکال زداییoutputdebugstring
۴-۳- بررسی دستی ساختارها
استفاده از ویندوز رابط برنامه نویسی کاربردی بهترین روش برای تشخیص حضوریک اشکال زدا است، اما ساختارهای بررسی دستی ساختارها رایجترین روش استفاده شده توسط نویسندگان بدافزاراست. دلایل زیادی وجود دارند که چرا نویسندگان بدافزار از استفاده از ویندوز رابط برنامه نویسی کاربردی جهت ضداشکال زدایی ناامید شدهاند.
برای مثال، فراخوانی رابط برنامه نویسی کاربردی میتواند فراخوانی یک روت کیت باشد که اتصال یافته است و میتواند موجب بازگشت اطلاعات غلط شود. بنابراین نویسندگان بدافزار اغلب برای اجرای مشابه، فراخوانی رابط برنامهنویسی کاربردی را بطوردستی فراتراز تکیه بر روی ویندوز رابط برنامهنویسی کاربردی اجرا میکنند. دراجرای بررسیهای دستی چندین نشانه درساختار قفل کردن محیط فرایند اطلاعاتی رادرباره حضوریک اشکال زدا فراهم میکند.
۴-۳-۱- بررسی نشانه BeingDebugged
ساختارPEB ویندوزتوسط سیستم عامل برای هرپردازش درحال اجرا نگه داشته میشود، همانطور که درمثال درشکل ۴-۲نشان داده شده است. این حاوی تمامی پارامترهای user-mode مرتبط باپردازش است. این پارامترها شامل دادههای محیط پردازش که خودش شامل متغیرهای محیطی است، لیست ماژولهای بارگذاری شده، آدرسها در حافظه و وضعیت اشکال زداست.
tyPEdef struct _PEB {
BYTE Reserved1[2];
BYTE BeingDebugged;
BYTE Reserved2[1];
PVOID Reserved3[2];
PPEB_LDR_DATA Ldr;
PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
BYTE Reserved4[104];
PVOID Reserved5[52];
PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;
BYTE Reserved6[128];
PVOID Reserved7[1];
ULONG SessionId;
} PEB, *PPEB;
شکل۴-۲: ساختار بلاک محیط پردازش بلوک شده ثبت شده
درحالی که یک پردازش درحال اجراست مکان محیط پردازش بلوک شده را میتوان بامکان]fs:[30hمرجع شود. برای ضداشکال زدایی، بدافزار ازآن مکان برای بررسی نشانه Being Debugged استفاده خواهد کرد که نشان میدهد آیا پردازش خاصی شروع به اشکال زدایی کرده است. یا نه جدول۴-۱ دو نمونه از این نوع بررسی رانشان میدهد.
جدول ۴-۱: بررسی دستی نشانه BeingDebugged
فرم در حال بارگذاری ...