این روزها اغلب فایروالهای شخصی جلوی Code Injection یا Remote Memory Manipulation رو میگیرن ، بهر حال جواب سوالت ساده هست ، و اگه مطالب قبلی فروم رو به دفت مطالعه کنی باید خودت بتونی بنویسی .
ساده ترین روش اجرا کردن کد در کانتکست یک پروسهء غریبه استفاده از Remote Thread است . ابتدا هندلی به پروسهء مقصد ایجاد میکنی ، کد مورد نظرت که در قالب یک DLL آمادهء اجراست فراخوانی میکنی ، حافظه مورد نظر رو در پروسهء فوق الذکر اختصاص میدی ، Remote thread رو ایجاد میکنی که حاوی کد DLL ات هست ؛ این هم ساده ترین کد ممکن :
BOOL InjectDLL(DWORD ProcessID) {
HANDLE Proc;
char buf[50]={0};
LPVOID RemoteString, LoadLibAddy;
if(!ProcessID) return false;
Proc = OpenProcess(CREATE_THREAD_ACCESS, FALSE, ProcessID);
if(!Proc) {
sprintf(buf, "OpenProcess() failed: %d", GetLastError()); MessageBox(NULL, buf, "Loader", NULL); return false;
}
LoadLibAddy = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.d ll"), "LoadLibraryA");
RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(DLL_NAME), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(Proc, (LPVOID)RemoteString, DLL_NAME,strlen(DLL_NAME), NULL);
CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, NULL, NULL); CloseHandle(Proc);
return true; }
خوش باشی