Блин.. ребят незнаю =\
Цитата | G0L1a7h, нельзя вот так взять и инжектировать модуль, так ещё и по другому адресу. Всё довольно сложнее. К примеру, вот этот код, нужно переписать на ассемблерный, и желательно, чтобы код был независим от базового адреса, иначе код придётся править перед инжектированием:
|
Я видел примеры в которых код который инжектится не является базонезависимым.
Цитата | G0L1a7h, Вам сюда http://rootkits.ru/viewtopic.php?id=181&words=
|
Спасибо за ссылку на базонезависимый код я писать умею =\
Короче заставил я это работать....
Код | BOOL Inject(DWORD(WINAPI* Code)(LPVOID)); DWORD WINAPI Code (LPVOID); DWORD GetProcessID(char* lpNameProcess); int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { Inject(Code); return 0; } BOOL Inject(DWORD(WINAPI* Code)(LPVOID)){ HANDLE hProcess; HANDLE hModule;
hModule = GetModuleHandle(NULL); DWORD size=((PIMAGE_OPTIONAL_HEADER)((LPVOID)((BYTE*)(hModule)+((PIMAGE_DOS_HEADER)(hModule))->e_lfanew+sizeof(DWORD)+sizeof(IMAGE_FILE_HEADER))))->SizeOfImage; hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetProcessID("taskmgr.exe")); if (!hProcess) { MessageBoxA(0,"OpenProcess","Fail",0); ExitProcess(0); } char* lpMemory = (char*)VirtualAllocEx(hProcess, hModule, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); if (!lpMemory) { MessageBoxA(0,"VirtualAllocEx","Fail",0); ExitProcess(0); } if (!WriteProcessMemory(hProcess, lpMemory, hModule, size, NULL)) { MessageBoxA(0,"WriteProcessMemory","Fail",0); ExitProcess(0); } if (!CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)Code, NULL, 0, NULL)) { MessageBoxA(0,"CreateRemoteThread","Fail",0); ExitProcess(0); } return 0; } DWORD WINAPI Code (LPVOID){ MessageBox(0,"Injected!","",0); return 0; } DWORD GetProcessID(char* lpNameProcess) { HANDLE snap; PROCESSENTRY32 pentry32; snap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(snap==INVALID_HANDLE_VALUE) return 0; pentry32.dwSize=sizeof(PROCESSENTRY32); if(!Process32First(snap,&pentry32)) {CloseHandle(snap);return 0;} do { if(!lstrcmpi(lpNameProcess,&pentry32.szExeFile[0])) { CloseHandle(snap); return pentry32.th32ProcessID; } }while(Process32Next(snap,&pentry32)); CloseHandle(snap); return true; }
|
Работает только с.......
Код | #pragma comment(linker,"/BASE:0x13110000")
|
Почему? |