PDA

View Full Version : سوال: Hooking running processes



arashmidos2020
سه شنبه 20 بهمن 1388, 04:48 صبح
سلام. وقتی که یک پروسه در حال انجام هست می خوام ببینم از چه ای پی آی ها و فانکشن هایی استفاده می کنه؟

زیاد گشتم دنبالش واسه همین گیج شدم که این همون process injection هست یا چیز دیگه. لطفا راهنمایی کنید چطور باید شروع کنم.
ممنونم

arashmidos2020
سه شنبه 20 بهمن 1388, 06:39 صبح
واضح تر بگم:
یک پروسه در می خواد اجرا بشه خب؟
1. نمام function های در حال call شدن آن را بدست آوریم.(این همون Hook کردن هست؟)
2. بتوان جای توابع موجود را با توابع جدید عوض کرد(اینم اینجکت کردن به محل همون پر.سه هست؟)

که اگر اینجکت هست پس چطر میشه از اجرای خود فانکشن اصلی پروسه جلوگیری کرد؟؟؟

خیلی جستجو کردم تو همین سایتم کلی مطلب خوندم اما
مسئله اینه که نمی دونم دقیقا مشکل من همون چیزی هست که تو اکثر فروم ها بحث شده یا نه!

حالا اگر کسی راهنمایی کنه بگه چی موضوعاتی رو باید بخونم ممنون می شم.

arashmidos2020
سه شنبه 20 بهمن 1388, 19:25 عصر
با تشکر از شما.
ببینید یک سری پروسه ها اصلی که منجر به انتقال فایل در شبکه می شوند. مثلا می خوام کل ارتباطات شبکه ای دو کامپیوتر از طریق پروتکلی که خودم درست کردم با هم ارتباط برقرار کنن و نه از هدرهای خود ویندوز برای ارتباط کمک بگیرند.
یک مثال:
وقتی در یک پروسه در حال اجرا تابع fopen را کال کرد من بتونم اولا ورودی هاشو بگیرم و ثانیا این تابع رو با تابعی که خودم نوشتم و مثل fopen کار می کنه جایگزین کنم.
بزم ممنون که می بینید

tdkhakpur
سه شنبه 20 بهمن 1388, 19:38 عصر
وقتی در یک پروسه در حال اجرا تابع fopen را کال کرد من بتونم اولا ورودی هاشو بگیرم و ثانیا این تابع رو با تابعی که خودم نوشتم و مثل fopen کار می کنه جایگزین کنم.
بزم ممنون که می بینید
برای هر عملی بسته ای وجود دارد مثلا برای اینکه کنترل ورودی و خروجی ها مانند فایلها - حافظه و یا نخها را انجام بدید حتما باید KERNEL32.DLL را هوک کنید و یا اینکه اگر بخواهید گرافیک ماند کنترلها و صفحات را کنترل کنید باید GDI32.DLL را هوک کنید. و موارد دیگر که میتوانید جستجو کنید حتما به نتیجه خواهید رسید.

arashmidos2020
سه شنبه 20 بهمن 1388, 19:46 عصر
و اینکه برای جایگزینی چکار باید کرد؟

hoax3r
سه شنبه 20 بهمن 1388, 21:13 عصر
این سورس رو که MessageBoxA رو هوک کرده ببینید کمکتون میکنه



#include <windows.h>

BOOL PatchAPI(LPSTR lpszLib, LPSTR lpszFunc, FARPROC *lpOldFunc, FARPROC fpNewFunc) // by Napalm
{
BOOL bResult = FALSE;
DWORD dwProtect;
LPBYTE lpPatch;
FARPROC fpOldFunc;

fpOldFunc = GetProcAddress(LoadLibrary(lpszLib), lpszFunc);
if(fpOldFunc){
lpPatch = (LPBYTE)fpOldFunc - 5;
if(!memcmp(lpPatch, "\x90\x90\x90\x90\x90\x8B\xFF", 7)){
if(VirtualProtect(lpPatch, 7, PAGE_EXECUTE_READWRITE, &dwProtect)){
*lpPatch = 0xE9;
*(LPDWORD)(lpPatch + 1) = (DWORD)((LONG)fpNewFunc - (LONG)fpOldFunc);
*(LPDWORD)lpOldFunc = ((DWORD)fpOldFunc + 2);
InterlockedExchange((LPLONG)fpOldFunc, (LONG)((*(LPDWORD)fpOldFunc & 0xFFFF0000) | 0xF9EB));
VirtualProtect(lpPatch, 7, dwProtect, NULL);
bResult = TRUE;
}
}
}

return bResult;
}

