Ich würde gern einen Loader programmieren, der mehr als nur 2 Byte patchen kann.
Ich habe dazu folgenden Code für einen Loader:
Delphi-Quellcode:
program loader;
uses
Windows, Messages;
{$R Loader.RES}
var
si : Startupinfo;
pi : Process_Information;
NewData : array[0..1] of byte = ($90,$90);
NewDataSize : DWORD;
Bytesread : DWORD;
Olddata : array[0..1] of byte;
begin
// ZeroMemory(@si,sizeof(si));
// ZeroMemory(@pi,sizeof(pi));
// FillChar(Si,Sizeof(si),0);
// Si.cb:=Sizeof(si);
NewDataSize := sizeof(newdata);
IF CreateProcess(nil,'Example.exe',nil,nil,FALSE,
Create_Suspended,nil,nil,si,pi) = true then
begin
ReadProcessMemory(pi.hprocess,Pointer($403CEA),@olddata,2,bytesread);
if (olddata[0] = $75) and (olddata[1] = $19) then
begin
WriteProcessMemory(pi.hProcess, Pointer($403CEA), @NewData, NewDataSize, bytesread);
ResumeThread(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(PI.hThread);
end else
begin
Messagebox(0,pchar('Bytes not found! Wrong version?...'),pchar('Error'),mb_iconinformation);
TerminateProcess(PI.hProcess,0);
CloseHandle(PI.hProcess);
CloseHandle(PI.hThread);
end;
end;
end.
Jedoch patchet dieser nur einen Offset mit je zwei Bytes. Nun wollte ich wissen wie das geht das mehrere Bytes im Speicher gepatchet werden können?
Vielleicht hat jemand ein Beispiel für mich?
Danke UC
PS: Dieser Loader wird nicht für illegale Zwecke verwendet. Wollte ich nur noch mal klar stellen, nicht dass jemand etwas falsches denkt.