Home of Gamehacking - Archiv

Normale Version: Unendlich Items
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Abend,
brauche dringend Hilfe bei meinem Problem und bin deshalb hier gelandet. Die Community scheint mir sehr freundlich zu sein Smiling
Nun zum Thema:
Es handelt sich um ein altes 2D Flugzeug-Shooter Game (Java), bei dem man unteranderem Items, wie z.B. Raketen, Leben etc. (wie bei Mariokart) einsammeln kann. Die Items sind nur einmalig zu gebrauchen, d.h. man kann sie nur einmal abfeuern. Nun will ich zu jederzeit ein beliebiges Item zur Verfügung stehen haben. Dazu muss man sagen, dass man nur ein Item im Cache haben kann. Die theoretisch Vorgehensweise, sich ein Item "zu erstellen", wurde mir schon erklärt:
In der Localplayer class, in der sich auch die Koordinaten, HP etc. befinden, sieht man sich die Bytes an, die sich beim Aufsammel eines Item verändern. Das habe ich getan und eine Variable mit der Größe von 4 Bytes gefunden. In diese Variable wird beim Aufnehmen ein Pointer reingeschrieben, der auf das Item zeigt, dass bei jedem Aufnehmen allokiert wird. Beim Benutzen wird das Item wieder gelöscht und der Variable der Wert 0 zugewiesen. Alles, was ich nun tun muss ist zu schauen, welche Funktion den Pointer in die Variable schreibt. Das habe ich mit CE getan und konnte 2 Funktionen finden. Die Erste, die das Item allokiert und die Zweite, die das Item wieder Löscht.
Bis hier hin ist mir alles klar. Mein Problem liegt "nur" bei der Durchfürhung :( Bin nämlich noch relativ neu in diesem Gebiet und verstehe manche Sachen noch nicht ganz.
Mit CE habe ich die Stelle gefunden, wo die Variable beschrieben wird. Diese Stelle befindet sich jedoch in einer Funktion. Nun muss ich herausfinden, wo diese Funktion beginnt und wo sie aufgerufen wird. Das ist erstmal mein Hauptproblem. Ich weiß einfach nicht, wie ich vorgehen muss um den Anfang dieser Funktion zu finden.
Könnt ihr mir weiterhelfen?

Viele Grüße
Crocotronic
Hey,
um die Funktion zu analysieren würde ich dir OllyDBG empfehlen. Der Dissassembler von Olly ist um einiges übersichtlicher als der von Cheat Engine.

Auf jeden Fall fangen Funktionen meistens mit Operationen an, welche die Register beeinflussen (PUSH-Befehle z.B). Das Ende einer Funktion ist ziemlich leicht daran zu erkennen, das durch einen RET Befehl wieder zur Hauptfunktion zurückgesprungen wird. Auch werden unmittelbar vor dem RET meistens die Register wieder hergestellt (POP-Befehle). Alles in allem ist die Funktion an sich relativ leicht einzugrenzen.

Wenn du dann den Anfang der Funktion gefunden hast, dann einfach nen Breakpoint drauf (Auf den ersten Befehl) und mit dem Stackfenster von Olly backtracen.
Viiiielen Dank!! Habe es geschaft Smiling
Danke, danke, danke