BOOL UnPatchAPI(LPSTR lpszLib, LPSTR lpszFunc, FARPROC *lpOldFunc)
{
BOOL bResult = FALSE;
DWORD dwProtect;
LPBYTE lpPatch;
FARPROC fpOldFunc;

fpOldFunc = GetProcAddress(LoadLibrary(lpszLib), lpszFunc);
if(fpOldFunc){
lpPatch = (LPBYTE)fpOldFunc - 5;
if(VirtualProtect(lpPatch, 7, PAGE_EXECUTE_READWRITE, &dwProtect)){
InterlockedExchange((LPLONG)fpOldFunc, (LONG)((*(LPDWORD)fpOldFunc & 0xFFFF0000) | 0xFF8B));
memset(lpPatch, 0x90, 5);
*lpOldFunc = NULL;
VirtualProtect(lpPatch, 7, dwProtect, NULL);
bResult = TRUE;
}
}

return bResult;
}


DWORD (WINAPI *OldMessageBox)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
int WINAPI NewMessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
lpCaption = "Patched by Napalm";
uType |= MB_ICONINFORMATION;
return OldMessageBox(hWnd, lpText, lpCaption, uType);
}

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszCmdLine, int nShowCmd)
{
if(PatchAPI("user32.dll", "MessageBoxA", (FARPROC *)&OldMessageBox, (FARPROC)NewMessageBox)){
MessageBoxA(HWND_DESKTOP, "Testing Patch", "Info", MB_OK);
UnPatchAPI("user32.dll", "MessageBoxA", (FARPROC *)&OldMessageBox);
}else
MessageBoxA(HWND_DESKTOP, "Patch Failed!", "Error", MB_ICONERROR | MB_OK);
return 0;
}

arashmidos2020
پنج شنبه 22 بهمن 1388, 05:33 صبح
با تشکر از همه شما. راه زیادی در پیش دارم لطفا تنهام نگذارید.
چند تا سوال دیگه:
در مورد دیباگرها بهتره کدوم رو یاد بگیرم برای شروع؟
در مورد لینوکس هم هوک کردن انگار تا جایی که من فهمیدم به همین شیوه نیست درسته؟

