[Cheatengine] Funktionsaufruf finden

01/10/2016 00:03 DeinMud#1
Hi,

Da Ich mich mit Cheatengine kaum auskenne hier meine Frage:

Ist es möglich, wenn Ich bspweise eine Anwendung gestartet habe und in dieser Anwendung einen Knopf drücke (als beispiel), dass dann in der cheatengine opcode Ansicht (also wo man die assembler anweisungen sieht) angezeigt wird WELCHER Code da jz aufgerufen wird ? Wenn ja wie macht man das?
01/10/2016 00:49 BladeTiger12#2
Wenn du direkt am Anfang der Funktion bist, schau mal in den Stack.(Unten rechts im Memory View während des Breakpoints)
Da steht direkt an der 1. Stelle(ESP) die Rücksprungadresse.
01/10/2016 14:13 hazejp#3
Jo, du kannst den Code, der als Reaktion auf deinen Mausklick ausgeführt wird mithilfe der Break-and-Trace-Funktion (Kontextmenü in Memory View) nachverfolgen.
01/10/2016 18:26 DeinMud#4
Quote:
Originally Posted by hazejp View Post
Jo, du kannst den Code, der als Reaktion auf deinen Mausklick ausgeführt wird mithilfe der Break-and-Trace-Funktion (Kontextmenü in Memory View) nachverfolgen.
Das Problem ist da muss man ja einen Breakpoint an eine Codezeile setzen und Ich weiß ja nicht an welcher Adresse die Funktion liegt (das möchte Ich herausfinden)

Ich hab jetzt die Funktion "Ultimap" gefunden (die macht glaub Ich was ich will), da ist das nächste Problem dass der ca 40k Sachen findet und nicht erkennbar ist was davon der Knopfdruck ist. Außerdem stürtzt mein System nach 10-15 Minuten mit nem Bluescreen ab (CRITICAL STRUCTURE CORRUPTION) wenn Ich Ultimap benutze.
01/17/2016 15:34 mac'que#5
Quote:
Originally Posted by DeinMud View Post
Das Problem ist da muss man ja einen Breakpoint an eine Codezeile setzen und Ich weiß ja nicht an welcher Adresse die Funktion liegt (das möchte Ich herausfinden)

Ich hab jetzt die Funktion "Ultimap" gefunden (die macht glaub Ich was ich will), da ist das nächste Problem dass der ca 40k Sachen findet und nicht erkennbar ist was davon der Knopfdruck ist. Außerdem stürtzt mein System nach 10-15 Minuten mit nem Bluescreen ab (CRITICAL STRUCTURE CORRUPTION) wenn Ich Ultimap benutze.
Ultimap ist zwar eine Option und besitzt gute Filter Möglichkeiten, ist aber wie du bereits gemerkt hast sehr unstabil.

Du solltest zunächst erstmal Anhaltspunkte zu deiner Funktion suchen (Nach Strings oder Werten die deiner Meinung nach in der gesuchten Funktion verändert werden bzw. gelesen werden). Von da aus musste dann BP's setzen. Dann entweder forward oder backtracen je nachdem ob die gesuchten Werte tatsächlich in der Funktion verändert werden oder erst kurz davor.
01/17/2016 19:21 DeinMud#6
Habs jz erstmal gelassen, hatte eine Funktion gefunden die aufgerufen wird wenn man auf den Knopf klickt
(Geht um den League of Legends Clienten, der Login Knopf (wollte nen autologin machen)) aber ist halt immer wieder system abgestürtzt hab ich keine lust zu ^^ trotzdem danke
01/19/2016 19:21 _asm#7
Quote:
Originally Posted by DeinMud View Post
Habs jz erstmal gelassen, hatte eine Funktion gefunden die aufgerufen wird wenn man auf den Knopf klickt
(Geht um den League of Legends Clienten, der Login Knopf (wollte nen autologin machen)) aber ist halt immer wieder system abgestürtzt hab ich keine lust zu ^^ trotzdem danke
Mach's dir nicht so kompliziert!
Hook einfach die Send Funktion im Client und schau nach welches Packet mit welchen Inhalt (eventuell: loginid, pwd) an dem Server gesendet wird.
Du kannst auch natürlich auf einen externen hook verzichten und es in einem Real-Time Debugger wie CE oder OllyDbg machen...
01/19/2016 23:20 DeinMud#8
Das hab ich schon versucht, das ist alles verschlüsselt.
Ist aber eh bekannt das Protokoll (rtmp fürn gameserver und xmpp für chatserver) bringt mir aber auch nichts, weil ich möchte ja dass die aktuelle Instanz des Programmes (Also die Anwendung die offen ist) sich automatisch einloggt und mich nicht extern vom Clienten einloggen. Halt so ein Autologin tool fürn Clienten
01/20/2016 09:05 _asm#9
Ja? Das ist das genau das was ich geschrieben habe. Du erstellst dir eine Dynamic Link Library mit einem Funktionspointer zu dieser Funktion, wo das Packet an dem Server gesendet wird und callst sie dann immer wenn du disconnectest bist bzw. noch nicht eingeloggt bist -> tadaaaa, ein AutoLogin.
01/20/2016 20:53 DeinMud#10
Ah so meinst du das. Ja klar das hat ich ja vor, aber dafür brauch Ich ja die Adresse der Funktion die Ich mit Cheatengine bzw. Ultimap ermitteln wollte und die hab Ich nicht
01/21/2016 09:29 _asm#11
Dann versuchst du eben die Funktion fürs Anmelden "back zu tracen" (Reverse Engineering). Du machst ein Breakpoint auf der Send Funktion und schaust im Stack von wo das Packet aufgerufen wird, da befindet sich dann die Adresse zur Funktion vom Anmelde-Befehl.
Dann noch ein Funktionspointer schreiben, ich tippe mal auf __thiscall aber das solltest du dann selbst rausfinden können ;)
Edit: Wahrscheinlich brauchst du noch den Klasseninstanz-Pointer von der Member Funktion wo sich das Packet befindet (nur wenn's ne __thiscall convention ist natürlich)