Как пропатчить процесс в памяти
Оформил: DeeCo
Вот пример реально работающего загрузчика. Функции readprocessmemory и writeprocessmemory - это то, что нужно.
program Loader;
uses Windows;
const
buf: array[0..1] of byte = ($EB, $13);
const
appname = 'empty.exe';
var
i: cardinal;
sti: tstartupinfo;
lpPi: tprocessinformation;
begin
if not CreateProcess(nil, AppName, nil, nil, false, CREATE_SUSPENDED
, nil, nil, StI, lpPI) then
begin
messageboxa(0, 'А де radmin.exe?', 'RA Loader', 0);
halt;
end
else
//Ждем пока распакуется
while true do
if readprocessmemory(lppi.hProcess, pointer($AC0506), @buf[0], 1, i) then
if buf[0] <> $0 then
begin
//остановили процесс
suspendthread(lppi.hThread);
//записали чё хотели
//writeprocessmemory(lppi.hProcess,pointer($004054DF),@buf[1],1,i);
writeprocessmemory(lppi.hProcess, pointer($004054DF), @buf, 2, i);
//поехали дальше!
resumethread(lppi.hThread);
closehandle(lppi.hprocess);
halt;
end;
end;
end.
|