 Ich will mal zuerst vorerst eine Frage stellen, wie viele von euch kennen Frieda? Okay, schon einige. Und wie viele von euch arbeiten, die ja was krimpt? Okay, gut. Dann wird es wahrscheinlich einige von denen, die nicht Frieda kennen, auch interessieren. Gut, dann fange ich jetzt mal an meinem Vortrag. Danke, dass ihr alle so zahlreiche Schienen seid. Und ja, in dem Vortrag geht es mir hauptsächlich darum, einfach euch mal das Framework an die Hand zu geben und euch auch ein bisschen dazu zu motivieren, euch das anzuschauen und auch selbst mal zu nutzen, weil mit dem Framework Frieda zu arbeiten, das macht einfach eher Spaß. Also mir zumindest deswegen, ja, also, dass ihr da einen groben Plan habt. Gut, für die unter euch, die jetzt nur grob die Infos brauchen, um eben ihre eigenen Gedanken dazu zu machen, was ist Frieda genau? Es sieht folgendermaßen aus, wir haben dieses Framework namens Frieda und wir haben jetzt diverse Prozesse unter iOS, Linux, Windows, irgendein beliebiger Prozess und Frieda macht folgendes, das nimmt den V8-Interpreter von Google, also der eben JavaScript interpretieren kann. Es gibt auch eine andere Version oder eine andere Art, wie man JavaScript ausführt, und zwar mit diesen Ducktapes, aber das ist jetzt nebensächlich, das geht zu sehr ins Detail, also ihr könnt euch so vorstellen, Frieda macht folgendes, das injiziert in einem Prozess diesen V8-Interpreter und bietet euch dann eben die Möglichkeit, über dieses Framework Frieda JavaScript-Code in den Prozess zu laden. Und ihr könnt in einem JavaScript-Code beliebige, also nicht beliebige Sachen, aber eigentlich alles, was mit JavaScript möglich ist, könnt ihr in den Prozess ausführen. Und ihr habt eben ne Schnittstelle von Frieda, also eine API, womit ihr Speicher auslesen könnt, Funktionen hucken könnt. Also ihr könnt halt ziemlich viel mit dem Prozess anstellen und habt eben von außen immer eine Verbindung zu dem Prozess und könnt eben ja sehr vieles dann darüber machen. Jetzt nochmal in grob, zum einen, was ist Frieda natürlich geil, also meine Meinung nach. Ich hoffe auch, dass ihr eben auch der Meinung seid später, wenn ihr euch das mal angeschaut habt. Ihr könnt sich vorstellen, wie Greasemunky für native Prozesse. Also wer von euch mal Greasemunky Arbeit hat, das ist halt schon cool. Ihr könnt einfach, ja, es gibt Code schreiben und er wird halt einfach in der Seite ausgeführt und ihr habt einfach die Macht über diese Seite oder die Macht über diesen Prozess eben in unserem Fall. Es ist natürlich ein Javascript Framework, hauptsächlich eben dafür gedacht, dass man eben Javascript Code schreibt im Endeffekt. Es ist ein Debug oder Heckwerkzeug, also ihr könnt damit auch prima debuggen, wenn irgendeine Funktion misstbaut, könnt ihr einfach die Funktion eben mit Frieda hucken und euch anschauen, was für Parameter da mitgegeben werden oder sonstiges. Es ist Open Source, was natürlich super ist. Wenn ihr irgendetwas entdeckt, was euch jetzt stört an Frieda, das wäre vorher ein Code, eben, pushen oder ja, vorschlagen. Was kann es? Es kann Cross Platform, wie ich eben erwähnt habe. Also ihr könnt eigentlich schon die gängigsten Betriebssystem Frieda nutzen, zum Beispiel eben auch Android oder iOS oder Mac. Ihr könnt Funktion hucken, beliebige, also eigentlich können so gut wie alle Funktionen hucken. Speicher Modulation, ihr könnt beliebig Bytes verändern, von auch geladenen Libraries. Ihr könnt über, also die AP bietet euch auch Socket, APC oder iOS Streamschnitt stellen. Das heißt ihr könnt auch im Endeffekt von irgendeinem anderen Prozess aus oder von einem Eigenprogramm dann auch über Sockets mit dem Skript, was im Prozess liegt, kommunizieren und diverse Sachen machen. Ihr habt eine SQL Light-Schnittstelle. Ihr könnt auch irgendwas dampen in eine Datenbank, zum Beispiel. Ihr könnt ASM oder MIPS Instruktionen lesen, zum Beispiel, sagen wir mal, Gameboy, vielleicht auch hacken wollt oder sonst was. Also ihr seid dann nicht nur auf Assembler eben, ja, beschränkt. Und ihr habt eine Java-Schnittstelle. Das heißt ihr könnt theoretisch eben auch jetzt mit Frieda Android Apps hacken. Und dann eben, dann habt ihr auch Zugriff auf alle Java-Klassen und könnt eben, ja, Java, eben aus Javascript heraus nutzen. Es klingt vielleicht ein bisschen abgefahren, es ist aber, ja, wenn ich zum Anschauen, es ist schon ziemlich easy zu nutzen. Und vieles, vieles mehr. Also ihr könnt euch da mal die Frieda-Seite anschauen, Frieda.de und da findet ihr eben raus, was man alles damit machen kann. Was kann das jetzt nicht von Haus aus? Habe ich extra einen Klammern geschrieben, weil man theoretisch ja alles auch selber implementieren kann, weil man hat ja die eigentlich die komplette Macht über den Prozess. Unerkannt sein. Also wenn ihr jetzt zum Beispiel cheaten wollt und es gibt ein Anti-Cheat-System, dann werdet ihr eben nicht einfach mal so unerkannt sein. Also da müsstet ihr dann viel Eigenarbeit reinstecken. Bei Hardware Breakpoints habe ich jetzt so nicht gefunden, dass ihr jetzt eben, ja, an irgendeine Speicheradresse jetzt ein Hardware Breakpoint setzen könnt. Software Breakpoints habe ich gesehen, gehen ohne Probleme. Bei Hardware Breakpoints habe ich jetzt nichts gefunden. ES6 Code, also der neue Javascript Standard, sage ich mal, der Neuere wird nicht unterstützt. Das heißt, ihr müsst ihr eben erstmal runtertranspeilen auf ES5, was eigentlich auch easy geht, also mit Babel zum Beispiel. Ein Module.require geht auch von Haus aus nicht. Ich sage bewusst von Haus aus, dass ihr mit Babel alles realisieren kann oder mit Browserify, falls ihr das kennt. Ja, also das heißt, ihr könnt jetzt nicht aus eurem geladenen Skript noch andere inkludieren. Das heißt, ihr müsst eigentlich, bevor ihr euer Skript reinladet, alles zusammenpacken in ein Javascript-Pfeil, bevor ihr sie eben reinladet. Auf Prozesse Apps warten kann das Framework von Haus aus auch nicht. Das heißt, ihr könnt nicht sagen, hey, wart auf den und dem Prozess und dann lad das Skript, sondern müsst ihr was eigenes schreiben, wo ihr dann einfach auf dem Prozess wartet. Das ist ja ohne Probleme möglich. Jetzt zeige ich euch mal ein Beispiel kurz. Wir können das von dahinten auch gut erkennen. Das hier ist jetzt der sogenannte Interceptor. Das ist eben einer von diesen AP-Schnittstellen, die ihr bei Friede habt. Was ihr damit machen könnt, ist, ihr gibt bei, zum Beispiel, wenn ihr jetzt Interceptor.detach aufruft, könnt ihr euch eine Funktion hängen. Die Adresse seht ihr jetzt zum Beispiel hier, eben 004F, irgendeine Adresse, die ihr jetzt habt. Und dann habt ihr als zweiten Parameter jetzt ein Objekt. Und in dem Objekt habt ihr eine On-Enter Funktion, die wird aufgerufen, wenn jetzt die Funktion, die ihr eben interceptet, aufgerufen wird. Dann könnt ihr die Argumente auslesen, verändern. Ihr könnt sogar, wie ihr hier sehen könnt, die Register auslesen, also eax, ebx und so weiter. Und ihr habt quasi komplette Kontrolle über den aktuellen Stand, ja, eben des Prozesses, also beim Aufruf dieser Funktion. Bei On-Leaf habt ihr die Möglichkeit, durch den Rückgabewert anzuschauen. Und ja, den könnt ihr eigentlich auch verändern, wenn ihr jetzt eben über den Kontext auch wieder die Register verändert, dann könnt ihr auch den Rückgabewert eben verändern. Und ja, also neben Beispiel habe ich jetzt einfach eine Score-Funktion quasi interceptet und veränder dann, beziehungsweise lasst mir eben anschauen, was die Interceptfunktion zurückgeben würde. Ja, und am Anfang, wie ihr sehen könnt, setze ich einfach das Argument auf 1,3 oder 7. Also, es ist eigentlich ganz simpel, wie ihr sehen könnt. Dann gibt es auch Native Functions. Stell dich jetzt mal vor, ihr habt eine C++-Funktion, GetModuleBasename, zum Beispiel, eine WinAPI-Funktion. Über die Native Functions könnt ihr jetzt diese Funktion darstellen als JavaScript-Funktion. Also ihr könnt die einfach, ja, eben dann aus JavaScript nutzen. In dem Fall habe ich jetzt zum Beispiel die GetModuleBasename-Funktion genommen und wir haben jetzt die Native Function, also Native Function ist eben eine Klasse und Sie sehen Sie, als ersten Parameter übergeben wir die Adresse. In unserem Fall nutzen wir eben jetzt auch wieder eine Frieder-Funktion, nämlich DefinedExportByName, da können wir dann eben über diese spezielle beliebige Funktion in irgendeinem Modul, ja, aus irgendeinem Modul finden. Also jedes Modul exportiert ja bestimmte Funktionen und wir können dann darüber uns einfach jetzt Funktionen holen. Als nächsten Parameter übergeben wir den Rückgabewert. Wenn das jetzt ein Boolean ist oder sonst was, müssen wir das hier angeben. Dann als nächsten Parameter übergeben wir ein Array von Typen, die eben für die Argumente stehen. Also unsere Funktion wird ja mit bestimmten Argumenten gestarrt und wir geben eben jeden Typ an. Und als letzten Parameter, der ist optional, könnt ihr auch die Calling-Convention angeben. Also wenn ihr jetzt eine spezielle Funktion habt, die ThisCall anstatt, STD-Call macht oder sonst was, könnt ihr das eben auch verändern. Also ja, ansonsten versucht Frieder da selbst rauszufinden, was jetzt die Calling-Convention ist. Mit gängigen Methoden. Und dann, also wir haben sie oben definiert, die Funktion GetModule base nehmen und unten können wir sie dann eben ganz einmal aus Javascript raus aufrufen und Frieder macht einfach den Rest für uns. Jetzt, die Java-Schnittstelle, wie eben angesprochen, in unserem Fall, also tun wir jetzt eine Java-Funktion, also auch Intercepten, so kann man es nennen. Das ist jetzt die OnResume-Funktion von Activity. Dann nehmen wir halt irgendeine Klasse aus jetzt der glanen App, also in der wir gerade drin sind. Nehmen wir irgendeine Klasse und ändern einfach mal die Implementation von OnResume und machen da eben einen Send und können eben eigene Sachen machen und am Ende rufen wir die originale OnResume-Funktion auf, die uns dann eben zur Verfügung steht und da können wir dann auch im Java-Kontext alles mögliche eigentlich anstellen. Wir können damit auch prima Android-Spiele hacken. Jetzt habe ich ein paar kleine Demos vorbereitet, zwei Stück. Ich hoffe, man sieht das, ja. Zum einen, um zu zeigen, wie weit man eigentlich auch gehen kann, habe ich jetzt ein D3D, also DirectX-Beispiel geschrieben. Das hier ist jetzt einfach so eine Beispiel-DirectX-App, die hat eigentlich nicht so weiter in sich, aber was wir jetzt machen, also ich habe mir jetzt hier ein klein Skript geschrieben. Ich fliege mal kurz über den Code, das ihr das auch sehen könnt. Meine Top ist ein bisschen lahm, sorry. Okay, also der Code umfasst alles und alle mir jetzt 105 Zeilen. Darin in Begriffen ist eben auch dieser eigentliche Code, der den JavaScript-Code reinlegt in den Prozess. Was man ein bisschen größer ist, ein bisschen doof zu sehen gerade. Ja, und was wir jetzt haben ist, wir haben oben einen Blog, den wir definieren, also in Skript habe ich es einfach genannt, und da liegt dann der JavaScript-Code, der Injected ist und da mache ich jetzt so Sachen wie finden wir die V-Table von DirectX und ja, also wenn jemand Interesse an dem Code hat, kann ich natürlich auch nach dem Vortag auch gerne den Code geben und jetzt gucken wir zu mal an, was passiert, wenn wir das Skript ausführen. So, natürlich mal den Prozess ein bisschen. Dann haben wir da so ein bisschen eingebaut. Ja, und dann haben wir einfach ein Fenster sozusagen, also das wird ja alles mit N über N ziehen quasi jetzt gezeichnet. Und das ist halt alles im Prinzip Javascript, was halt schon cool ist. Und ihr habt da jetzt auch keine großartigen Frame Drops oder sowas, weil Frieda ist halt echt gut optimiert und ihr könnt darüber halt echt eine Menge machen. Das heißt jetzt eigentlich nur ein kleines Beispiel. Eigentlich wollte ich eine Uhr machen, aber ich hatte Probleme mit dem erstellen von Lines und so. Ja, sorry, aber das reicht auch zur Veranschaulichung. Dann habe ich noch ein anderes Beispiel. Es ist ziemlich blöd, aber zwar habe ich es genannt, Space Caled Factory ist jetzt ein dummer Name, aber was das macht ist, es hockt eben diese Funktion, die für Sets in der Punkte ist oder zum Adden der Punkte. Jetzt sehen wir schon Intercepting Add Score Method. Das ist dann eben die Methode, die unseren Score hochzählt. Was passiert, wenn ich ich hoffe, man kann es erkennen, wenn ich jetzt Punkte mache, achtset mal auf den Score und links könnt ihr dann in der Ausgabe sehen, was eigentlich zur Funktion gesendet wurde, zum Beispiel 500, 750, nicht ändern, das halt einfach zu irgendeinem zufälligen Wert, der 4-byte eben ausfüllt. Und ab und zu zählt er halt hoch, ab und zu runter und deswegen sieht man manchmal den Score auch gar nicht. Falls ihr euch fragt, warum man es manchmal sieht und manchmal nicht, das ist einfach zufällig eine riesen hohe Zahl. Ja, und man kann halt wie gesagt mit Frieda so gut wie alles machen, weil ihr halt einfach die komplette Macht über den Prozess habt. Crash bonus minus irgendwas. Naja. So, dann will ich noch, oh, das wollte ich nicht, so, dann kann ich noch als Schlusswort zu der Kleinpräsentation sagen, was geht und was geht nicht. Was geht, ihr könnt sämtlichen Traffic von einem Prozess eben auslesen und ändern, dazu zählt auch HTTPS, also ihr könnt ohne irgendwelche eigenen ja, oh, tut mir leid, mir fehlt gerade das Wort. ZG-Karte genau, ohne eigene ZG-Karte da Bullshit anstellen. Ihr könnt Password auslesen, zum Beispiel jetzt aus irgendeinem Password Store oder so was, ihr könnt Cheatschreiben, Aimbots, ESP, Triggerbots, alles ist eigentlich möglich. Ihr könnt Android Games hacken, also ihr könnt einfach über den Demagmodus an der Handy hängen und könnt dann eben alle Apps, die gerade laufen einsehen, könnt euch reinladen. Ja, ihr könnt Android Games hacken, wie erwähnt. Ihr könnt theoretisch auch Würmer schreiben, die sich jetzt unter den Prozessen irgendwie selbst organisieren. Twitch Plays, das habe ich noch als Beispiel genommen. Also ihr könnt euch einfach in irgendein Spiel hängen und dann eine Verbindung zu Twitch Chat API oder sowas machen und da eben Zeugs mit anmachen. Was mir auch als Idee noch kam, modulare Hackschreiben, wenn ihr jetzt zum Beispiel mit Frieda Grob so ein Framework aufbaut für Hacken von Spielen und dann einfach serverseitig irgendwie die Module ladet zum Cheaten, sowas wäre eben auch möglich. Was wäre nicht möglich, einfache Strukturen erstellen, also wenn ihr jetzt von irgendeiner Direkt-X-Klasse oder sowas eine Struktur habt, dann werdet ihr die mühselig zusammenstücken müssen, das ist vielleicht ein bisschen unpraktisch, meiner Meinung nach Persistenz. Wenn ihr jetzt irgendwelche Änderungen am Prozess macht, klar, es ist nicht Persistenz, nächstes Mal wenn ihr den Prozess ohne Frieda startet, hat dann natürlich einen alten Stand und ja, Frieda hat von Haus aus auch keine PE-Damms, das heißt, ihr könnt jetzt nicht also ein Prozess starten und dann dampen oder sowas aber über Umwege werdet ihr das dann selbst machen können, weil ihr halt wie gesagt die komplette Macht über den Prozess habt. Zum Schluss will ich euch halt noch die Seite von Frieda ans Herz legen, die haben und ja, dann hoffe ich mal, das hat euch als grobem Überblick gereicht und wenn ihr Fragen habt, könnt ihr die jetzt gern stellen. Ja, ja, du kannst die Rücksprung-Adresse zum Beispiel ändern, aber das ist eine interessante Frage. Also den Fall hatte ich jetzt noch nicht was du aber auf jeden Fall machen kannst, ist den On-Leaf kannst du verhindern, dass die Funktion eben jetzt auf normale Art und Weise verlässt, aber ob du das im On-Enter machen kannst oder müsste man testen, also das weiß leider nicht, aber das ist eine gute Frage. Ja, du kannst halt dir zum Beispiel jetzt Kot schreiben, der zum Beispiel irgendwelche Sockets erfindet und dann von außerhalb über den Socket bestimmte Werte ändern, ansonsten was ich halt auch cool finde an Frieda, du kannst einfach Frieda schließen, entleht auch sauber die ganzen Hooks, was ich ziemlich geil finde, also funktioniert echt flüssig und dann Änderungen am Kot, man dann noch mal injecten, das geht also zur Laufzeit echt prima, also das ist auch was, was ich ziemlich gut finde. Keine Fragen mehr? Noch habt ihr Zeit? Na gut, dann bedanke ich mich vielmals und viel Spaß noch auf der GPN.