AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Trainer mit Delphi Coden

Ein Thema von Rusher.Nr1 · begonnen am 27. Okt 2009 · letzter Beitrag vom 6. Feb 2010
 
bugfix

Registriert seit: 6. Feb 2010
2 Beiträge
 
#2

Re: Trainer mit Delphi Coden

  Alt 6. Feb 2010, 16:46
Das Thema ist zwar schon älter, aber vllt. findets ja jemand nützlich.

Alles was du tun musst, um dein Cheat Engine Script in einen Trainer zu packen, ist die Bytes deiner Befehle an die entsprechenden Memory Adressen zu schreiben.

Die entsprechenden Bytes für jeden Befehl kannst du im Memory View von Cheat Engine sehen.
Beispiel:

00 b8 c3 50 00 34 ist gleich add [eax+340050c3],bh In deinem Trainer wirst du konkret folgendes brauchen:

1.) Eine function, mit der du die Prozess-ID des Spieles herausfinden kannst:

Delphi-Quellcode:
function GetProcessID(Const ExeFileName: string; var ProcessId: integer): boolean;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  result := false;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  while integer(ContinueLoop) <> 0 do begin
   if (StrIComp(PChar(ExtractFileName(FProcessEntry32.szExeFile)), PChar(ExeFileName)) = 0)
      or (StrIComp(FProcessEntry32.szExeFile, PChar(ExeFileName)) = 0) then begin
      ProcessId:= FProcessEntry32.th32ProcessID;
      result := true;
      break;
   end;
   ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;
2.) Procedures, mit denen du deine Bytes in den Speicher schreibst.

Diese hier benutze ich für NOPs
Delphi-Quellcode:
procedure poke1(Address: Cardinal; Data: Byte);
var
  Written: Cardinal;
begin
  WriteProcessMemory(PidHandle, Pointer(Address), @Data, SizeOf(Data), Written);
end;
Nutzungsbeispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 if GetProcessID(ProgramName, PidId) then
  begin
   PidHandle := OpenProcess(PROCESS_ALL_ACCESS,False,PidId);
   poke1($41ba76, $90);
   poke1($41ba76 + 1, $90);
   poke1($41ba76 + 2, $90);
   poke1($41ba76 + 3, $90);
   poke1($41ba76 + 4, $90);
   poke1($41ba76 + 5, $90);
  closehandle(PidHandle);
 end;
end;
Hier schreibe ich an die Adresse 41ba76 und die 5 danach das Byte 90, also No Operation.
ProgramName ist dabei eine Konstante, die den Prozessnamen deines Spiels enthält
Delphi-Quellcode:
Const
  ProgramName = 'hl2.exe';
Die folgende Procedure nutze ich, wenn ich mehr als ein Byte in eine Adresse schreibe
Delphi-Quellcode:
procedure pokeX(Address: Cardinal; Data: Array of Byte);
var
Written: Cardinal;
begin
  WriteProcessMemory(PidHandle, Pointer(Address), @Data, SizeOf(Data), Written);
end;
Beispiel
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
 if GetProcessID(ProgramName, PidId) then
  begin
   PidHandle := OpenProcess(PROCESS_ALL_ACCESS,False,PidId);
     SetLength(byteArr, 4);
  byteArr[0] := $C7;
   byteArr[1] := $45;
   byteArr[2] := $48;
   byteArr[3] := $01;
  pokeX($81B0000, byteArr);
  SetLength(byteArr, 4);
  byteArr[0] := $80;
   byteArr[1] := $7d;
   byteArr[2] := $48;
   byteArr[3] := $00;
  pokeX($81B0007, byteArr);
  poke1($81B000B, $56);
  SetLength(byteArr, 5);
  byteArr[0] := $e9;
   byteArr[1] := $3e;
   byteArr[2] := $82;
   byteArr[3] := $2d;
  byteArr[4] := $F8;
  pokeX($81B000C, byteArr);
   SetLength(byteArr, 5);
   byteArr[0] := $E9;
   byteArr[1] := $B1;
   byteArr[2] := $7D;
   byteArr[3] := $d2;
   byteArr[4] := $07;
   pokeX($48824A, byteArr);

    closehandle(PidHandle);
 end;
end;
Das wars auch schon
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz