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.