Autor Beitrag
en!gma
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Sa 25.12.04 12:21 
hi!
also erstmal...
dies ist mein allererstes tutorial überhaupt...ich hab es geschrieben, da ich bis jetzt noch kein ausführliches (ka ob das hier ausführlich is ;D ) tutorial auf deutsch und für delphi gefunden habe...
kritik is gerne erwünscht...
achja und gewöhnt euch schonmal dran das ich alles klein schreibe ^^
bin halt faul und das wird sich auch so schnell nicht ändern...

hmm wie fang ich am besten an?
okey dann versuch ich das tutorial am besten mal in mehrere teile zu unterteilen...

1. was ist überhaupt ein trainer und was wird in diesem tutorial eklärt?
2. was brauchen wir?
3. wie finde ich addressen heraus?
4. wie pack ich das ganze in einen delphi code?



1. was ist überhaupt ein trainer und was wird in diesem tutorial eklärt?

okey ich machs einfach mal knapp...
also...ein trainer is meistens da, um sich einen vorteil in einem spiel zu verschaffen. sei es nun um kein leben/geld oder einfach nur keine munition zu verlieren. diese ganzen werte wie leben geld usw werden im ram gespeichert,
unsere aufgabe ist nun, die position der werte herauszufinden und diese "einzufrieren".
dabei sollte man wissen, das es 2 sorten von werten...einmal den static memory addresses (dms) und den dynamic memory addresses (dma)...die sma bleiben immer an der gleichen stelle im ram, sie sind also einfach zu finden und zu editieren,
dann gibt es aber noch die dma...diese werte ändern diese position zB nach jedem spielneustart oder nach jedem reboot.
sobald wir diese werte herausgefunden haben, werden wir ein kleines programm mit delphi schreiben um sie "einzufrieren".



2. was brauchen wir?

hmm also erstmal das wichtigste...

-tsearch (könnt ihr hier runterladen fly.to/mtc)
-delphi (ich habe delphi 7 benutzt)
-ein opfer für unseren trainer (hab mal einfach starcraft genommen)
-nen kaltes getränk, gute musik und ein gehirn ;D



3. wie finde ich addressen heraus?

so, als erstes starten wir das spiel für das wir den trainer programmieren wollen, ich habe mich für starcraft entschieden, da es relativ alt ist und es noch dort noch nicht ganz so viele addressen gibt die man durchsuchen muss.
am besten starten wir einmal eine eigene map gegen den computer.

als erstes wollen wir die addresse von unseren mineralien herausfinden,
am anfang haben wir ja 50 mineralien wie wir oben rechts im spiel sehen können. also starten wir nun tsearch und klicken auf den fetten "open process" button mit dem chip drüber...
nun öffnet sich ein fenster in dem wir unseren prozess auswählen sollen, in diesem fall halt starcraft.

nun klicken wir auf die kleine lupe links unter dem "open process" button...
in diesem search fenster müssen wir erst einmal "exact value" auswählen, da
wir ja wissen, wie viele mineralien wir haben (am anfang immer 50)...
also tippen wir die 50 bei "value" ein und lassen den "type" auf 4 bytes.
normalerweise sind 1 byte 2 zahlen, 2 byte 4 zahlen, 3 byte 6 usw...
aber anfangs soll uns dies nicht kümmern und wir drücken auf ok.

nun sucht er alle addressen mit dem wert 50 für uns raus, meist findet er anfangs viele addressen (bei neueren spielen manchmal bis zu 7-9 stellige zahlen), aber wir suchen sofort weiter =).
also gehen wir zurück ins spiel und sammeln ein paar ressourcen auf...
sobald wir mehr haben als zuvor, merken wir uns wie viele mineralien wir nun
haben und gehen wieder zurück zu tsearch und klicken auf die lupe mit den 3 punkten dahinter (direkt rechts neben dem knopf nur mit der lupe)...
dieser knopf steht für weiter suchen, also schaut er nach veränderungen in den addressen die wir zuvor durch die suche davor gefunden haben.
dort sollten die einstellungen die gleichen sein wie zuvor beim suchen, nur das wir nun bei "value" unseren neuen wert von den mineralien eintippen.
bei mir wären das nun 106.

