Habe leider vergeblich den gestrigen Abend damit verbracht BTMemoryModule umzuschreiben mit
VirtualAllocEx
und den von Zacherl genannten Änderungen (wpm, createremotethread,... ).
Die Herangehensweise die Exe zu injecten finde ich sehr interessant.
Habe mir daszu mal den passenden Text aus der
msdn Hilfe kopiert:
The name of the module. This can be either a library module (a .dll file) or an executable module (an .exe file). .
Anschließend habe ich eine kleine simpleexe.exe erstellt, die ich in IrfanView injected habe.
Das hat auch soweit geklappt:
Nur weiß ich jetzt noch nicht so recht, wie ich beispielsweise direkt Code beim injecten der Exe im Zielprozess ausführen kann.
Sofern man eine
Dll injected wird automatisch DllMain ausgeführt.
Bei der Injection gehe ich folgendermaßen vor:
Delphi-Quellcode:
function InjectExe(const pid: DWORD; exedir: PWideChar): Boolean;
var
dwThreadID: Cardinal;
hProc, hKernel: THandle;
BytesToWrite, BytesWritten: SIZE_T;
pRemoteBuffer, pLoadLibrary: Pointer;
hThread: THandle;
begin
Result := True;
hProc := OpenProcess(PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or
PROCESS_VM_OPERATION or PROCESS_VM_WRITE or PROCESS_VM_READ, False, pid);
if hProc = 0 then
Exit(False);
try
BytesToWrite := SizeOf(WideChar) * (Length(exedir) + 1);
pRemoteBuffer := VirtualAllocEx(hProc, nil, BytesToWrite, MEM_COMMIT,
PAGE_READWRITE);
if pRemoteBuffer = nil then
Exit(False);
try
if not WriteProcessMemory(hProc, pRemoteBuffer, exedir, BytesToWrite, BytesWritten) then
Exit(False);
hKernel := GetModuleHandleW('kernel32.dll');
pLoadLibrary := GetProcAddress(hKernel, 'LoadLibraryW');
hThread := CreateRemoteThread(hProc, nil, 0, pLoadLibrary, pRemoteBuffer, 0, dwThreadID);
try
WaitForSingleObject(hThread, INFINITE);
finally
CloseHandle(hThread);
end;
finally
VirtualFreeEx(hProc, pRemoteBuffer, 0, MEM_RELEASE);
end;
finally
CloseHandle(hProc);
end;
end;
Gibt es eine Möglichkeit Code direkt beim Injecten der Exe auf diese Weise auszuführen?