Autor Beitrag
nightmare
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 22.10.03 20:25 
Hi !
Hab das Thema nochma aufgenommen und etwas zusammengefasst..
Es kam vorher zu keiner Lösung was aber schade ist da es meiner Meinung nach sehr interessant ist.. ( ich kann es selber auch nicht )
da es auch recht schwierig scheint...

Man hat ein Spiel/Programm und will die Punkte/Spielerposition ect. auslesen..

1. WO findet man diese Variablen ?
2. WIE liest man sie ?
(3. WIE manipuliert man sie ?)

viel spaß beim Posten ;D Beispiele sind erwünscht :P auch wenns hier schwer scheint.. z.B. die Score aus Solitär oder so...

Danke für die Interesse ! Cya !
nightmare Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 22.10.03 20:42 
kleiner nachtrag ;D
google hat mir grad folgendes ausgespuckt :
Einen Trainer programmieren:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
var 
WindowName : integer; 
ProcessId : integer; 
ThreadId : integer; 
buf : PChar; 
HandleWindow : Integer; 
write : cardinal; 
const 
WindowTitle = 'Fenstername'
Address = $+Speicheradresse; z.B. $004141AE 
PokeValue = $hexadezimalwert; z.B. $8E (HEX) für 142 (DEC) 
NumberOfBytes = 4; Nummer von Bytes 
begin 
WindowName := FindWindow(nil,WindowTitle); 
If WindowName = 0 then 
begin 
MessageDlg('Game not running! Please run it and try again!'
mtwarning,[mbOK],0); 
end

ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); 
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); 
GetMem(buf,1); 
buf^ := Chr(PokeValue); 
WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write); 
FreeMem(buf); 
closehandle(HandleWindow); 
end;


woll nur ma sagen ;D

aber eine Frage bleibt noch offen:
- WO ist der Wert ???

ist er überhaupt immer am gleichen Ort oder dynamisch ?
Moderiert von user profile iconUGrohne: Delphi-Tags eingefügt
Adam Weishaupt
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: Sa 25.10.03 16:50 
am besten, z.b. will man die anzahl der leben erhoehen, dann sucht man im code nach befehlen wie:

dec byte ptr
dec word ptr

oder aehnlichem: dec (klar: decrement x:=x-1, byte auch klar, ptr=pointer ( falls der assembler nicht weiss, wieviel byte die variable hat und in diesem fall 1 byte), beim 2. word ptr = die variable 2 byte gross)

sucht mit einem disassembler nach so einem befehl und macht es dann wie nightmare geschrieben hat

achja: dieser befehl ist IMMER an der selben stelle! in assembler muss alles in richtiger reihenfolge laufen.. ausser man baut unterprogramme oder labels ein