Autor |
Beitrag |
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:40
lol
sehe grade dass mein UT-Trainer noch anderes kann: Jumpboots und AMMO werden auch ned abgezogen
war zwar nicht geplant, aber bitte...
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 05.01.05 16:41
ist assembler dringend notwendig, das muss doch so ähnlich gehen oda nich ?
|
|
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:43
im prinzip musst du dir nur vorstellen können was da passiert, und an der richtigen stelle die nops setzen. ASM musst du nur können, wenn du da komplett eigene routinen reinschreiben willst.
|
|
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:44
@F34r0fTh3D4rk
Irgendwie ist dein Link bissele komisch!! Hast du keinen Direktlink zur .zip oder .exe?? Wär besser... DANKE!!
_________________ 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:44
und wie sähe das denn aus ich finde das pass hier inst tut ganz gut rein (geht ja auch um trainer  ) Also StarCraft Minaralien auf 9999 setzen oda so ?
|
|
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:52
bei anzahl mineralien handelt es sich um daten, nicht um code. das autohack nützt dir hir also nix, weil du damit nur die stellen im code rauskriegst die diesen wert verändern. du musst direkt in den adressbereich des wertes schreiben, den du bei der Suche mit THack zu der "liste" hinzufügst.
Dort schreibst du dann nicht $90 - NOP rein, sondern $FF - 255. das halt 4 mal, wenn der wert 4 bytes lang ist.
problematischerweise wird sich die adresse des Datenspeichers aber bei jedem Start des Spiels ändern. ein trainer nützt da also ned wirklich was
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: Mi 05.01.05 16:56
retnyg hat folgendes geschrieben: | 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; | |
Moin Günther (ich geh mal davon aus dass du so heisst  )
Das ist also ein Gottmode...jetzt gibts nur folgende Frage für mich: Was bedeutet dieses #144#144  Das gleiche wie nop?
Ich muss nochmal wegen meinem HL2 Trainer fragen:
Also, irgndwo im Speicher befindet sich eine Booleanvariable, die für "Waffe verfügbar" den wert 1 und für "Waffe nicht verfügbar" den Wert 0 annimmt. Also bin ich mit TSearch hergegangen, und habe mithilfe des bekannten Verfahrens nach der Adresse gesucht. Ich habe sie gefunden und es ist sagen wir mal die Adresse $123456. Diese Adresse könnte ich jetzt mit WriteProcessMemory umschreiben. Bekanntes Problem: Sobald ich das Spiel neustarte ist die Adresse wo anders. Also greife ich auf dieses Tutorial zurück, und mach es wie en1gma es beschrieben hat, und such mit TSearch's Autohack, nach der Adresse des Befehls. Diese Adresse (kann ich nicht auswendig) von mir aus ist es $a123202. An dieser stelle wird der ASM Befehl "Dec DWORD". Also Decrease DWORd. DWord ist der wert unserer Adresse $123456. Wunderbar, doch hilft es mir nun herzlich wenig, den Befehl mit Nop zu überschreiben. Es würde lediglich bewirken, dass ich die Waffe auch noch besitze nachdem ich sie eigentlich weggeschmissen habe. Problem: Wenn ich die Waffe überhaupt nicht habe! Der Wert ist 0. Ich muss den Wert der Adresse $123456 allerdings in $1 umschreiben. Es gibt dann natürlich auch noch den Befehl an der Stelle $a1234234, der INC dWord [irgendwas] heisst. Also increase Adresse $123456. Ich müsste es also schaffen, das PRogramm dazu anzustiften, diesen Befehl auszuführen. Wie gehts das? 
Zuletzt bearbeitet von Karlson am Mi 05.01.05 17:11, insgesamt 1-mal bearbeitet
|
|
Stefan-W
      
Beiträge: 475
Win 7 SP1
D2005 PE
|
Verfasst: Mi 05.01.05 16:57
hi Leut's ich verfolge das hier schon von anfag ann und ich finds interessant!
Ich hab mal den Link zum Generic Game Trainer 1.61 raus gesucht
Cu
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 05.01.05 17:01
|
|
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 17:03
Karlson hat folgendes geschrieben: | Was bedeutet dieses #144#144 Das gleiche wie nop? |
tach karlson
also, ja.
NOP = 90 hex oder 144 dezimal
also ist #144 genau das gleiche wie $90
ich würde dir aber empfehlen die angepasste prozedur WriteProcMem zu verwenden, die ich 2-3 einträge später gepostet habe.
gruss retnyg (wo siehst du da ein H ?) 
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 05.01.05 17:06
also hat jemand n code parat wie man zB in minesweeper die zeit zb. auf 30 oder zeit+1 setzen kann, plz code sonst steig ich da nich druch (habs net so mit theorie  )

|
|
Karlson
      
