[Request]Trainer-Algorythm

04/23/2007 15:18 reijin#1
Tag leute!
Ich habe mir zum Ziel gemacht, einen Trainer zu entwerfen. er soll folgendes tun können:
Den Code an der Adresse XY durch nops ersetzen.
allerdings bin ich etwas überfragt in der Hinsicht. Und deshalb frage ich mal, ob mir jemand mal sagen kann wie der assambler code aussieht um diese funktion auszuführen. Oder kann mir vllt jemand nen tipp geben?
Andere sprachen sehe ich auch gerne :)

Gruß, reijin

karma für alles :)
04/23/2007 15:46 Dodge#2
da du ja schon nach nem asm code fragst, gehe ich davon aus das du es auch verstehen kannst^^


[Only registered and activated users can see links. Click Here To Register...]


hier hat mr.rattlz ein asm code gepostet in dem er unter anderem auch code in einen process schreibt^^


hoffe es hilft dir weiter :-)
04/23/2007 16:28 reijin#3
k, ich werde mir das mal ansehen.
//EDIT// kommt bald^^
04/23/2007 17:08 rEdoX#4
Ich gehe jetzt mal davon aus, dass der trainer nur fuer ein bestimmtes spiel funktionieren soll alles andere laesst sich nur schwer machen.
Als erstes suchst du die addresse an der du patchen willst mit einem disassembler, dieser sollte dir anzeigen wie "groß" die instruction ist. Jetzt nimmst du dir ein array das so groß ist wie deine instruction, dieses füllst du nun mit 0x90 (0x90 = nop). Nun kannst du es mit Writeprocessmemory in den speicher schreiben. fertig.


lg
04/24/2007 10:58 neji#5
hier mal als kleines Delphi Beispiel

Code:
procedure WriteAddress(aHandle, address:Cardinal; bytes: string);        // Ref# 011
var
 ActByte:Byte;
 Loop:integer;
 write, pid,newproc : Cardinal;
begin
 Bytes := StringReplace(Bytes,' ','',[rfReplaceAll]);
 GetWindowThreadProcessId(aHandle,@pid);
 newproc := OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
 if Length(Bytes) mod 2 = 0 then for Loop := 1 to (Length(Bytes) div 2) do
 begin
  ActByte := StrToInt('$'+Bytes[Loop*2-1]+Bytes[2*Loop]);
  WriteProcessMemory(newproc,ptr(address),@ActByte,sizeof(ActByte),write);
  inc(address);
 end;
 CloseHandle(newproc);
end;
Aufgerufen wird die Funktion dann mit
Code:
WriteAdress(123456,$10ABF,'90 90 90 90')
wobei 123456 das Prozesshandle ist, $10ABF die Speicheradresse und 90 90 90 90 steht exemplarisch für 4 NOP's.

Ich weiss, nur zum ausnoppen kann man das auch einfacher machen, aber mit der Funktion kann man sich auch einfach den Code ausm Tsearch ala "Poke 10ABF 1F 10 FF 90 B3" oder sowas rauskopieren.