er sollte nun 4 verschiedene addressen finden. (falls dies nicht der fall ist und er doch ein paar mehr findet, sammelt einfach wieder ein paar mineralien auf und wiederholt den letzten schritt)

bisher haben wir immer nur mineralien dazubekommen, aber jetzt sollten wir mal schaun was passiert, wenn wir mineralien ausgeben...
also gehen wir wieder in starcraft, geben ein paar mineralien aus und suchen wieder nach unserem neuen mineralienwert...
und *tadaa* sind nur noch 2 addressen über...
einer von diesen beiden werten ist wahrscheinlich für die anzeige selbst, und die andere für die mineralien selbst, womit das spiel arbeitet.
also machen wir jeweils einen doppelklick auf jede der beiden addressen und wir haben sie in unserer "cheats list".
hier können wir die werte bei "value" verändern und so ausprobieren, welcher der wert für die anzeige ist und welcher für die andere.
angenommen ihr lasst einen wert auf 50 und ändert den anderen auf 5...
wenn ihr nun in das spiel geht und er oben 5 anzeigt, so ist die addresse, wo ihr die 5 eingegeben habt, für die anzeige, also brauchen wir die andere addresse.

nun wollen wir ausfindig machen, was genau passiert, wenn sich ein wert verändert, also klicken wir in tsearch oben auf "autohack", und wählen "enable debugger" aus...dann wählen wir im "cheats list" fenster die zweite (wie grad schon erklärt könnt ihr mit dem verändern der "value's" herausfinden welche ihr braucht) der beiden variablen mit einem rechtsklick aus und wählen ganz unten autohack aus...
nun prüft tsearch was passiert, wenn sich dieser wert verändert...
also gehen wir zurück ins spiel und geben wieder ein paar mineralien aus...

zurück in tsearch klicken wir oben auf "autohack" und anschliessend auf "autohack window"...
in diesem fenster sollte sich jex eine zeile stehen...
(401F75: (und irgendein befehl) falls ihr mineralien dazubekommen habt, wird dort auch noch der befehl 401F75: (und irgendein befehl))
dies ist der befehl der ausgeführt wird, wenn ihr mineralien ausgebt...
und damit haben wir eigentlich schon unser ziel für dieses kapitel erreicht...
um zu testen ob ihr wirklich die richtige addresse habt, klickt einfach mal auf das kleine quadrat neben diesem befehl, so dass dieser befehl zu nop (no operations) gesetzt wird...also wenn das spiel diesen befehl ausführen möchte, macht er einfach nichts, also das spiel gibt den befehl "mineralien abziehen"
aber wir haben nun den befehl "mineralien abziehen" so modifiziert, dass nichts passiert.
also sollte logischerweise nichts passieren wenn wir nun mineralien ausgeben...
also nichts wie zurück ins game und ausprobieren...
und *tadaa* es werden keine mineralien mehr abgezogen.

also noch einmal ein paar addressen falls ihr kleine probleme hattet =)

mineralien abziehen : 401F75 mit dem wert 8990A0D44F00
vespin-gas abziehen : 401F89 mit dem wert 8988D9D44F00

die werte könnt ihr unten im autohack window ablesen, aber diese werte sind nur wichtig, falls ihr den trainer wieder ausstellen wollt.

so nun haben wir unsere beiden addressen herausgefunden, die wir in unserem trainer benutzen möchten.
damit ist diese kapitel abgeschlossen und wir kommen endlich dazu das ganze in ein delphi programm zu schreiben.



4. wie pack ich das ganze in einen delphi code?

hier werd ich mich mal auf das gröbste beschränken und nur erzählen was wichtig ist, um einen trainer zu erstellen...
auf die einzelnen funktionen werde ich nicht extra eingehen, da ich auch selber weiss das man diese gerne überspringt ^^.

