Autor Beitrag
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 13:17 
Gut, ich muss also vier Zeilen Code verwenden, für die 4 Bytes, ähnlich dem nachfolgenden:
ausblenden 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!! :D)

Also ist die Reihenfolge so??

$10AC0EBD
$10AC0EBE
$10AC0EBF
$10AC0EC0

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: 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

ausblenden 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
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 13:23 
Zitat:
Ja. Oder du packst in deinen Puffer gleich alle 4 Bytes rein und machst dann ein


:rofl: Ich glaubs nich!! So ein Sch.... Da hätt' ich mir das da oebn ja sparn können!!! Egal jetzt weiß ich wenigstens was von Hexadezimalzahlen!! Brauch ich vielleicht irgendwann... oder auch nich'... :rofl: :rofl:

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
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 13:25 
das kannst du ganz sicher gebrauchen...
tut dein programm jetzt ?
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 13:46 
Nein!!! :cry:

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
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 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 ? :oops: :? :shock:
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 14:40 
Hast du dir das Tutorial auf Seite 1 denn überhaupt mal durch gelesen?? Deine Fragen werden dadrin eigentlich beantwortet.. :wink:

Wenn nicht, dann poste sie nochmal, aber n bissele präziser!! :wink:

_________________
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 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
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 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... :roll:

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
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 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
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 15:36 
Hi retnyg!!! :D

Kannst du deinen Unit-Code vielleicht mal schnell posten??

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
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 15:39 
gerne, is zwar nix berühmtes...
ausblenden 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'); //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;
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 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!!! :cry:

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
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 15:48 
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;
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:17 
VIELEN DANK!!!! SO FUNKTIONIERTS!!!! :dance: :dance2:

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
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: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:

ausblenden volle Höhe 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:
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
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: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:

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 + $90;
  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('Unreal Tournament',$10133c14,2);
end;
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: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?? :wink:

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.. :D

//EDIT:andremueller.gmxhome.de/intro.html

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
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:36 
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:37 
danke ich werds mir anschauen :)

EDIT:

www.telus.net/jz/gentrain

da ist der generic druf