League of Legends detouring

06/08/2011 23:33 log0las#1
huhu,

ich schreibe gerade ein Programm (C#) für LoL, habe allerdings Probleme beim finden von einer Adresse einer Funktion.

Bis jetzt injected mein Programm eine in VC++ geschriebene dll, in der soll später eine Funktion von LoL mittels detours 'gehookt' werden.

Da das Problem nur einen minimalen Anteil meiner Anwendung betrifft, meines Erachtens jedoch einen enormen Leseaufwand bzw. Wissen/Know-How in dem Gebiet Reverse Engineering erfordert,
möchte ich mir die Arbeit durch dieses Forum sparen..:)

Mal etwas konkreter:
Wenn man in LoL in einer Spielelobby ist, wird bei Eintritt von einem Spieler in der Chatbox "$name hat den Chat betreten" (so oder so ähnlich) ausgegeben. Dazu muss offensichtlich irgendwo eine Funktion aufgerufen werden.

Da meine OllyDBG-skills den eines BWL-ers ähneln, suche ich Rat bei euch :)

Meine Frage also: Wie finde ich die Adresse der Funktion, welche die oben genannte Chatnachricht in den Chat printelt?
06/09/2011 02:21 RunzelEier#2
öffne Lol im debugger, am besten olly
rechtsklick ins cpu fenster und search for all referenced text strings
und dann nach "hat den Chat betreten" suchen.
das sollte dann schon die funktion sein.

glhf
06/10/2011 21:09 log0las#3
Danke für die Antwort,

führte leider nicht zum Ziel.

Habe das schon vorher versucht, wusste aber nicht, dass man im CPU-Fenster danach suchen muss.
06/11/2011 01:47 MrSm!th#4
Quote:
Originally Posted by RunzelEier View Post
öffne Lol im debugger, am besten olly
rechtsklick ins cpu fenster und search for all referenced text strings
und dann nach "hat den Chat betreten" suchen.
das sollte dann schon die funktion sein.

glhf
Nein, da es höchstwahrscheinlich nicht absolut sondern in Pointern gespeichert wird, wo sich dieser Text befindet.

Du kannst mehrere Dinge probieren.

Eine Idee wäre send/recv zu hooken und zu überprüfen, wann ein Packet ankommt, dass das Eintreten des Spielers signalisiert.
Du könntest auch die Schleife des Spiels suchen, die die Tastatur abfragt, denn dort wird es sicherlich auch einen Fall für Enter geben, der dann den Text im Chatfenster anzeigt. Eventuell werden Systemnachrichten über die selbe Funktion angezeigt.

Eventuell hast du auch Glück und LoL nutzt DirectX Fonts anstatt einer eigenen Klasse, dann kannst du durch Hooken der Methode DrawText an den Text und damit die Funktion kommen.

Eine Idee wäre es auch, den Text mit Cheat Engine zu suchen und dann alle Stellen anzeigen zu lassen, die davon lesen; das wird dann vermutlich die Anzeigefunktion sein, die dann ja auch irgendwo von der Funktion aufgerufen wird, die den Namen empfängt und den String ausgibt.

Mit ein bisschen Kreativität geht da vieles :P