also erstellen wir einfach mal eine neue form und klatschen einfach mal einen button in die mitte und nennen ihn "buttonStart".
nun springen wir mal in den code und fügen ein paar variablen hinzu...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  WindowName  :  integer;
  ProcessId  :  integer;
  ThreadId  :  integer;
  buf  :  PChar;
  HandleWindow  :  Integer;
  write  :  cardinal;      

  Const  WindowTitle  =  'Starcraft';  //hier einfach den namen von unserm fenster eingeben! einfach spiel starten,
          //dann alt+tab drücken und in der taskleiste einfach nachschaun welche caption
                                        //unser programm hat und diese einfach einfügen.


zurück auf der form machen wir mal einen doppelklick auf unseren button...nun sollte sich das code-fenster
wieder öffnen und wir sollten direkt bei der TForm1.buttonStart prozedur landen.
hier fügt ihr einfach folgenden code ein:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
const v1 = $90
begin
 WindowName  :=  FindWindow(nil,WindowTitle);
          If  WindowName  =  0  then MessageDlg('...erst spiel starten...dann trainer starten =)',  mtwarning,[mbOK],0);
    ThreadId  :=  GetWindowThreadProcessId(WindowName,@ProcessId);
    HandleWindow  :=  OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
    GetMem(buf,1);
    buf^  :=  Chr(v1);
    FreeMem(buf);
    closehandle(HandleWindow);
end;


also "v1 = $90" ist die variable die wir einer bestimmten addresse geben wollen. 90 steht für nop, also das keine aktion durchgeführt wird.
im folgenden code wird erst einmal geschaut ob das spiel überhaupt geöffnet ist, wenn nicht, kommt die fehlermeldung:
"...erst spiel starten...dann trainer starten =)"
danach wird der ram ausgelesen und anschliessend wieder mit "FreeMem(buf)" freigegeben. "GetMem(buf,1)" ist pflicht um überhaupt etwas verändern zu können,
"FreeMem(buf)" hingegen ist nicht pflicht, aber dennoch empfohlen, da es den pc sonst unnötig langsamer macht.
nun brauchen wir noch unsern code der unsere addressen verändert.

erstmal müssen wir ein wenig rechnen und unser gehirn einschalten...
also wir haben ja die addresse 401F75 mit dem wert 8990A0D44F00 für mineralien herausgefunden und ich habe vorher schon einmal kurz angesprochen, dass
1 byte für 2 zahlen stehen...wir haben nun 8990A0D44F00 und müssen diese durch 909090909090 austauschen, und dies jeweils mit 1 byte...
also brauchen wir insgesamt 6 befehle um diesen code umzuschreieben. 6x2 zahlen, also 6x90...
401F75 selbst kann nur 1 byte zugewiesen werden...und wir müssen ja insgesamt 6 byte zuweisen...also müssen wir den 5 addressen direkt hinter 401F75
auch jeweils eine 90 zuweisen...

401F75
401F76
401F77
401F78
401F79
401F7A
...usw...jetzt haben wir unsere 6 addressen, welchen wir die 90 zuweisen müssen...

nun mal wieder ein bischen code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
WriteProcessMemory(HandleWindow,ptr($401F75),buf,1,write); //es wird der speicher umgeschrieben in der addresse 401F75 und es wird 1 byte geschrieben
WriteProcessMemory(HandleWindow,ptr($401F76),buf,1,write);
WriteProcessMemory(HandleWindow,ptr($401F77),buf,1,write);
WriteProcessMemory(HandleWindow,ptr($401F78),buf,1,write);
WriteProcessMemory(HandleWindow,ptr($401F79),buf,1,write);
WriteProcessMemory(HandleWindow,ptr($401F7A),buf,1,write);


diese paar zeilen müssen wir nun zwischen "buf^ := Chr(v1);" und "FreeMem(buf);" einfügen...
das war der code für die mineralien, nun versucht einmal das ganze mit dem vespin-gas,
die addresse und den wert habt ihr ja schon...

so ich hab den ganzen code nochmal als rar datei hinzugefügt...
das ganze könnt ihr hier -> www.phoenix-designz....rcraft%20trainer.rar herunterladen


so damit ist mein tutorial beendet denke ich...ich hoffe es war für alle verständlich, ansonsten bin ich noch gerne für fragen offen...
ich hoffe auf viel kritik und son kram =)

