Всем привет.
Есть такой код инжекта длл в процесс
HANDLE h_process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
char fullDLLPath[_MAX_PATH];
GetFullPathNameA(file_name.c_str(), _MAX_PATH, fullDLLPath, NULL);
LPVOID DLLPath_addr = VirtualAllocEx(h_process, NULL, _MAX_PATH,
MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
WriteProcessMemory(h_process, DLLPath_addr, fullDLLPath,
strlen(fullDLLPath), NULL);
LPVOID LoadLib_addr = GetProcAddress(GetModuleHandleA("Kernel32"),
"LoadLibraryA");
HANDLE h_rThread = CreateRemoteThread(h_process, NULL, 0,(LPTHREAD_START_ROUTINE)LoadLib_addr, DLLPath_addr, 0, NULL);
WaitForSingleObject(h_rThread, INFINITE);
DWORD exit_code;
GetExitCodeThread(h_rThread, &exit_code);
CloseHandle(h_rThread);
VirtualFreeEx(h_process, DLLPath_addr, 0, MEM_RELEASE);
CloseHandle(h_process);
return (HANDLE)exit_code;
Но когда я вызываю её вот так:
di.inject_DLL("module.dll", di.GetPID("winhex.exe"));
P.S. Это класс. Вот ещё функция GetPID
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (hSnap) {
if (Process32First(hSnap, &pe32)) {
if (strcmp(pe32.szExeFile, processname.c_str()) == 0) {
return pe32.th32ProcessID;
}
}
while (Process32Next(hSnap, &pe32)) {
if (strcmp(pe32.szExeFile, processname.c_str()) == 0) {
return pe32.th32ProcessID;
}
}
CloseHandle(hSnap);
return 0;
}
else {
return 0;
}
Так вот.
После вызова - ничего не происходит.
Инжект делаю не в системный процесс.
Пробовал инжектить через Process Hacker и всё работало.
В чём может быть проблема?