Autor |
Beitrag |
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 13:17
Gut, ich muss also vier Zeilen Code verwenden, für die 4 Bytes, ähnlich dem nachfolgenden:
Delphi-Quelltext 1: 2: 3: 4:
| WriteProcessMemory(HandleWindow,ptr($10AC0EBD),buf,1,write); WriteProcessMemory(HandleWindow,ptr($10AC0EBD),buf,1,write); WriteProcessMemory(HandleWindow,ptr($10AC0EBD),buf,1,write); WriteProcessMemory(HandleWindow,ptr($10AC0EBD),buf,1,write); |
Nur das, was ich unterlegt hab, muss ja anders aussehen, nählich die Zahlen, die danach kömmen.. Nur wie zählt man beim Hexadezimalsystem??
1--01
2--02
3--03
4--04
5--05
6--06
7--07
8--08
9--09
10--0A
11--0B
12--0C
13--0D
14--0E
15--0F
16--10
17--11
18--12
19--13
20--14
Stimmt das so ungefähr?? (Ich hab' das vorher noch nie gesehen!! Ich denk mir das nur so, weil n bissele logisch ist, kann also total falsch sein!!  )
Also ist die Reihenfolge so??
$10AC0EBD
$10AC0EBE
$10AC0EBF
$10AC0EC0
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Mi 05.01.05 13:20
WeBsPaCe hat folgendes geschrieben: | Also ist die Reihenfolge so??
$10AC0EBD
$10AC0EBE
$10AC0EBF
$10AC0EC0 |
Ja. Oder du packst in deinen Puffer gleich alle 4 Bytes rein und machst dann ein
Delphi-Quelltext 1:
| WriteProcessMemory(HandleWindow,ptr($10AC0EBD),buf,4,write); |
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 13:23
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 05.01.05 13:25
das kannst du ganz sicher gebrauchen...
tut dein programm jetzt ?
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 13:46
Nein!!!
Also:
Ich hab da jetzt die Zeile da stehen: WriteProcessMemory(HandleWindow,ptr($10AC0EBD),buf,4,write);
Wenn ich das Prog jetzt so starte, verreckt SCPT wieder!! Ich hab dann nochmal mit TSearch nachgeguckt, ob es auch wirklich die Adresse ist... Und dann stand auch ne andre drin: $10AC0EF7!!!
Ich hab dann mal das Debug-Fester offen gelassen und die neue Adresse in mein Prog reingeschrieben und es ist wieder abgestürzt.. Im AutoHack-Ding stand dann noch zusätzlich zu dem vorherigen Eintrag das da drin:
10AC0EBD: dec dword ptr [ecx+0x324]
Das ist wieder die alte Adresse!!! Aber mit nem andren Assembler-Code!!! Ich blicks nichmehr... Im Debugfenster steht also jetzt insgesamt:
10AC0EF7: mov [edi+0x324],ecx
10AC0EBD: dec dword ptr [ecx+0x324]
HILFE!! Sorry, ich piens' wohl zu arg rum, wat?? Aber das kotzt mich irgendwie schon an!!!
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 05.01.05 14:36
ich verstehs ehrlich gesagt überhaupt nich, was macht der code, unterdrückt er einen command ? wie kann man werte mit delphi verändern oder was tut dieser code ?
was ist wenn ich in starcraft meinetwegen 9999 mineralieren haben und freezen möchte, welchen hexcode muss ich wovon wofür wie nehmen ? 
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 14:40
Hast du dir das Tutorial auf Seite 1 denn überhaupt mal durch gelesen?? Deine Fragen werden dadrin eigentlich beantwortet..
Wenn nicht, dann poste sie nochmal, aber n bissele präziser!! 
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 05.01.05 14:45
ja ich habs auch verfolgt, wenn man diesen wert im autohack window freezt wird der Befehl zB. um health abgezogen zu bekommen blockiert und mit dem anderen hex dingels kann man den wert verändern, aber wie kann ich denn in delphi machen ja ich will jede sekunde + 1 health oda so ?
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 14:49
Dann musst du in die Speicheradresse einen anderen Assemblercode reinschreiben, also nich diese lustige 90, die für "gar-nichts-machen" steht, sondern was was für "health+1" steht. Was genau das ist, weiß ich auch nich'...
Ich guck' mich aber mal nach einem Assembler-Tut um... 
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 05.01.05 15:29
hmm nett... ich hab das jetzt eben zum ersten mal probiert. habe in 5 min bereits einen funktionierenden GOD-Mode Trainer für UT erstellt =)
sehr cooles tool das tsearch.
bei dem autohack sieht man die Prozessspeicherposition des Kommandos, das ausgeführt wird wenn sich der im TSearch beobachtete Wert ändert. bei UT also: 10133C14: mov [edi],eax (wenn von der health was abgezogen wird).
Rein theoretisch sollte sich der Programmcode immer an der selben Posi im Speicher befinden, ausser an der exe wurde was geändert.
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 15:36
Hi retnyg!!!
Kannst du deinen Unit-Code vielleicht mal schnell posten??
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 05.01.05 15:39
gerne, is zwar nix berühmtes...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure WriteValues; var c : Cardinal; buf: pchar; begin c:=FindWindow(nil,'Unreal Tournament'); buf := #144#144; if c=0 then begin MessageDlg('...erst spiel starten...dann trainer starten =)',mtwarning,[mbOK],0); Exit; end; GetWindowThreadProcessId(c,@c); c:=OpenProcess(PROCESS_ALL_ACCESS,False,c); WriteProcessMemory(c,Ptr($10133c14),buf,2,write); CloseHandle(c); end; |
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 15:44
Ist das wirklich alles, poste doch mal wirklich die ganze Unit, weil wenn ich deinen Code bei mir compilieren will, sagt er: [Error] Unit1.pas(40): E2033 Types of actual and formal var parameters must be identical!!! 
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 05.01.05 15:48
ups sorry
so wärs richtig:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure WriteValues; var c, write : Cardinal; buf: pchar; begin c:=FindWindow(nil,'Unreal Tournament'); buf := #144#144; if c=0 then begin MessageDlg('...erst spiel starten...dann trainer starten =)',mtwarning,[mbOK],0); Exit; end; GetWindowThreadProcessId(c,@c); c:=OpenProcess(PROCESS_ALL_ACCESS,False,c); WriteProcessMemory(c,Ptr($10133c14),buf,2,write); CloseHandle(c); end; |
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 16:17
VIELEN DANK!!!! SO FUNKTIONIERTS!!!!
Es lag daran, dass dieser Assembler-Befehl doch nur 2 und keine 4 Bytes hatte!!! Wie bekomme ich das denn jetzt wirklich raus?? Weiß das jemand?? Woher wusstest du denn das retnyg??
@F34r0fTh3D4rk
Brauchst du den Code noch??
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 05.01.05 16:23
also ich finde Tsearch nicht so gut, vor allem wenn wie bei diablo die werte für health nicht bekannt sind, der generic game trainer ist da besser geeignet.
Ich habe versucht die punkte im 3d pinball von windows zu freezen, das spiel ist abgestürzt, wenn ich das gleiche bei dem anderen hex wert gemacht habe hatte ich irgendwas um die 4 millionen punkte.
Die Zeit beim minesweeper zu freezen hab ich auch ausprobiert, das geht:
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: 32:
| var Form1: TForm1; WindowName: integer; ProcessId: integer; ThreadId: integer; buf: PChar; HandleWindow: Integer; write: cardinal;
Const WindowTitle = 'MineSweeper';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); const v1 = $90; begin WindowName := FindWindow(nil,WindowTitle); If WindowName = 0 then showmessage('Bitte starten Sie zuerst das Spiel' + #13 + 'bevor Sie den Trainer aktivieren!') else begin ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); GetMem(buf,1); buf^ := Chr(v1); WriteProcessMemory(HandleWindow,ptr($1002FF5),buf,4,write); FreeMem(buf); closehandle(HandleWindow); showmessage('Die Zeit wurde eingefroren!'); end; end; |
Wie kann ich das jetzt aber wieder unfreezen und wie kann ich den Wert bearbeiten ? Also zB: 50 Sek ?
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 05.01.05 16:30
gern geschehen. dass der befehl bei mir 2 bytes hat liegt daran dass es nur ein mov register1, register2 ist. was immer 2 bytes lang ist...
ich habe die routine oben mal so geändert, dass man ihr als parameter den Spiele-Titel, die Adresse des zu patchenden Codes, und die Anzahl an Bytes reinschreiben kann:
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:
| procedure WriteProcMem(procWndTitle: string;CodeAddr:integer; numberNops:byte); var c, write : Cardinal; buf: pchar; i: byte; begin c:=FindWindow(nil,pchar(procWndTitle)); if c=0 then begin MessageDlg('...erst spiel starten...dann trainer starten =)',mtwarning,[mbOK],0); Exit; end; buf := ''; for i := 1 to numbernops do buf := buf + $90; GetWindowThreadProcessId(c,@c); c:=OpenProcess(PROCESS_ALL_ACCESS,False,c); WriteProcessMemory(c,Ptr(CodeAddr),buf,numberNops,write); CloseHandle(c); end;
procedure TForm1.Button1Click(Sender: TObject); begin writeprocMem('Unreal Tournament',$10133c14,2); end; |
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 16:31
Zitat: | der generic game trainer ist da besser geeignet. |
Wo bekomm' ich den her??
Zitat: | Ich habe versucht die punkte im 3d pinball von windows zu freezen, das spiel ist abgestürzt, wenn ich das gleiche bei dem anderen hex wert gemacht habe hatte ich irgendwas um die 4 millionen punkte. |
Poste mal den Code, sonst kann man da ja nich' viel sagn, ne??
Zitat: | Die Zeit beim minesweeper zu freezen hab ich auch ausprobiert, das geht: |
Welches Windows, bzw. welches MineSweeper hast du?? Weil ich hab' ne andere Adresse wie du: $100579C
Zitat: | Wie kann ich das jetzt aber wieder unfreezen und wie kann ich den Wert bearbeiten ? Also zB: 50 Sek ? |
Dazu musst du wieder Assembler können. Wenn ich ein Tutorial finden, schreib ichs als EDIT dazu..
//EDIT: andremueller.gmxhome.de/intro.html
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 05.01.05 16:36
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 05.01.05 16:37
danke ich werds mir anschauen
EDIT:
www.telus.net/jz/gentrain
da ist der generic druf
|
|
|