mfG
en!gma


Zuletzt bearbeitet von en!gma am Mi 03.10.07 22:59, insgesamt 3-mal bearbeitet
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: Mo 27.12.04 19:00 
Zitat:
einmal den static memory addresses (dms) und den dynamic memory addresses (dma)


SCHREIBFEHLER... muss richtig heißen:

einmal den static memory addresses (sma) und den dynamic memory addresses (dma)

schreibst du ja auch später:

Zitat:
die sma's bleiben

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Mo 27.12.04 19:03 
ja danke...war mir nich ganz sicher ob ich jex mit oder ohne ' schreiben soll...
ich änder das mal zu dma und sma...
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: Mo 27.12.04 19:04 
Zitat:
tsearch (könnt ihr hier runterladen fly.to/mtc


n direktlink zum Programm wär besser...

membres.lycos.fr/tsearch/tsearch_16.zip

:-) :-) :-)

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
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: Mo 27.12.04 19:06 
Zitat:
delphi (ich habe delphi 7 benutzt)


warum sonst auch ins delphi-forum schreiben ???

:-) :wink:

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
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: Mo 27.12.04 19:17 
Zitat:
//hier einfach den namen von unserm fenster eingeben, einfach spiel starten,
//dann alt+tab drücken und in der taskleiste schaun wie das programm heisst


Das hab ich net so wirklich kapiert... :-)

Soll man hier die Caption des Spielefensters eintragen??

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
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: Mo 27.12.04 20:02 
Ahhh, ok, muss ja die Caption vom Spiel sein, weil:

ausblenden Delphi-Quelltext
1:
FindWindow(nil,WindowTitle);					


ja sonst nix richtiges findet... macht ja nur so sinn...

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2077

MacOSX 10.5, Ubuntu, OpenSuse 11
C, Java, PHP
BeitragVerfasst: Mo 27.12.04 20:03 
Hab ich da jetzt was verpasst, oder muss man jedesmal wenn den Cheat benutzen will erst wieder TSearch bemühen und die Adresse finden? Denn diese ändert sich doch bei jedem neustart! :?

_________________
Nach dem Umstieg von Windows auf Mac leider kein Delphi mehr :(
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: Mo 27.12.04 20:09 
Also, sorry, aber ich raff' schon wieder was net...

In diesem Quellcode:

Zitat:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
const v1 = $90  
begin  
 WindowName  :=  FindWindow(nil,WindowTitle);  
          If  WindowName  =  0  then MessageDlg('...erst spiel starten...dann trainer starten =)',  mtwarning,[mbOK],0);  
    ThreadId  :=  GetWindowThreadProcessId(WindowName,@ProcessId);  
    HandleWindow  :=  OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);  
    GetMem(buf,1);  
    buf^  :=  Chr(v1);  
    FreeMem(buf);  
    closehandle(HandleWindow);  
end;


wird zwar abgefragt, ob das Game überhaupt läuft:

ausblenden Delphi-Quelltext
1:
2:
3:
const v1 = $90  
 WindowName  :=  FindWindow(nil,WindowTitle);  
          If  WindowName  =  0  then MessageDlg('...erst spiel starten...dann trainer starten =)',  mtwarning,[mbOK],0);


...aber wird dann der nachfolgende Code nicht trotzdem ausgeführt??? Müsste man da nicht eine if-then-else-Konstruktion verwenden, also dann so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
const v1 = $90  
begin  
WindowName  :=  FindWindow(nil,WindowTitle);  
If  WindowName  =  0  then MessageDlg('...erst spiel starten...dann trainer starten =)',  mtwarning,[mbOK],0else begin
    ThreadId  :=  GetWindowThreadProcessId(WindowName,@ProcessId);  
    HandleWindow  :=  OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);  
    GetMem(buf,1);  
    buf^  :=  Chr(v1);  
    FreeMem(buf);  
    closehandle(HandleWindow);  
end
end;


??????? Ich lerne gerne dazu.... :-)

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
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: Mo 27.12.04 20:22 
Also die Frage da oben bitte nicht vergessen, ich möcht nur mal kurz was zu Karlson sagn, also: @Karlson

