Wie erweitere ich ein bestehendes Programm?



  • Hallo,

    ich kenne mich gut mit C# und Java aus, hauptsächlich habe ich bis jetzt nur mit Unity 3D programmiert, aber wie ich einsehen musste ist es unrealistisch ein ganzes Spiel alleine zu programmieren, also möchte ich mich auf kleinere Tools, Werkzeuge und Mods beschränken und vorallem mit C++(und Lua).

    Ich habe mich dazu entschieden für das Computer-Spiel "League of Legends"(Kurz: LoL), da dort sogenannte "Smurfs"(Zweitaccounts) erlaubt sind, eine Anwendung zu entwickeln, die sich die manuell eingetragenen Account Daten merkt und diese können dann via Dropdown anwählen lassen, dies sollte kein Problem darstellen. Allerdings möchte ich, dass diese Account Daten sowohl Passwort als auch Nutzername automatisch in die dafür vorgesehen Felder eingetragen werden.

    Kurze Information:
    League of Legends hat 4 "Stadien":
    1. Wenn man im Spiel ist("League of Legends(TM) Client")
    2. Der Updater/Patcher("LoL Patcher")
    3. Der Einloggbildschirm ("PVP.net Client")
    4. Wenn man eingeloggt ist, aber nicht im Spiel("PVP.net Client")

    Wie man Sieht kann anhand des Programmtitels nur zwischen Einloggbildschirm und 4.(Ich nenn es nun einfach Client) nicht unterschieden werden.

    Mein Ansatz dazu:
    Soweit ich weiß werden Variablen in Pointern gespeichert, also müsste ich doch nur die Pointer von der Benutzernamen-Variable und der Passwort-Variable herausbekommen und in mein Programm einprogrammieren, dass diese dann jeweils mit den gespeicherten Daten eingetragen werden. Mein Problem dabei ist, dass ich nicht weiß, wie man diese Pointer herausbekommt.

    Mein zweites Problem:
    Außerdem würde ich gerne, dass sich das Programm selber startet, wenn League of Legends im Einloggbildschirm ist und sich sobald man erfolgreich eingeloggt ist selber schließt.

    Meine Ansätze dazu:
    1. Ich lasse das Programm im Autostart installieren und lasse es dann im System-Tray(Ich hoffe dies ist der richtige Name) laufen, wobei ich nicht genau sicher bin, wie dies geht, aber ich denke dazu sollte es genügend Ressourcen geben. Anschließend wenn eine Instanz von LoL gestartet wird(Ich dachte an eine while-Schleife mit https://msdn.microsoft.com/de-de/library/aa326945(v=vs.71).aspx), öffnet sich das eigentliche Programm(Hinweise dazu wären Toll ^^). Nun müsste noch getestet werden, ob es sich um den Einloggbildschirm oder um den Client handelt, wobei ich leider nicht weiß wie.

    2. Diesen würde ich bevorzugen auch wenn er wahrscheinlich sehr viel schwerer ist(Unmöglich - Nein das gibt es nicht 🙂 ), aber da ich mich nun mit Modden beschäftigen möchte für mich sinnvoller. Ich dachte daran eine Anwendung in die Dateien von LoL zu "injecten", die mein Programm automatisch startet sobald LoL(der Patcher) gestartet wird, dann muss mein Programm nur noch warten(zunächst wieder System Tray), bis sich ein Prozess mit dem Titel Pvp.net Client öffnet, schließlich soll mein Programm noch nicht im Patcher sichtbar seien, dann muss geprüft werden wenn der Nutzer sich eingeloggt hat, also das selbe Problemm wie oben auch(Einloggbildschirm oder Client) und dann könnte es sich komplett schließen. Es ist nämlich nicht möglich von dem Client aus in den Einloggbildschirm zurückzuwechseln, sondern LoL muss neugestartet werden.

    Ich habe mein bestes versucht mein(e) Problem(e) möglichst anschaulich darzustellen und hoffe jemand kann mir weiterhelfen 🙂 .

    Viele Grüße

    PowerOfCreation



  • Wenn du Eingaben automatisieren willst, ist C++ nicht das richtige. AutoIt eignet sich dafuer gut.

    Mach doch lieber was eigenes, statt nur Workarounds gegen limitierungen bei anderen Programmen zu entwickeln. Bei was eigenem kann man naemlich etwas systematischer und sauberer vorgehen, als wenn man nur vorhandene apis aufruft.



  • Entschuldige, aber haben sie sich meinen Beitrag überhaupt durchgelesen? Ich möchte Modden und mir dafür C++ und Lua aneignen, weiterhin habe ich geschrieben was meine Probleme sind und diese haben nichts mit einer Automatisierung zu tun. Der Nutzer wählt manuell seine Accounts aus und die Daten sollen über die RAM-Adressen der Passwort- und Benutzernamenvariable eingetragen werden. Die Frage ist, wie man diese zwei Adressen herausbekommt, wie man diesen den Wert zuweist und wie man das Programm öffnet wenn der Nutzer sich im Einloggbildschirm befindet.

    Edit: Weiterhin habe ich auch nicht von einer API geredet, die gibt es nämlich nicht zu mindestens nicht für den Client(Web-API um Statistiken abzurufen).



  • Hier zufällige Informationshappen:

    Nennenswerte tools:
    - ein disassembler (zB IDA, ollydbg)
    - spy++ (hier nicht ganz so nützlich, wie bei nativer windows software)
    - cheat engine

    Die verwenden immernoch ActionScript3 und anderen Adobe Kram für den Client.
    Deren RADS Client Struktur ist eine Katastrophe.

    Ich persönlich habe mich entschlossen nichts mehr "für" LoL zu entwickeln, da ich mich von Riot in den Arsch getreten fühle. Ich war am ACE Projekt (LoL unter Linux + Tools) damals beteiligt und das ist leider zu Grunde gegangen. Den ACE Gründer haben die damals eingestellt und sofort wieder entlassen aus lächerlichen Gründen.

    EDIT: Wär ich hier nicht im Forum, würde ich mich über Riot ganz anders ausdrücken...





  • Ich habe jetzt schon mehrfach probiert die Pointer herauszufinden, doch bin immer gescheitert, kann es sein das dies irgendwie geschützt wird oder sich die Pointer ständig ändern?

    Ich suche zb. nach String und gebe den Benutzernamen ein und habe gut 20 Treffer, wenn ich nun den Benutzernamen ändere ändert sich MANCHMAl eine Adresse der Wert mit, doch nach einer Weile ändert sich dieser nicht mehr, als hätte der Pointer sich geändert. Manchmal funktioniert "Find what accesses this adress", aber lediglich nur einige Sekunden manchmal nur wenn man auf Einloggen drückt, dann auch wenn man das Passwort ändert und dann wieder gar nicht. ich schließe daraus, dass Passwort und Benutzername zusammen gehören. Meine Befürchtung ist, dass beide zusammen mit einem Algorithmus verschlüsselt werden und es ohne offizielle API nicht geht. Die Alternative wäre dann natürlich die Maus per Code auf die Eingabefelder zu bewegen etc., doch dies war eigentlich nicht Sinn der Sache ^^.

    Wenn mir da jemand helfen könnte wäre echt super 🙂 .

    Danke trotzdem für die Hinweise(achja was sagt mir das wenn actionscript verwende wird - ist das nicht für Webseiten (entschuldige meine Unwissenheit) kann ich dies irgendwie nutzen?)

    Bin wie gesagt ganz neu in Sachen Modding(ohne API) und habe deswegen hier mal gefragt im Internet gibt es nur Anleitungen zu Spielen mit API



  • Warum zum Teufel kommen viele Leute auf die Idee, Dinge hacken zu wollen ohne eine Ahnung von C++ oder einem Betriebssystem? 😞

    Soweit ich weiß werden Variablen in Pointern gespeichert,

    Das stimmt nicht. Variablen werden im RAM oder ROM gespeichert und nicht in Pointern.

    @PowerOfCreation:
    Bitte schau dir mal Autohotkey an.

    www.autohotkey.com/



  • Ich habe mich versprochen, ich weiß das Variablen im RAM gespeichert sind und das Pointer sozusagen Variablen sind die die Adressen im RAM einer bestimmten Variable speichern. Keine Ahnung von C++ oder dem Betriebssystem würde ich so nicht sagen wie bereits erwähnt habe ich sehr viel Erfahrung mit C# und Java(Ich habe 4 jahre lang mit Unity programmiert) und auch mit C++ habe ich bereits Erfahrung gesammelt(Praktikum an einer Hochschule zum Thema C++ und OpenGL), auch habe ich bereits mit der Unreal Engine 4 programmiert. Du beziehst dich wahrscheinlich mit hacken mehr auf das illegale, das cracken, aber wenn ich das wöllte würde ich genug Tutorials finden, ich suche ja etwas sehr spezielles, da ich gerne Mods für Spiele programmieren würde, die vielleicht eigentlich gar nicht gemoddet werden sollten.



  • Es ist ziemlich egal ob man es modden, hacken, cracken oder sonstwie nennt. Die Vorgehensweise ist die gleiche, es ist höchstens das Ziel das sich unterscheidet. Und bei der Vorgehensweise ist grundsätzlich ratsam möglichst viel über die Software an der man arbeitet herauszufinden.

    Der LoL Launcher ist z.B. eine Adobe Air Anwendung, wie 5cript schon angedeutet hat. Ich kenn mich damit nicht genau aus, aber kurzes googeln hat ergeben, dass man kann die Anwendung einfach entpacken kann und dort die HTML und Flash files findet. Selbst wenn es einen Sicherheitsmechanismus gibt, der das Verändern der Files verhindert, hast du dort einen super Ansatzpunkt um herauszufinden was dort passiert. Falls es den Mechanismus nicht gibt, kannst du dich dort mit Erweiterungen austoben wie du willst.



  • Ich habe eine ganze Weile rumgegoogelt und anschließend die Dateien von LoL durchforstet und schließlich auch fündig geworden. Unter League of Legends\RADS\projects\lol_air_client\releases\0.0.1.161\deploy\lib befinden sich mehrere .dat Dateien, die ich per heruntergeladenem Programm(https://www.free-decompiler.com/flash/download/) öffnen konnte. In der ClientLibLogin.Dat bin ich auf folgende Funktion gestoßen:

    public function InitiateLoginEvent(param1:String, param2:String)
          {
             super(INITIATE_LOGIN,false,true);
             this._username = param1;
             this._password = param2;
          }
    

    Alles was ich nun möchte ist diese eine Funktion aufzurufen und ihr die entsprechenden Parameter zu übergeben, wenn dies nicht geht würde ich gerne herausfinden von wo diese Funkion aufgerufen wird(konnte leider nichts finden :/) und nur die Variablen ändern und der Nutzer muss dann selber noch auf Einloggen drücken. Ich bin ja jetzt schon ziemlich nah dran, wenn mir also dies noch jemand sagen könnte wäre ich ihm sehr dankbar 🙂 !

    Danke für die bereits erhaltene Hilfe!

    Edit: Wie man eine Funktion aufruft wenn sie sich in der selben Anwendung befindet ist mir natürlich klar die Frage ist wie ich mit meiner externen C++ Anwendung auf die Funktion des LoL Clients Zugriff bekomme.

    Edit2: Habe soeben die ClientWindow.dat gefunden(League of Legends\RADS\projects\lol_air_client\releases\0.0.1.161\deploy\mod\win) und da gibt es die Funktion

    private function onDataLoadOperationsComplete() : void
          {
             this.mainBox.removeAllChildren();
             var _loc1_:IMainProvider = MainProviderProxy.instance;
             _loc1_.showMainView(this.mainBox,this.handleMainViewReady);
             setMainReady();
             this.loginModule.hide();
             UserFlow.track("session","successful_login");
          }
    

    Ich würde gerne den Code editieren, so dass nach dieser Funktion eine .Txt datei erstellt wird oder bestenfalls direkt eine Nachricht an mein Programm gesendet, wird damit es weiß, dass es sich jetzt schließen kann.

    Ich hoffe jemand kann mir helfen und ich habe nicht umsonst die LoL Dateien durchforstet ^^.



  • Keine Ahnung, ob das wichtig ist, aber sind die beiden Funktionen nicht in Java?



  • PowerOfCreation schrieb:

    Alles was ich nun möchte ist diese eine Funktion aufzurufen und ihr die entsprechenden Parameter zu übergeben, wenn dies nicht geht würde ich gerne herausfinden von wo diese Funkion aufgerufen wird(konnte leider nichts finden :/) und nur die Variablen ändern und der Nutzer muss dann selber noch auf Einloggen drücken. Ich bin ja jetzt schon ziemlich nah dran, wenn mir also dies noch jemand sagen könnte wäre ich ihm sehr dankbar 🙂 !

    Nah dran ist gut, das ist noch der einfachere Teil. Das ist eine Memberfunktion, weißt du denn schon wie du an das entsprechende Objekt kommst?
    Erstmal solltest du rausfinden ob die Dateien kompiliert oder interpretiert werden, je nach dem ändert sich der Angriffspunkt.
    Wenn du das weißt, braucht du nur noch die Addresse der Funktion, dann kannst du sie aufrufen.

    Versuch doch die Dateien zu modifizieren und dann zu rekompilieren? Dann kannst du direkt mit einer externen Anwedung kommunizieren.

    Und lass dir nochmal gesagt sein, das ist den Aufwand nicht wert. Machbar ist so einiges, aber da du dich mit dem Thema so gar nicht auskennst würde ich sagen dass das etwas zu hoch für dich ist. Fang doch mit etwas leichterem an, kommt aber halt drauf an was genau du machen willst. 😉

    lemon03 schrieb:

    Keine Ahnung, ob das wichtig ist, aber sind die beiden Funktionen nicht in Java?

    Nein, AFAIK Flash/Actionscript.



  • Ich dachte eigentlich das es relativ einfach ist, wollte ja "nur" einen Benutzernamen und das Passwort via Pointer einfügen, nur leider ging dies wohl nicht. Nun habe ich einmal damit angefangen und würde es jetzt auch gerne fertigmachen.

    Nah dran ist gut, das ist noch der einfachere Teil. Das ist eine Memberfunktion, weißt du denn schon wie du an das entsprechende Objekt kommst?
    Erstmal solltest du rausfinden ob die Dateien kompiliert oder interpretiert werden, je nach dem ändert sich der Angriffspunkt.
    Wenn du das weißt, braucht du nur noch die Addresse der Funktion, dann kannst du sie aufrufen.

    Könntest du das näher erläutern, ich versteh nämlich nicht viel ^^. Ich weiß nur, dass ich eine .data datei mit dem bereits erwähntem Programm geöffnet habe und da wohl die HEX Werte auslesen kann, doch leider ist mir unklar wozu ich dies brauche und wie genau dies funktioniert ^^.

    Ich habe einige Videos zu CheatEngine und OllyDB gesehen, darunter auch Videos, wie man Wallhacks, Unsterblichkeit etc. macht, aber so richtig anwendbar ist dies meiner Meinung auf das hier nicht :/.



  • PowerOfCreation schrieb:

    Ich dachte eigentlich das es relativ einfach ist, wollte ja "nur" einen Benutzernamen und das Passwort via Pointer einfügen, nur leider ging dies wohl nicht. Nun habe ich einmal damit angefangen und würde es jetzt auch gerne fertigmachen.

    Klar geht das, nur hast du die Pointer nicht und verstehst auch noch nicht wie das Programm überhaupt arbeitet. Darin müsstest du dich einarbeiten (möglicherweise viele viele Stunden) und verstehen was da im Hintergrund abläuft. Wenn du dann verlässlich auf die Adresse kommst, kannst du dort auch Dinge auslesen/abändern.

    PowerOfCreation schrieb:

    Ich habe einige Videos zu CheatEngine und OllyDB gesehen, darunter auch Videos, wie man Wallhacks, Unsterblichkeit etc. macht, aber so richtig anwendbar ist dies meiner Meinung auf das hier nicht :/.

    Ja, Cheaten != Modden. Modden ist (meiner Menung nach) auch viel schwerer als simples Cheaten.

    Wie gesagt, du könntest versuchen die Datei zu editieren und dann wieder abzuspeichern, weiß aber nicht ob das so einfach machbar ist.
    Ansonsten würde ich zuerst rausfinden ob der Code kompiliert oder interpretiert wird, und dann kannst du im Debugger versuchen diesen Code Ausschnitt wiederzufinden, diesmal in Assembly/Bytecode. Sollte über die Strings die du eingeben kannst machbar sein. Und dort kannst du dann eventuell eingreifen.

    Das wären so meine ersten Ideen zu dem Thema. Da ist eher Fanatasie gefragt, wie man zum gewünschten Ergebniss kommt kann dir hier keiner mal eben schnell erklären. Aber so ganz ohne Reverse Engineering Kenntnisse wird das so schnell nichts...



  • PowerOfCreation schrieb:

    Ich dachte eigentlich das es relativ einfach ist, wollte ja "nur" einen Benutzernamen und das Passwort via Pointer einfügen

    Das ist eine sehr oberflächliche Vorstellung davon, wie Programme funktionieren. Sehr viel Erfahrung ist auch ein sehr relativer Begriff. Du siehst ja selber, dass dir nicht so wirklich 100% klar ist, wie das alles funktioniert, und dann kommen erst recht abenteuerliche Erklärungsversuche, "dass das irgendwie geschützt ist". Deswegen würde ich sowas erst angehen, wenn ich wüsste, was ich mache, und nicht ein paar oberflächliche Vermutungen habe.
    Und wenn du dich erstmal auskennst, wirst du das dann wahrscheinlich gar nicht erst anfangen wollen, weil aufwändig und langweilig ist.



  • Was würdet ihr/du denn vorschlagen, gibt es da Videos, Bücher oder ähnliches? Ich hatte nichts dergleichen gefunden und mir deswegen einfach selber diese Aufgabe gestellt ^^.



  • Für Reverse Engineering zB. Google und CrackMes. ^^



  • PowerOfCreation schrieb:

    Was würdet ihr/du denn vorschlagen, gibt es da Videos, Bücher oder ähnliches? Ich hatte nichts dergleichen gefunden und mir deswegen einfach selber diese Aufgabe gestellt ^^.

    PowerOfCreation schrieb:

    ich kenne mich gut mit C# und Java aus, hauptsächlich habe ich bis jetzt nur mit Unity 3D programmiert, aber wie ich einsehen musste ist es unrealistisch ein ganzes Spiel alleine zu programmieren, also möchte ich mich auf kleinere Tools, Werkzeuge und Mods beschränken und vorallem mit C++(und Lua).

    Das kommt eben stark drauf an, was du konkret machen willst. Willst du programmieren lernen und z.B. selber an Spielen oder 3D Engines mitentwickeln? Willst du beruflich eigentlich was ganz anderes machen und nur nebenbei etwas modden? Willst du dich tatsächlich mit Low Level Programmierung und Reverse Engineering beschäftigen?



  • Wie bereits erwähnt kann ich bereits programmieren und habe auch schon mit Engines wie Unity und Unreal Engine programmiert, nur habe ich von dem was dahinter abläuft wenig Ahnung(Assembler, Maschinencode, Compiler, Graphic Pipeline.... kenn ich dem Namen nach und das war es eigentlich schon). Ich habe bereits Mods mit API's gemacht und möchte nun auch Programme verändern/modden, die keine API haben oder einfache Tools, da ich gerne mal etwas fertig bekommen möchte und nicht erfolglos mich an einem eigenem Spiel versuchen.

    Ich habe eben mal bei Amazon gesucht und nur Englische Bücher gefunden, ich kann zwar Englisch ganz gut aber wenn dann auch noch Fachbegriffe kommen kann ich damit wenig anfangen 😕 . Naja werde mich erstmal weiter mit C++ beschäftigen und mal schauen ob ich ein Buch/Video zu dem was im Hintergrund eigentlich passiert finde.



  • PowerOfCreation schrieb:

    Wie bereits erwähnt kann ich bereits programmieren und habe auch schon mit Engines wie Unity und Unreal Engine programmiert, nur habe ich von dem was dahinter abläuft wenig Ahnung(Assembler, Maschinencode, Compiler, Graphic Pipeline.... kenn ich dem Namen nach und das war es eigentlich schon). Ich habe bereits Mods mit API's gemacht und möchte nun auch Programme verändern/modden, die keine API haben oder einfache Tools, da ich gerne mal etwas fertig bekommen möchte und nicht erfolglos mich an einem eigenem Spiel versuchen.

    Genau die "was dahinter abläuft" Kenntnisse brauchst du aber zum Modden von Programmen die keine Modding-API haben. Wird also einigermassen aufwendig werden.

    PowerOfCreation schrieb:

    Ich habe eben mal bei Amazon gesucht und nur Englische Bücher gefunden, ich kann zwar Englisch ganz gut aber wenn dann auch noch Fachbegriffe kommen kann ich damit wenig anfangen 😕 . Naja werde mich erstmal weiter mit C++ beschäftigen und mal schauen ob ich ein Buch/Video zu dem was im Hintergrund eigentlich passiert finde.

    Je spezieller es wird (und dein Vorhaben ist schon halbwegs speziell), desto weniger Infos wirst du auf Deutsch finden, und desto wichtiger wird Englisch. Also kämpf dich durch. Schlag die ganzen Fachausdrücke etc. nach, so lange bis du sie verstehst ohne nachzulschlagen.


Log in to reply