arashmidos2020
جمعه 23 بهمن 1388, 10:28 صبح
جناب Negative_Se7en (http://barnamenevis.org/forum/member.php?u=134418) خیلی عالی هستند دوتاشونو خوندم تا تازه دوزاریم افتاده تقریبا باید چه کار کنم.اگه بازم موضوعاتی به نظرتون می رسه که باید بخونم بگید.
عجب دنیایی این PE file :D
بازم ممنون

arashmidos2020
دوشنبه 26 بهمن 1388, 10:54 صبح
سلام دوباره من در مورد PE file ها خوندم ولی احساس می کنم هدف من این نیست!!!
من می خوام فقط توابع سیستمی استفاده شده توی Address space یک پروسه رو بدست بیاورم.این چیزی که شما گفتید خیلی فراتر هست. اگه بیشتر منو راهنمایی کنید ممنون مشم.چند روزه که دارم همینجوری بخودی چیزای جور واجور می خونم که نمی دونم بدردم می خوره یا نه.
ممنون

__Genius__
دوشنبه 26 بهمن 1388, 14:20 عصر
این همه توضیح دادید ، احتمال زیاد متوجه نشدید این بنده خدا چی میگه ،
کاری که دوستمون باید انجام بده Dll-Injection یا تزریق یک Dll به پروسه مورد نظر برای بدست آوردن Function هایی که در حال حاضر میخواد استفاده بکنه هست ... .
این تکنیک توی "اکثر" نرم افزارهائی که Malware هارو تحلیل میکنن به کار گرفته میشه ، سورس آماده ندارم در اختیارتون بذارم ولی نرم افزار SysAnalyser که مربوط به شرکت IDEFENSE هست رو دانلود کنید ، OpenSource هست ، توی قسمتی از این نرم افزار کاری که میخواهید انجام بدین هست .
برای تغییر رفتار تابع به اون چیزی که میخواهید در مورد Microsoft Detours هم تحقیق کنید .

arashmidos2020
دوشنبه 26 بهمن 1388, 16:02 عصر
تشکر.این برنامه که درست رو سیستم من کار نمی کنه!
و اینکه اصلا بحث اینکه dll در یک پروسه اینجکت کنم نیست من فقط می خوام توابع سیستمی استفاده شده توی Address space یک پروسه رو بدست بیاورم.و نیاز به سورس دارم نه برنامه.
اگر حتی روالش رو هم بهم یگید من می روم دنبالش.خودتون می دونید کسی که نمی دونه دنبال چی هست چقدر گمراه میشه و هر مرجعی رو می خونه آخرش می فهمه بدردش نمی خوره!!
اگر بگید چه چیزهایی باید بخونم ممنون میشم

hoax3r
دوشنبه 26 بهمن 1388, 16:51 عصر
بخش های ابتدایی این مقاله همون چیزی که می خواین رو داده


http://www.ntcore.com/files/inject2it.htm

__Genius__
دوشنبه 26 بهمن 1388, 17:26 عصر
آخه تا کی میخواهیم از برنامه های دیگران استفاده کنیم.پس این سایت برنامه نویس بره چیه آخه.نا سلامتی ماها میخوایم برنامه نویسان فردا باشیم.نه این که هی سورس کدهای دیگران رو بر داریم بعد 2 خطش رو عوض کنیم بعدش کامپایل کنیم بگیم این برنامه رو ما ساختیم.
فرمایش شما محترم اما یکی از راه های صحیح برای خود آموزی سورس کد خوانی هست ، مطمئن باشید سروس کد خوانی دزدی نیست ، شما میتونید با خوندن کدهایی که توسط دیگران نوشته شده مراحل پیاده سازی رو یاد بگیرید .

__Genius__
سه شنبه 27 بهمن 1388, 02:56 صبح
Negative_Se7en @
کاملاً منطقی صحبت میکنید .

arashmidos2020 @
برخلاف خیلی از برنامه نویسان که عشق برنامه های DataBase هستن من شدیداً با مدل برنامه های سیستمی موافق هستم ؛ اگر روزی نیاز به همیار / همکار و این دسته افراد پیدا کردین میتونم توی این پروژه همکاری بکنم باهاتون و البته شرطش هم این هست که پروژه هدف دار جلو بره و نخواد یه چیز نصف کاره بمونه .

arashmidos2020
چهارشنبه 28 بهمن 1388, 16:07 عصر
بخش های ابتدایی این مقاله همون چیزی که می خواین رو داده


http://www.ntcore.com/files/inject2it.htm

سلام ممنون.دو تا مثالی که گفته بود رو خوندم و تقریبا فهمیدم.اما مسئله من اینه که بتوانم روی هر پروسه ای که اجرا می شه کنترل داشته باشم.
آیا کسی می تونه با توجه به بحث هایی که شده جواب بده؟؟!!
ضمنا لینک بسیار مفیدی بود.

hoax3r
چهارشنبه 28 بهمن 1388, 21:40 عصر
اما مسئله من اینه که بتوانم روی هر پروسه ای که اجرا می شه کنترل داشته باشم.

اگه منظروتون از کنترل استخراج API های به کار رفته است، بخشی از پروسه مگه برنامه ای که اجرا شده نیست، کافیه مسیر فایل رو پیدا کنید بعد هر کاری خواستین روش ایجام بدین

arashmidos2020
چهارشنبه 28 بهمن 1388, 21:44 عصر
خب اینم خوبه ولی از کجا بدونم کدوم فایل بوده؟؟
الان پروسه در حال اجرا هست؟یعنی چطوری این کارو باید بکنم؟؟

1485159
جمعه 07 اسفند 1388, 19:24 عصر
این سورس رو که MessageBoxA رو هوک کرده ببینید کمکتون میکنه



#include <windows.h>

BOOL PatchAPI(LPSTR lpszLib, LPSTR lpszFunc, FARPROC *lpOldFunc, FARPROC fpNewFunc) // by Napalm
{
BOOL bResult = FALSE;
DWORD dwProtect;
LPBYTE lpPatch;
FARPROC fpOldFunc;

fpOldFunc = GetProcAddress(LoadLibrary(lpszLib), lpszFunc);
if(fpOldFunc){
lpPatch = (LPBYTE)fpOldFunc - 5;
if(!memcmp(lpPatch, "\x90\x90\x90\x90\x90\x8B\xFF", 7)){
if(VirtualProtect(lpPatch, 7, PAGE_EXECUTE_READWRITE, &dwProtect)){
*lpPatch = 0xE9;
*(LPDWORD)(lpPatch + 1) = (DWORD)((LONG)fpNewFunc - (LONG)fpOldFunc);
*(LPDWORD)lpOldFunc = ((DWORD)fpOldFunc + 2);
InterlockedExchange((LPLONG)fpOldFunc, (LONG)((*(LPDWORD)fpOldFunc & 0xFFFF0000) | 0xF9EB));
VirtualProtect(lpPatch, 7, dwProtect, NULL);
bResult = TRUE;
}
}
}

return bResult;
}

BOOL UnPatchAPI(LPSTR lpszLib, LPSTR lpszFunc, FARPROC *lpOldFunc)
{
BOOL bResult = FALSE;
DWORD dwProtect;
LPBYTE lpPatch;
FARPROC fpOldFunc;

fpOldFunc = GetProcAddress(LoadLibrary(lpszLib), lpszFunc);
if(fpOldFunc){
lpPatch = (LPBYTE)fpOldFunc - 5;
if(VirtualProtect(lpPatch, 7, PAGE_EXECUTE_READWRITE, &dwProtect)){
InterlockedExchange((LPLONG)fpOldFunc, (LONG)((*(LPDWORD)fpOldFunc & 0xFFFF0000) | 0xFF8B));
memset(lpPatch, 0x90, 5);
*lpOldFunc = NULL;
VirtualProtect(lpPatch, 7, dwProtect, NULL);
bResult = TRUE;
}
}

return bResult;
}


DWORD (WINAPI *OldMessageBox)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
int WINAPI NewMessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
lpCaption = "Patched by Napalm";
uType |= MB_ICONINFORMATION;
return OldMessageBox(hWnd, lpText, lpCaption, uType);
}

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszCmdLine, int nShowCmd)
{
if(PatchAPI("user32.dll", "MessageBoxA", (FARPROC *)&OldMessageBox, (FARPROC)NewMessageBox)){
MessageBoxA(HWND_DESKTOP, "Testing Patch", "Info", MB_OK);
UnPatchAPI("user32.dll", "MessageBoxA", (FARPROC *)&OldMessageBox);
}else
MessageBoxA(HWND_DESKTOP, "Patch Failed!", "Error", MB_ICONERROR | MB_OK);
return 0;
}

این کد چی کار میکنه؟

hoax3r
شنبه 08 اسفند 1388, 15:08 عصر
آدرس تایع MessageBoxA رو پیدا میکنه ابتدای آدرس این API یه دستور پرش میزاره که به تابعی که ما مشخص می کنیم پرش کنه
البته این کد ممکنه در سیستم عامل Xp SP2 به قبل کار نکنه ولی با کمی تغیرات میشه درستش کرد

arashmidos2020
پنج شنبه 12 فروردین 1389, 20:54 عصر
اساتید اگه میشه این لینک رو ببینید که با این موضع هم مرتبط هست و راهنمایی کنید. تشکر
http://barnamenevis.org/forum/showthread.php?t=212433