procedure TForm1.InjectDLL(const ADLLName: String; targetproc: Cardinal); var dllname: String; pDLLname, pStartAddr: Pointer; bw: NativeUInt; hProcess, hRemoteThread: THandle; TID: Cardinal; begin hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, targetproc); pDLLname := VirtualAllocEx(hProcess, 0, length(dllname) + 1, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE); WriteProcessMemory(hProcess, pDLLname, Pointer(dllname), length(dllname) + 1, bw); pStartAddr := GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA'); hRemoteThread := CreateRemoteThread(hProcess, nil, 0, pStartAddr, pDLLname, 0, TID); WaitForSingleObject(hRemoteThread, INFINITE); CloseHandle(hProcess); end;
hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, dwPID); pRemoteMemory := VirtualAllocEx(hProcess, nil, dwSize, MEM_COMMIT, PAGE_READWRITE); delphi injector code converter top