Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
Delphi 2007 Enterprise
|
Re: Patcher
18. Sep 2005, 00:47
Zitat von ErazerZ:
Delphi-Quellcode:
program Patch;
{$APPTYPE CONSOLE}
uses
Windows; // brauchst nur windows unit wegen den winapi's
// handle = handle des modules, offset = welchen offset es patchen sollte, newcode = der neue code in integer, eg. jle = 0F8E
procedure PatchOffset( Handle: Cardinal; Offset: LongInt; NewCode: LongInt);
var
Buffer: Pointer; // .. der zeiger zu den daten
FileSizeA: Cardinal; // hier wird die dateigröße gespeichert
begin
FileSizeA := GetFileSize( Handle, nil); // dateigröße auslesen ..
Buffer := Pointer(LocalAlloc(0, FileSizeA)); // speicher reservieren oder wie auch immer
_lread( Handle, Buffer, FileSizeA); // auslesen
_llseek( Handle, 0, FILE_BEGIN); // den zeiger auf den offset setzen ..
PByte(Cardinal(Buffer) + Offset)^ := NewCode; // den offset patchen in der memory
_lwrite( Handle, Buffer, FileSizeA); // den geänderten speicher schreiben ..
end;
var
h: Cardinal; // hier speichert man den dateihandle
begin
h := _lopen(PChar(ParamStr(1)), OF_READWRITE); // datei öffnen (paramstr(1) = c:\bla\bla.exe <paramstr1>)
if h <> INVALID_HANDLE_VALUE then // wenn handle nicht ungültig ist ..
begin
PatchOffset(h, $1, $90); // patche module h, beim offset 1, mit nem nop
end;
_lclose(h); // module schließen ..
end. // ende ..
|
|
Zitat
|