ورود و ثبت نام

آموزش Dll Injection با پایتون

خواندن این مطلب

4 دقیقه

زمان میبرد!

آموزش Dll Injection با پایتون

 

سلام خدمت دوستان dll-injection همونطور که از اسمش مشخصه ما میایم dll خودمون رو به یک پروسه در حال اجرا تزریق میکنیم با اینکار کدهایی در dll وجود داره اجرا میشه مراحل کار هم اینطوریه که ابتدا یک هندل از پروسه میگیرم و بعد ادرس خالی از حافظه برنامه رو پیدا میکنیم و بعد سورس باینری dll رو در اونجا مینویسیم و بعد یک ترد جدید میسازیم که dll مارو init کنه

 

برای مثال کد زیر کد یک dll هست

 

 

 

فقط همینو بدونید که با لود شدن کد بالا تابع MessageBoxA اجرا میشه

خب حالا ما dll رو ساختیم باید ابزاری باشه که این dll رو تزریق همینطوری که خودش تزریق نمیشه :/

 

 

 

در خط یک انواع داده ای که در فایل wintypes وجود داره رو فراخوانی کردیم مثل نوع داده DWORD در خط 2 توابع و کلاس هایی که در ماژول ctypes وجود داره رو فرخوانی کردیم برای کار با توابع ویندوز و در خط 3 ماژول path رو فرخوانی کردیم در خط 4 هم ماژول sys که میخوایم از تابع exit اون استفاده کنیم

 

 

 

در خط 6 تابعی به اسم print_help تعریف کردیم که نحوه استفاده از اسکریپت رو نشون میده و از برنامه خارج میشه در خط 11 تابعی به اسم isdll تعریف کردیم که در خط 12 چک کردیم که اگه فایل وجود داشت و اکستنشن فایل برابر .dll مقدار true برگردون در غیر این صورت false رو برگردون در خط 30 یک شرط تعریف کردیم که اگه مقدار متغیر name برابر main بیا تابع main که کد اصلی برنامه هست رو اجرا کن و از برنامه خارج بشو خوبی این اسکریپت اینه همه میشه به عنوان یک برنامه کامل و هم به عنوان یک ماژول از اون استفاده کرد در خط 17 تابع main تعریف کردیم در خط 18 شرط تعریف کردیم که اگه کاربر به اندازه کافی ارگومان وارد نکنه تابع print_help رو اجرا کنه در خط 20 متغیر dll_path رو تعریف کردیم که اول ارگومان یعنی مسیر فایل dll در اون قرار داره در خط 21 یک شرط کردیم و چک کردیم که ایا این dll هست یا نه در خط 24 26 یک try except تعریف کردیم که ببینیم کاربر pid رو درست وارد کرد یا نه اگه اره که ارگومان رو به عدد تبدیل میکنه و در متغیر pid قرار میده در خط 29 هم تابع dll_inject رو اجرا کردیم

 

 

در خط 6 فایل kernel32.dll رو لود کردیم که توابعی که لازم داریم در اون قرار داره در خط 15 هم تابعی به اسم dll_inject تعریف کردیم که دو مقدار مسیر فایل pid رو میگیره در خط 16 با استفاده از تابع OpenProcess پروسه رو باز کردیم و هندلی با سطح دسترسی ALL از اون گرفتیم و در متغیر h_process ذخیره کردیم در خط 17 یک ارایه از جنس char تعریف کردیم با طول 256 و اسم اون fullDLLPath گذاشتیم در خط 18 با استفاده از تابع GetFullPathNameA مسیر کامل dll رو گرفتیم در خط 19 با استفاده از تابع VirtualAllocEx ادرس حافظه خالی برنامه به اندازه تعداد بایت فایل dll گرفتیم و در متغیر DLLPath_addr ذخیره کردیم در خط 20 با استفاده از تابع WriteProcessMemory سورس باینری dll رو در حافظه برنامه نوشتیم و در خط 21 با استفاده از تابع GetModuleHandleA هندلی از kernel32.dll گرفتیم در خط 22 ادرس تابع LoadLibraryA که در فایل kernel32.dll وجود داره رو با استفاده تابع GetProcAddress گرفتیم و در متغیر LoadLib_addr ذخیره کردیم در خط 23 با استفاده از تابع CreateRemoteThread تابع LoadLibraryA رو اجرا کردیم در حقیقت مثل اینه که خود برنامه هدف اومده باشه dll مارو با تابع LoadLibraryA اجرا کرده باشه در خط 24 هم منتظر میمونیم تا dll ما کامل لود بشه در خط 26 28 هندل هایی که گرفتیم رو میبندیم و در خط 27 هم حافظه رو که گرفته بودیم ازاد میکنیم

 

 

 

 

 

 

درباره نویسنده



نظرات کاربران



دیدگاهتان را بنویسید

مطالب مرتبط