Thema: Delphi Patcher

Einzelnen Beitrag anzeigen

Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#27

Re: Patcher

  Alt 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 ..
  Mit Zitat antworten Zitat