Autor Beitrag
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 05.01.05 16:41 
ist assembler dringend notwendig, das muss doch so ähnlich gehen oda nich ?
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Mi 05.01.05 16:56 
retnyg hat folgendes geschrieben:
ups sorry

so wärs richtig:
ausblenden 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'); //Get WindowHandle
  buf := #144#144;
  if c=0 then
  begin
    MessageDlg('...erst spiel starten...dann trainer starten =)',mtwarning,[mbOK],0);
    Exit;
  end;
  GetWindowThreadProcessId(c,@c); //Get ProcessID and ignore ThreadID
  c:=OpenProcess(PROCESS_ALL_ACCESS,False,c);  //Get ProcessHandle
  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 :lol: 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? :mrgreen:


Zuletzt bearbeitet von Karlson am Mi 05.01.05 17:11, insgesamt 1-mal bearbeitet
Stefan-W
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 05.01.05 17:01 
hier noch n paar interessante toolz

www.downloads.de/rub...mp;sort=datum_update
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 05.01.05 17:03 
Karlson hat folgendes geschrieben:
Was bedeutet dieses #144#144 :lol: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 :lol: )

:oops:
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: 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 :lol: )

:oops:


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 :lol: Und stimmt Günther? Weil wenn man Retnyg rückwerts auspricht kommt günther raus :)
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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? :mrgreen:


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 :mrgreen:
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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 :lol: )

:oops:


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:
procedure WriteProcMem(procWndTitle: string;CodeAddr:integer; numberNops:byte);
var
  c, write : Cardinal;
  buf: pchar;
  i: byte;
begin
  c:=FindWindow(nil,pchar(procWndTitle)); //Get WindowHandle
  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); //Get ProcessID and ignore ThreadID
  c:=OpenProcess(PROCESS_ALL_ACCESS,False,c);  //Get ProcessHandle
  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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 ?

ausblenden Delphi-Quelltext
1:
for i := 1 to numbernops do  buf := buf + $00;					


plz beispiel :D
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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.

ausblenden 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)); //Get WindowHandle
  if c=0 then
  begin
    MessageDlg('...erst spiel starten...dann trainer starten =)',mtwarning,[mbOK],0);
    Exit;
  end;
  GetWindowThreadProcessId(c,@c); //Get ProcessID and ignore ThreadID
  c:=OpenProcess(PROCESS_ALL_ACCESS,False,c);  //Get ProcessHandle
  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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 06.01.05 16:34 
wäre
ausblenden Delphi-Quelltext
1:
writeprocMem('Minesweeper',$100579C,#60#00#00#00,4);					


dann 60 ?
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 06.01.05 16:41 
ja, weil #60 = dezimal 60
$60 = hex 60 = dezimal 96

warum probierst dus nicht einfach aus ? :gruebel:
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 06.01.05 19:15 
und was haben die hier zu bedeuten: #00#00#00 :gruebel:
sind das die 3 byte die noch zu 4 fehlen ?
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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.