League of Legends ingame Chat

  • naja, verbunden ist er ja schon. er muss ja kein zweites mal rein. er muss nur über die bestehende verbindung das richtige senden.

    naja, ich hab jetzt nur gelesen, was hier geschrieben wurde. aber rein theoretisch kann er doch die pakete, die er mit dem lol client sendet, analysieren und nachbauen.

    Dann wäre wird aber wieder beim Ursprünglichen Problem, dass du ein Programm zwischen Client und Server bekommen musst.
    Das ist auch bestimmt möglich. Hab mich nur auch noch nie mit sowas befasst.

  • was zur hölle wilst du mit dem stick machen???
    wireshark hat einen windoof-Treiber um die pakete aufzuzeichenen und du brauchst auch keine Pakete in mit dem Stick injecten
    dafür nimmt man nen Proxy wie der nuConnector für den AgBot bei SRO

    genau sowas die den nuConnector würde man für lol brachen um nachrichten in den chat zu schreiben.

  • Der GameClient ist nicht in Flash/Air-ActionscriptKaka geschrieben. Das ist C++ (Microsoft Visual C++ 2005).


    Die Funktion, bzw der Teil der darunter folgt, haben mit dem Senden einer Nachricht zu tun:

    Code
    1. CPU Disasm
    2. Address Hex dump Command Comments
    3. 0081C1F0 /$ 55 PUSH EBP ; League_of_Legends.0081C1F0(guessed Arg1)
    4. CPU Disasm
    5. Address Hex dump Command Comments
    6. 0081C823 |. 50 PUSH EAX ; /Message
    7. 0081C824 |. 8BF3 MOV ESI,EBX ; |
    8. 0081C826 |. E8 C5C51200 CALL ChatThing ; \League_of_Legends.ChatThing


    Der CALL von oben:

    Code
    1. CPU Disasm
    2. Address Hex dump Command Comments
    3. 00948DF0 /$ 64:A1 0000000 MOV EAX,DWORD PTR FS:[0] ; League_of_Legends.ChatThing(guessed Arg1:string)
    4. [...]


    Klar, da sollte/muss man noch ein bissel nachforschen, aber ich würd einfach ma stupide versuchen die 0x00948DF0 aufzurufen. Vll reicht das schon.


    Gruß
    florian0

  • Wie bist du an die Adressen gekommen? :)


    (OllyDBG -> Attach)
    Ich versuchs mal grob zu erklären: Ich hab die Chat-Befehle getraced, weil diese unmittelbar nach der Eingabe bearbeitet werden MÜSSTEN^^.
    Außer /all habe ich erstmal keine gefunden, woran aber die Übersetzung schuld ist (Sprachenspezifische Strings werden irgendwie immer wieder neu geladen ... ka was das soll -> 008AC4B0 : LoadTranslation(EDI enthält die Adresse des zu-übersetzenden Textes)


    Und dann eben en Stück zurück-getraced. Inzwischen bin ich ein Stück weiter:
    Von hier gehen die Chat-Sachen mit der Tastatur aus (Enter = Chat auf / Nachricht absenden). Ich vermute das ist einfach nur der Handler für die EnterTaste ...
    Wenn man Send to Team / To All anklickt (mit der Maus und so) nimmt das Ganze einen anderen Weg.


    Ich weiß nicht so genau was diese Adresse macht (ChatThing). Wenn ich diese Memory adresse auslese bekomme ich immer den Letzten Eintrag im Chat ?


    War das jetzt ne Frage oder ne Feststellung? Wenn ich genau wüsste das die Funktion hinter der Adresse macht, wär ich glücklich^^. Sie hat irgentwas mit dem Chat zu tun und ihr einziger Paramter ist die Nachricht die im Chat gesendet wurde. Es liegt nahe, dass sie entweder die Nachricht im Client anzeigt oder die Nachricht an den Server sendet ... oder beides?


    Gruß
    florian0

  • Was du da über "Find out what accesses/writes to this Address" gefunden hast ist ein Teil der MSVCR80-Libary.
    Nur über Memory-Scannen kommt man hier nicht weiter (leider).


    Ich bin mir inzwischen sicher, dass die besagte Funktion ChatThing die Nachricht versendet (wenn man diese wegNOPt, werden keine Nachrichten versendet (zumindest tauchen im Client keine auf, hab zur Zeit keinen mit dem ich das testen kann) ). Der übergebene Parameter ist nicht die Nachricht, ist aber anscheinden auch nicht sonderlich relevant. In ChatThing wird geprüft ob die Nachricht an /all geht und ob der CrossTeam-Chat aktiviert ist, oder nicht (erkennbar an den LoadTranslation-Strings).
    Was danach kommt analyisere ich gerade. Ziemlich tief drinne habe ich eine Critical Section gefunden, was darauf hindeutet, dass hier Operationen ablaufen die auf KEINEN Fall von mehreren Threads zugleich ausgeführt werden dürfen. Ein möglicher Anwendungsfall wäre z.B. ein Stream für den SendeBuffer ...


    //Edit-Start: Ich glaub ich habs. Ich versuchs mal zu visualisieren:




    CALL SendMessage MUSS es sein. String in den Stack pushen & Adresse callen.
    // Edit ende


    Ich eigene mir gerade etwas Wissen an, um eine DLL-Injection durchzuführen^^. Mein C++ ist leider in etwa so gut wie mein Python, also schlecht. Ich denk ma morgen im Laufe des Tages sollte ich was raushaben.


    Gruß
    florian0


    PS: Scheise hat der LoL Client viele Pointer. Vorallem so tiefe ...


  • [...], hab zur Zeit keinen mit dem ich das testen kann) ).


    Ich weiß nicht wie stark dein PC ist, aber mit ner virtuellen maschine und nem zweit account könntest dasn am eigenen PC testen (was vielleicht sogar proktischer ist, weil du nich über Skype schwammige Antworten bekommst, sondern selber siehst as passiert.
    .. viel glück noch bei der ganzen Aktion ;)

  • So:


    Die Funktion war die richtige, Pointer berrechnen klappt dank dongdong auch.



    Nach jedem Client-Patch könnte sich die Adresse ändern. Daran kann/sollte man noch arbeiten.



    Wie regelt man das ganze jetzt in C# ?
    Ne .NET Dll zu injizieren ist ja nicht möglich. Kann man irgentwie zwischen der DLL und dem C# Prog. kommunizieren?



    Gruß
    florian0