آنالیز بدافزار ZeroAccess (قسمت سوم)
تابع call ebp :
این تابع دارای چندین حلقه هستش که دایما دارن محتویات رو تغییر میدن و دستورات جدید رو رمزگشایی میکنن و در آدرسی که بعد از این تابع قرار دارد و قرار است به اون jump زده شود قرار می دهند. اگه دستورات آدرس 401018 رو قبل و بعد از این تابع ببینید خواهید دید که کلی دستور جدید تولید شده.
اینکه روش رمزگشایی رو بررسی کنیم توی این مرحله برای ما مهم نیس و ما نیازی به دونستش نداریم. پس این تابع رو با F8 رد میکنیم.
دستور بعد از این تابع یک دستور بی اثر هستش و بعد از اون هم یک پرش.
این همون پرشی هستش که به کدهای رمزگشایی شده انجام میشه.
تحلیل دستورات از 401018 تا 40105B :
ابتدا مشاهده میکنید که محتویات حافظه [FS]:18 به رجیستر EAX منتقل می شود.
[FS]:18 محتوی آدرس ساختار TIB یا همون TEB هستش
حالا در دستور بعد آفست 30 این ساختار را میخونه.
(برای آشنایی با این ساختارها میتونید به مستندات مراجعه کنید)
البته ما از قبل میدونیم که این آفست محتوی آدرس شروع ساختار PEB هستش.
در خط سوم مثل قبل ، آفست C از ساختار PEB خوانده می شود که این هم اشاره گری به ساختاری است که محتوی اطلاعاتی درباره ماژول های لود شده در پروسس جاری (LDR) است.
آفستهای C, 14, 1C در ساختار PEB_LDR_DATA از نوع LIST_ENTRY هستند که قبلا در همین وبلاگ در موردش مطلب گذاشتم.
این 3 تا LIST_ENTRY ، ساختار LDR_DATA_TABLE_ENTRY ماژول های قبل و بعد رو بهم زنجیر کردن.
در مرحله ی چهارم در شکل بالا میبینید که 20h بایت دیگه هم به اشاره گر LDR_DATA_TABLE_ENTRY اضافه شده تا به بافری که حاوی نام ماژول است (FullDllName) برسیم.
(نکته : اعدادی که داریم استفاده میکنیم تماما مبنای شانزده هستند)
میبینید که نام ماژول بدست آمده از بافر ntdll.dll هستش.
از آدرس 401031 به بعد عملیات بررسی نام ماژول
انجام میشه. در خط 401048 نام ماژولی هدف بصورت رمزشده
نگهداری شده.
کار اصلی کل این دستورات:
بدست آوردن نام ماژول و رمز کردن اون، سپس تطبیق اون با رمزی که در خط 401048 نگهداری می شود.اگر این رمز ها یکی باشند پرشی به ادامه دستورات صورت میگیره (40104E).
اگر نه، روند بدست آوردن نام ماژول ها تا رسیدن به ماژول هدف ادامه پیدا میکند(401054).
ماژول هدف در اینجا ntdll.dll می باشد.
- ۹۵/۰۲/۳۱
- ۱۲۱۳ نمایش