Das hab ich eignlich au gedacht, habs aber mal mit der Zeit die bei MS Minesweeper durchläuft, ausprobiert, es scheint immer die 100579C zu sein.

Komisch oda net???

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2077

MacOSX 10.5, Ubuntu, OpenSuse 11
C, Java, PHP
BeitragVerfasst: Mo 27.12.04 21:03 
Nein, wenn man sich etwas mit dem Windowsspeichermanagment auskennt nicht :lol:

Bei Minesweeper mag die Adresse zur Zeit der aktiven Windowssession durch glück konstant bleiben. Bei einem richtigem Spiel, mit sicherheit schon nach dem laden einer neuen map nicht mehr.

ps.: Zu deiner Frage: Stimmt, da hat der Threadersteller einen Fehler gemacht.

_________________
Nach dem Umstieg von Windows auf Mac leider kein Delphi mehr :(
EUOCheffe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124



BeitragVerfasst: Di 28.12.04 00:57 
Den Code könnte man etwas kürzer schreiben.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure WriteValues;
var
  c : Cardinal;
begin  
  c:=FindWindow(nil,'Starcraft'); //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,Pointer($401F76),#144#144#144#144#144#144,6,nil);
  CloseHandle(c);  
end;


Die Adressen für dynamische Variablen ändern sich zwar immer wieder, aber deshalb modifiziert er ja den Code in diesem Tutorial. Der Programmcode greift über Pointer immer auf den richtigen Speicherbereich zu. Das ist ja auch gleich eine weitere Lösung zum "dna" Problem. Das Game legt die Variablen irgendwo im Speicher ab. Um diese selber wieder zu finden, muss es irgendwo Pointer auf diesen dynamischen Speicherbereich haben. Wenn diese Pointer dann statisch gespeichert sind, dann kann man über diese die Variablen finden. Einfach in TSearch im Range Mode nach der Adresse der gefundenen dma Variable suchen. Wenn das Game neu gestartet wird, dann ändert sich zwar die Adresse der Variable, der Pointer zeigt dann aber wider brav drauf (oder immer mit selbem Abstand davor).

Übrigens gibt's auf diesem Board auch einen Bereich für Tutorials.
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2077

MacOSX 10.5, Ubuntu, OpenSuse 11
C, Java, PHP
BeitragVerfasst: Di 28.12.04 02:26 
EUOCheffe hat folgendes geschrieben:

Die Adressen für dynamische Variablen ändern sich zwar immer wieder, aber deshalb modifiziert er ja den Code in diesem Tutorial. Der Programmcode greift über Pointer immer auf den richtigen Speicherbereich zu. Das ist ja auch gleich eine weitere Lösung zum "dna" Problem. Das Game legt die Variablen irgendwo im Speicher ab. Um diese selber wieder zu finden, muss es irgendwo Pointer auf diesen dynamischen Speicherbereich haben. Wenn diese Pointer dann statisch gespeichert sind, dann kann man über diese die Variablen finden. Einfach in TSearch im Range Mode nach der Adresse der gefundenen dma Variable suchen. Wenn das Game neu gestartet wird, dann ändert sich zwar die Adresse der Variable, der Pointer zeigt dann aber wider brav drauf (oder immer mit selbem Abstand davor).

Übrigens gibt's auf diesem Board auch einen Bereich für Tutorials.


Hört sich intressant an! Das muss ich mir aber mal genauer noch anschauen...
Btw. Das Tutorial ist doch in der Tutorial-Sparte :lol: Du meintest wohl die Faq's...

_________________
Nach dem Umstieg von Windows auf Mac leider kein Delphi mehr :(
EUOCheffe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124



BeitragVerfasst: Di 28.12.04 06:46 
War es? Dann muss ich irgendwie falsch geguckt haben...
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Di 28.12.04 15:32 
jo...also erstmal @ webspace:
Zitat:
n direktlink zum Programm wär besser...

also...war halt mein erstes tut überhaupt und wusste nich ob man sowas direkt verlinken darf oda sowas...
aber ich denke man konnte das tool auch so finden =)

Zitat:

Zitat:
delphi (ich habe delphi 7 benutzt)
warum sonst auch ins delphi-forum schreiben ???


es ging mir eher darum zu sagen dass ich version 7 benutz und nicht das programm delphi, villeicht funktioniert es ja bei älteren versionen nicht.

Zitat:

Das hab ich net so wirklich kapiert... :-)