Beiträge: 2088
|
Verfasst: Mi 05.01.05 17:12
F34r0fTh3D4rk hat folgendes geschrieben: | also hat jemand n code parat wie man zB in minesweeper die zeit zb. auf 30 oder zeit+1 setzen kann, plz code sonst steig ich da nich druch (habs net so mit theorie )
 |
Bingo, da hat jemand die selbe Frage wie ich! Lest euch bitte meinen dazu editierten Text oben durch  ich dachte nicht dass ihr so schnell seid.
@Retnyg: Jo alles klar also ist #144 = $90. Wieder was dazu gelernt  Und stimmt Günther? Weil wenn man Retnyg rückwerts auspricht kommt günther raus 
|
|
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 17:44
Karlson hat folgendes geschrieben: | $a123202. An dieser stelle wird der ASM Befehl "Dec DWORD". Also Decrease DWORd. DWord ist der wert unserer Adresse $123456. Wunderbar, doch hilft es mir nun herzlich wenig, den Befehl mit Nop zu überschreiben. Es würde lediglich bewirken, dass ich die Waffe auch noch besitze nachdem ich sie eigentlich weggeschmissen habe. Problem: Wenn ich die Waffe überhaupt nicht habe! Der Wert ist 0. Ich muss den Wert der Adresse $123456 allerdings in $1 umschreiben. Es gibt dann natürlich auch noch den Befehl an der Stelle $a1234234, der INC dWord [irgendwas] heisst. Also increase Adresse $123456. Ich müsste es also schaffen, das PRogramm dazu anzustiften, diesen Befehl auszuführen. Wie gehts das?  |
also wenn schon, dann steht da z.b dec dword ptr [ecx+0x28] also quasi hole adresse aus register ECX, tu 28h dazu, und ziehe eins bem Inhalt der daraus resultierenden adresse ab.
das wäre also der befehl, wenn du deine waffe verlierst. das kannst du ausnop'en und du verlierst die knarre nichtmehr.
um waffen zu kriegen die du nicht hast musst du wahrscheinlich selber die adresse im speicher aus dem assemblercode berechnen lassen (was auch erfordert dass du die entsprechenden register - zum richtigen zeitpunkt - ausliest), oder irgendwo im spielcode deinen eigenen assemblercode einbauen. das zu erläutern ginge aber zu weit, da ich es noch nie gemacht habe...
edit: von en!gma, dem threadstarter habe ich auch schon länger nichts mehr gehört... er kann dir sicher weiterhelfen 
|
|
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 22:53
F34r0fTh3D4rk hat folgendes geschrieben: | also hat jemand n code parat wie man zB in minesweeper die zeit zb. auf 30 oder zeit+1 setzen kann, plz code sonst steig ich da nich druch (habs net so mit theorie )
 |
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 + $00; 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('Minesweeper',$100579C,4); end; |
man beachte dass statt NOPs $00's an die SpeicherAdresse des Datenwertes von ElapsedTime bei Minesweeper geschrieben werden.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 06.01.05 15:48
versteh ich net is das nich das gleiche wie vorhin ?
mach mal n beispiel wo du die elapsedtime auf 40 oda so hast !
Wo soll das geändert werden hier doch net etwa oder ?
Delphi-Quelltext 1:
| for i := 1 to numbernops do buf := buf + $00; |
plz beispiel 
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Do 06.01.05 16:30
der unterschied ist dass vorher 4 NOPs ($90) in den OP-CODE Bereich des Programmspeichers geschrieben wurden, und nun 4 mal der Wert $00 in den Datenbereich !
hier extra für dich ein minesweeper patch der die Zeit auf 40 stellt.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure WriteProcMem(procWndTitle: string;CodeAddr:integer; Buffer: pchar; BufLen:byte); var c, write : Cardinal; 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; GetWindowThreadProcessId(c,@c); c:=OpenProcess(PROCESS_ALL_ACCESS,False,c); WriteProcessMemory(c,Ptr(CodeAddr),buffer,buflen,write); CloseHandle(c); end;
procedure TForm1.Button1Click(Sender: TObject); begin writeprocMem('Minesweeper',$100579C,#40#00#00#00,4); end; |
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 06.01.05 16:34
wäre
Delphi-Quelltext 1:
| writeprocMem('Minesweeper',$100579C,#60#00#00#00,4); |
dann 60 ?
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Do 06.01.05 16:41
ja, weil #60 = dezimal 60
$60 = hex 60 = dezimal 96
warum probierst dus nicht einfach aus ? 
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 06.01.05 19:15
und was haben die hier zu bedeuten: #00#00#00
sind das die 3 byte die noch zu 4 fehlen ?
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Sa 08.01.05 02:18
genau. der wert ist halt in einer 4 byte grossen variable gespeichert, obwohl 2 byte für die zahlen 1-999 auch reichen würden.
|
|
|