سلام و درود خدمت دوستان و کاربران عزیز وب ویروس32 ضمن تبریک سال جدید و آرزوی موفقیت و شادی و نشاط برای شما عزیزان و خانواده هاتون و به دور از کرونا و پر از پیشرفت برای شما اومدم یک بحثی که توی وبمون زیاد ازش گفته نشده ولی بنده میخوام زیادش کنم D: رو براتون باز کنم ، بعله! مهندسی معکوس و آنالیز بد افزار که برای ویروس نویس ها و دوست داران مهندسی معکوس شروعش خورده میشود..
البته من سعی میکنم بد افزار طور مانند پست هارو پیش ببرم یعنی طوری که هم مهندسی معکوس رو یاد بدم هم اونو توی برنامه نویسی پیاده اش کنیم چ خودش چ راه های جلوگیریش تا بتونیم یه بد افزار خیلی خوبی رو با هم بنویسیم و در آخر پست هامون چند تا تحلیل malware خواهیم داشت.
توی این پست میخوام یکم توضیحات بدم خدمتتون در رابطه با hook خدمتتون توضیحات بدم.
خب دوستان همونطور که میدونید سیستم عامل ویندوز یک سیستم عامل مبتنی بر api و مسیج هست و با اون میتونن کار هاشون رو انجام بدن.
مثال شما وقتی یک مسیج باکسی رو به کاربر نمایش میدید توی هر زبانی که فرقی هم نداره ، در اصل از تابع MessageBoxW استفاده میکنید. این تابع توی user32.dll هست.
شما عملا هر کاری که توی ویندوز انجام میدید مبتنی بر توابع (api) انجام میگیره.. از ساخت فایل و کار با فایل و... بگیر تا کیبورد و تکون دادن موس و پنجره ها و...
خب حالا اگه ما بتونیم ببینیم که یک پروسس از چه توابع api استفاده میکنه بنظرتون میتونیم کار هایی که انجام میده رو بفهمیم؟ تقریبا میشه گفت آره ، یا مثلا اگه بیایم ببینیم که چه پروسس هایی از فلان تابع استفاده کردن یه جاسوسی نسبتا قشنگی میشه:)
به این عمل میگن هوک کردن (hooking)
ما چند نوع هوک داریم :
1 - هوک سراسری
2 - هوک محلی
هوک سراسری به هوکی گفته میشه که یک تابع خاص از api رو مانیتور میکنه و هر پروسسی ازش استفاده کنه رو میبینه یا حتی آرگومان هایی که بهش ارسال شده رو هم دید.
هوک محلی به هوکی گفته میشه که یک پروسس رو بررسی میکنه و هر تابعی رو که استفاده میکنه رو پیدا میکنه.
خب من یه پست توی پایتون گزاشتم در رابطه با اضافه کردن توابع api توی ویندوز : کلیک
این رو اول با دقت نگاه کنید بعدش بیاین ادامه ی پست رو بریم:)
خب همونطور که توی پست گفته بودم توی هر برنامه ای تابع LoadLibraryA وجود داره ، این تابع از kernel32.dll میاد پس نتیجه میگیریم که kernel32.dll به طور پیشفرض توی پروسس های ویندوز لود شده است.
چرا؟
چون برای لود کردن هر dll به پروسس نیاز به تابع LoadLibraryA داریم بخاطر همین به طور پیشفرض توی برنامه هست .
خب حالا یه نمونه هوک از همینجا ناشی میشه که میتونیم LoadLibraryA رو هوک کنیم و ببینیم که برنامه ها چه نوع dll رو توی برنامه هاشون لود میکنن:)
در رابطه با آموزش هوک یک api بعدا توضیح میدم چون نیاز به اسمبلی داره..
یه نکته ی مهم : هوک کردن بخاطر اینکه بین تابع api و پروسس قرار میگیریم باعث کند شدن نسبتا زیاد سیستم میشه.
هوک کردن فایده و عوارض زیادی داره
یکی از فایده هاش اینه که روتکیت هارو میتونید پیدا کنید .
که البته روتکیت زرنگ روتکیتی هست که بتونه با یک پروسس دیگه ای با api ارتباط برقرار کنه که اون موقع بحث dll injection و هوکینگ اصلی تازه شروع میشه:)
یکی از فایده هاش برای من و شما اینه که میتونید کیلاگر های خیلی قوی ای با هوک کردن بسازید.
یه نمونه اش اینجاست.
امیدوارم خوشتون اومده باشه تا درودی دیگر بدرود (;
اولم:)