LittleBen - Sa 21.05.11 18:42
Titel: Adressenspeicher durchsuchen
Hallo,
bin gerade dabei eine Art Trainer zu programmieren. Habe mir schon viele Tutorials angeguckt, doch bei allen muss ein Hilfsprogramm wie
CheatEngine benutzt werden, um die Adresse herraus zu finden.
Alles was ich will ist, bei einem Spiel die Adresse eine Wertes (z.B Geld) zu finden (aber mit Delphi).
Wenn ich diese dann mal habe ist der Rest ja einfach.
Das ist mein erster Ansatz:
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: 29: 30: 31:
| procedure TForm1.Button1Click(Sender: TObject); var WindowName: Integer; Window: Integer; Pidi: Integer; Wert: DWORD; nBuf: integer; cAdr: string; nPos: integer; begin Active:= true; cAdr:= edit1.Text; WindowName:= FindWindow(nil,'Test'); GetWindowThreadProcessId(WindowName ,@Pidi); Window:= OpenProcess(PROCESS_VM_READ ,False , Pidi);
while 0 = 0 do begin nPos:= StrToInt('$'+cAdr); cAdr:= inttohex(nPos+4,nPos+4);
ReadProcessMemory(Window ,ptr($+strtoint('$'+cAdr)),@nBuf,4,Wert); memo1.lines.add(cAdr+' : ' + IntToStr(nBuf)); if nBuf = strtoint(edit2.Text) then memo2.Lines.Add(cAdr+' : ' + IntToStr(nBuf));
Application.ProcessMessages; if Active = false then exit; end; CloseHandle(Window); end; |
Das ganze funktioniert eigentlich ganz gut.
Doch jetzt meine Fragen:
1)
Wenn ich bei $0 anfange, kommen erst noch tausende Adressen mit dem Wert 0.
Wo muss die Suche dann beginnen?
2)
Woher weiß ich, wann die Schleife beendet werden kann.
Also wo ist das Programmende?
3)
Was macht
CheatEngine oder
TSearch anderst, dass die Suche bei ihnen viel schneller ist?
Hoffe sehr, dass ihr mir helfen könnte!
Danke & Grüße,
Benny
LittleBen - Sa 21.05.11 22:25
jaenicke hat folgendes geschrieben : |
| Lass die Memo-Ausgaben und die Stringumwandlungen weg... ;-) |
Mhh, dauert immer noch gut ne Stunde wenn ich von
$0 starte...
EDIT: Wie wird denn eig. in der Assemblersprache das Programm beendet? Also was für ein Wert wird nBuf annehemen?