Soll man hier die Caption des Spielefensters eintragen??

jo hab mich villeicht etwas komisch ausgedrückt...ich versuchs sofort etwas verständlicher zu schreiben.


dann mal @ karlson:
Zitat:
Hab ich da jetzt was verpasst, oder muss man jedesmal wenn den Cheat benutzen will erst wieder TSearch bemühen und die Adresse finden? Denn diese ändert sich doch bei jedem neustart! :?


also...villeicht sollte ich das im tut auch noch mal ein bischen besser erklären...
das hat halt mit den dma und sna zu tun...mit der methode vom autohack, umgehen wir diese dma und machen sogesehen daraus eine sma, damit wir immer darauf zugreifen können.

manche alte spiele benutzen immder die gleichen addressen.
aber trotzdem kann man hierbei die selbe methode verwenden wie bei den spielen mit dma.

Zitat:
ps.: Zu deiner Frage: Stimmt, da hat der Threadersteller einen Fehler gemacht.

was für einen fehler meintest du jex nochmal genau?
damit ich ihn verbessern kann =)

und zu guter letzt noch @EUOCheffe:
Zitat:

Den Code könnte man etwas kürzer schreiben.


also ich hab es ehrlichgesagt auch schon so probiert bzw ein wenig anders, aber dennoch hat er bei mir (nfsu2) immer einen fehler angezeigt und das spiel ist abgestürzt. deswegen hab ich erst einmal so aufgeschrieben, wie es bei mir funktioniert hat. aber ich werde es noch einmal genauso probieren wie du es vorgeschlagen hast und ggf verbessern. aber danke für den hinweis =)
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: Di 28.12.04 15:34 
Zitat:
jo...also erstmal @ webspace:
Zitat:
n direktlink zum Programm wär besser...

also...war halt mein erstes tut überhaupt und wusste nich ob man sowas direkt verlinken darf oda sowas...
aber ich denke man konnte das tool auch so finden =)


Natürlich!!! S'war ja net bös gemeint oda so... ich dacht nur s' waär vielleicht praktischer einfach drauf zu klickln anstatt zu suchen (Komfort für den Leser...) :-)

Nimms mir nich übel...

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
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: Di 28.12.04 15:35 
Zitat:
Zitat:

Zitat:
delphi (ich habe delphi 7 benutzt)
warum sonst auch ins delphi-forum schreiben ???


es ging mir eher darum zu sagen dass ich version 7 benutz und nicht das programm delphi, villeicht funktioniert es ja bei älteren versionen nicht.


OK.... sorry...
Hättest du "Delphiversion: 7" hätt ich ja nix gesagt....

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

Das hab ich net so wirklich kapiert...

Soll man hier die Caption des Spielefensters eintragen??

jo hab mich villeicht etwas komisch ausgedrückt...ich versuchs sofort etwas verständlicher zu schreiben.


Hatt sich ja dann beim Quellcode lesen geklärt... Von was sollte man sonst die ProcessID suchen....

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
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: Di 28.12.04 15:37 
Zitat:
Zitat:
ps.: Zu deiner Frage: Stimmt, da hat der Threadersteller einen Fehler gemacht.

was für einen fehler meintest du jex nochmal genau?
damit ich ihn verbessern kann =)


Er meinte den, den ich oben angesprochen hab, den mit der Abfrage, ob das Spiel läuft...

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2077

MacOSX 10.5, Ubuntu, OpenSuse 11
C, Java, PHP
BeitragVerfasst: Di 28.12.04 15:40 
Sag mal WebSpace, sind da jetzt wirklich 4 Posts für nötig gewesen? :lol:

@en1gma: Du hast ein Exit beim abfragen ob das Handle = 0 ist vergessen.

_________________
Nach dem Umstieg von Windows auf Mac leider kein Delphi mehr :(