Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dynamische Speicheradressen (https://www.delphipraxis.net/85504-dynamische-speicheradressen.html)

Dash 31. Jan 2007 18:05


Dynamische Speicheradressen
 
Hallo,

ich möchte bei einem Spiel von den CPU Spielern z.b. die Lebensenergie senken. Mein Problem ist nun, dass sich die Adressen der CPU Spieler immer ändern.

Zuerst hatte ich z.B. mit TSearch die Adresse
148E541C gefunden, als ich das Spiel dann neu gestartet hatte, war die Lebensenergie des gleichen CPU Spielers bei der Adresse 1590541C.
Nun scheint ja der hintere Teil der Adresse immer gleich zu sein, nur wie kann ich ohne immer wieder neu nach der Adresse zu suchen auf diese zugreifen?

Gruß
Dash

3_of_8 31. Jan 2007 18:10

Re: Dynamische Speicheradressen
 
Normalerweise bleiben die Adressen da relativ gleich, aber wenn sie es nicht tun, musst du jedesmal neu suchen.

Dash 31. Jan 2007 18:18

Re: Dynamische Speicheradressen
 
Hm das ist ja blöde, aber wie arbeiten denn Trainer? Soweit ich weiß gibt es für dieses Spiel (Gothic2) ebenfalls welche. Bei Gothic2 ändert sich so ziemlich jede Adresse.

3_of_8 31. Jan 2007 18:19

Re: Dynamische Speicheradressen
 
Gute Frage. Vielleicht geht das ja doch irgendwie, aber frag mich nicht, wie. Könnte sein, dass bei Gothic z.B. die Objekte verschiedene IDs haben, nach denen der Trainer sucht.

Dash 31. Jan 2007 18:22

Re: Dynamische Speicheradressen
 
Ok danke, da werde ich wohl Google ein wenig mit Suchbegriffen vergewaltigen müssen :P

Christian Seehase 31. Jan 2007 19:21

Re: Dynamische Speicheradressen
 
Moin Denis,

ein paar Suchbegriffe kann ich Dir zu dem Thema mal geben:

VirtualQueryEx, VirtualProtectEx, ReadProcessMemory, WriteProcessMemory.

Wie TSearch das macht weiss ich nicht, aber eventuell kannst Du den Speicherbereich eingrenzen, wenn Du Dir die vom Programm belegten Speicherbereiche mal ansiehst.
Beispielsweise hat jedes Programm einen Speicherbereich für das Environment (die Umgebungsvariablen, wie TEMP, PATH usw.), dass auch immer die gleiche Adresse hat.
Es könnte also gut sein, das die Gewünschten Adressen auch immer im gleichen Block liegen (von der Reihenfolge der Blöcke her gesehen, nicht unbedingt von dessen Startadresse).

Robert Marquardt 31. Jan 2007 19:24

Re: Dynamische Speicheradressen
 
Vermutlich wehrt sich das Game gegen solche Cheat-Angriffe indem es die Datenstrukturen im Speicher herumschiebt.

jmd anders 31. Jan 2007 19:43

Re: Dynamische Speicheradressen
 
guck mal ob es da nicht einen pointer auf die adresse gibt, der sich nicht immer verändert.
also such erst die Life adresse dann nimmst du den wert der pointer adresse und suchst die immer wieder.
welches spiel soll es denn sein?

Dash 31. Jan 2007 19:46

Re: Dynamische Speicheradressen
 
Also ich habe da mal jemanden gefragt der sich wirklich mit Gothic auskennt.
Seine Antwort wie ich an die Adressen komme war folgende:
Zitat:

Als allererstes brauchst du natürlich eine Grundlage,
d.h. du musst ersteinmal die Adresse zu einem NPC haben.
Und diese Adresse suchts du dann im Speicher,
da aber Gothic diesen Adresse selbst einsetzt,
wirst du sehr viele falsche Treffer laden,
das heißt aussieben, aussieben und nochmal aussieben.



Ich empfehle dir für die Suche im Speicher keine eigenen Programme
zu verwenden (ausser vll. in Sonderfällen), da gibt es bereits schon
tolle Alleskönner.

Ich empfehle dir da TSearch,
mit integriertem Debugger und einer äusserst schnellen Suche (auch bei Strings).
  1. Such dir einen NPC, übernehme ihn (mit "o", im Marvin-Mode) und suche nach seinen HP (z.B. 40)
  2. HP senken und weitersuchen
  3. Wenn du immernoch mehrere Adressen hast, dann Schritt 2 wiederholen
  4. Wenn du nur noch einen Treffer hast, dann von der Adresse nur 0x184 abziehen

Und schon hast du die Adresse des jeweiligen NPCs. :)
Eines kapier ich aber jetzt immer noch nicht: Wie zieh ich z.B. 0x184 von 148E541C ab?

Zitat:

guck mal ob es da nicht einen pointer auf die adresse gibt, der sich nicht immer verändert.
also such erst die Life adresse dann nimmst du den wert der pointer adresse und suchst die immer wieder.
welches spiel soll es denn sein?
Bei dem Spiel handelt es sich um Gothic 2. Wie bekomme denn raus ob es einen Pointer gibt?

Gruß
Dash

jmd anders 31. Jan 2007 19:48

Re: Dynamische Speicheradressen
 
hex adressen im windows rechner, außerdem kannst ud auch mit delphi hex werte verabeiten mit '$' vor der zahl, also $ABC wäre ein hex wert.


pointer:

wenn zum beispiel $1234 die adresse vom life ist, aber die sich immer ändert, dann suchst du in der jetzigen session einfach nach $1234, guckst wieviele adressen $1234 als wert haben(du kannst die auch bei tsearch in so eine liste hinzufügen, dann startest du das game neu und suchst wieder nach der life adresse, die ist dann zb $2345 und dann suchst du nun nach $2345.

wenn du jetzt eine adresse mit dem wert $2345 findest die acuh zuvor $1234 gehalten hast, dann kann es sein, dass es sich um den pointer auf die life adresse handelt, weiteres probieren sichert dein erkenntnis.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz