 Franz Tee und wir werden heute den Radarais demystifiziert Talk für euch übersetzen. Und der Harold sagt gerade nochmal an, Radarais ist ein Reverse-Engineering-Framework, das viel an Popularität gewonnen hat die letzte Zeit. Man sagt aber, dass es recht schwierig und zu benutzen ist und ich denke, dass es, also ich persönlich denke, dass es nicht rechtfertigt und diese ganzen Mythen zu, zu widerlegen ist hier der Autor selbst Pancake und er wird uns alles das erzählen, bitte begrüßt ihn recht herzlich. Ja, hallo, also bei meinem Talk geht es darum die Mythen um Radarais zu, also Radar zu aufzuklären und worum geht es bei diesem Titel? Also ich bin Sergei Alvarez, die Leute im Internet kennen mich als Pancake, ich arbeite bei Nausecure und ich forsche an mobiler Sicherheit und ich habe Radarais und Radar und Radar 2 geschrieben, habe auch andere Tools wie Wallabind und das geschrieben und die sind alle Open Source, ich habe auch an vielen anderen Dingen gearbeitet, ich habe Bluetooth gearbeitet, ich habe Videokodekoptimierungen gemacht, ich habe auch bei CTF an der Defcon teilgenommen und ich habe auch Forensic gemacht, ich bin Arbeiter als Systemadministrator, ich mache hauptsächlich Low Level C Dinge, aber ich arbeite auch an Webseiten. Also was ist Radar? Es ist ein Open Source Reverse Engineering Framework, also es geht darum Binärdateien zu analysieren, es soll portable, erweiterbar und einfach ausdrückbar sein, es hat 2006 als Hobbyprojekt angefangen, weil ich ein paar Dinge selber gebraucht habe und wir haben es 2009 komplett neu geschrieben und ich habe damals als Software-Analytiker gearbeitet und habe nach Mustern gesucht und die Ergebnisse rausgesucht und ich habe damals hauptsächlich mit einem Assembler gearbeitet und Debugger und so weiter und ich brauchte einen Tool und habe drei Jahre später es dann komplett neu geschrieben, weil es ein großes und weil verschiedene Sprachen unterstützt werden mussten, musste der Interpreter aus dem Projekt herausgelöst werden und unterschiedliche APIs ausgeführt werden. Da waren sehr wenige Leute, die mitgearbeitet haben bis vor ein paar Jahren und vor, daraus hat sich viele Benutzer und Mitarbeiter haben drei oder echt vier, vielleicht sind da 500 Telegram User in IRC oder Telegram und auch ein paar auf Twitter und in diesem Jahr habe ich die ersten Konferenz darüber organisiert über dieses Werkzeug in Barcelona und diese dritte Jahr, wo wir den Summer of Cold Wettwerb analysiert haben und da sind viele Leute, die da mitarbeiten. Wofür steht der Name? Zeilen-Daten? Ich habe das Ganze für ein forensisches Projekt begonnen und nicht etwas um statische Analyse zu machen. Es ist die grundlegende Funktionalität und unterstützt auch das Assembling und Disassembling in meiner Hand. Jede dieser Funktionalität, neue Parkins erstellen und es gibt viele verschiedene Dateiformate, die unterstützt werden. Auch wenn sie kaputt sind, wird es immer noch unterstützt. Sie versuchen, jeden möglichen Fallformat zu benutzen, um Federn zu finden. Es hat hauptsächlich statische Analyse und unterstützt aber auch einige andere Methodenwetten. Es können Entropie Berechnungen machen und den Unterschied in der Dateien finden. Man kann damit die Parken... und es kommt auch mit einem Imulator. Es sind APIs, um Plugins zu schreiben, die die Immulator einbinden zu können, z.B. Unicorn. Es kommt auch mit Exploiting Funktionalitäten, die ein Payload erstellen. Es hat auch viele Skripting-Sprachen, die verwendet werden. Und es gibt so viele Plugins, dass ein Plug-in-Manager benötigt wird. Viele Leute benutzen unterschiedliche, und ich möchte die nicht alle zusammenfügen. Es ist einfach eine sehr einfache Methode zu erstellen, dass andere Leute diese Plugins selber installieren können. So, was können wir uns anschauen? Das sind einige der Beispiele über Sachen, die Leute gerade mit Radar anschauen. Hier ist Pokémon, Roms, Gameboy, Street Fighter, das ist ein Spiel. Apollo 11, CPU kann damit untersucht werden und so weiter. Aber nicht aufhören, dass die mal genauer anschauen. Wir sollten die Mythen genauer anschauen. Und wir sollten uns die Mythen, die Leute über das Projekt glauben, näher anschauen. Die meisten vermuten, dass Radar nicht stabil ist. Darauf vermuten, dass es komplex ist. Es gibt viele Befehle, es ist schwer, dass sie es zu erinnern. Andere Leute denken, dass es Fehler hat, dass es nicht dekompilieren kann, dass der Debaker kaputt ist. Also, es sind viele Beschwerden, wie diese. Aber zuallererst mal eine kurze Umfrage. Wer kennt dieses Werkzeug? Okay, das anscheinend fast alle haben auf die Webseite geschaut. Und wie viele benutzen dieses Werkzeug wirklich? Okay, ungefähr die Hälfte. Die Hälfte der Abwesenden. Das ist ziemlich gut. So, zuallererst die erste Mütze, dass es kompliziert ist, dass es schwierig ist. Das ist ein Graf über die Lerninkurve, wenn man unten anfängt mit dem Mord, wo man irgendwas Sinnvolles macht. Und in diesem Fall ist es relativ schwer, dieses Werkzeug zu benutzen. Aber das ist ungefähr genauso schwer wie andere Kurven, wie z.B. bei Git oder BIM. Der Grund dafür ist, dass sehr viele Befehle sind, aber es ist ein Logik hinter denen. Wenn man die Logik versteht, dann kann man relativ einfach anfangen zu lernen eigene und anzuwenden. Also, wenn Sie jetzt die Logik zwischen den Befehlen verstehen, dann können Sie sehr spezifische Befehle erstellen und unterschiedliche Befehle miteinander missen und neue Funktionalität erstellen. Sie können den Code sehr einfach anschauen und Sie können den Punkt, wo Sie was verändern wollen, relativ einfach finden. Sie können Plagik INS schreiben, fast eine von den Skriptsprachen und die Funktionalität zu erweitern oder eine spezielle Analyse für ein spezielles Ziel zu erstellen. Und es können auch andere Werkzeuge hinzugefügt werden. Aber es ist ein Teil der komplexen Methode über Befehlen. Befehle sind Memornaics, d.h. sind mehrere Buchstaben und jeder Buchstabe bedeutet für etwas. Der erste Buchstabe bedeutet, was der Grund für den Befehl ist, d.h. für Peels, dass es irgendwas ausgibt. Der zweite Buchstabe ist, was möchte man ausgeben, z.B. ein Hex-Tab, ein Desassembly ausdrücken oder eine Noctale oder was auch immer. Es gibt sehr viele unix-endige Konzepte, sehr schnell. Man kann Pipes benutzen, man kann Umleitungen benutzen, man kann Grape, also reguläre Ausdrücke benutzen, man kann Jason und Lesb benutzen. Und das ist das alles Teil, die im Werkzeug zur Verfügung gestellt werden. Aber der Grund dafür ist, dass die Binary in irgendeinem Zielgerät installieren kann. Man hat mehr oder weniger eine ganz vollständige Unix-Chall. Wenn man das seltenes hat, dann muss man seine eigene Werkzeuge mitliefern, z.B. Jason Pipi. Es versucht autogonal zu sein. Man kann unterschiedliche Befehle mit der neuen Dimension und neue Funktionalität daraus bekommen. Okay, jetzt ein kurzes Beispiel. Welche sind die fünf grundlegenden Befehle? Wir brauchen eigentlich nur fünf Befehle. Der Rest ist Modifier, die sehr hilfreich sind, aber die fünf grundlegenden Befehle sind diese. Wir können einen Datei öffnen. Wir können Sieg, also wir können Lesen und auch die Anzeige können größer gemacht werden. Wir können Sieg, z.B. irgendwo hinspringen. An diese Adresse hier können wir hinspringen und dann geben wir die disassamplierte Code von dieser Adresse aus und dann springen wir wieder zurück. Und wie ihr sehen könnt, kann man auch die Hilfe ausgeben, indem man einfach eine Fragezeichen am Ende von dem Kommand eintippt, und dann kriegt man die Hilfe dazu. Man kann auch relative Sprünge benutzen. Das andere Kommando, was wir uns angucken wollten, war P, mit dem man Dinge ausgeben kann. Da kann man sich auch hier disassemblen oder die Instruktionen ausgeben. Und dann das letzte Kommando ist W, womit man schreiben kann. Ich setze gerade mal noch den Cash auf, damit ich die Datei nicht zum Schreiben öffnen muss. Und jetzt gucken wir uns den Disassembly an. Und jetzt kann ich z.B. hier die erste Instruktion patchen und wir sehen, dass die Nob-Instruktion damit auftaucht. Man kann eine ganze Menge Sachen schreiben, also man kann Assembly schreiben, man kann Hex-Werte schreiben, man kann Inhalte von Dateien an die aktuelle Position schreiben und so weiter. Und das letzte Kommando ist Q, mit dem man dann wieder rauskommt. Man sieht, es gibt eine ganze Menge Modifikatoren. Also wenn wir z.B. hier das Disassembly angucken, dann können wir auch Crab, also nach Strings suchen. Also wir können z.B. nach Calls suchen. Und wir können auch die Anzahl der Calls zählen. Und wenn es eine ganz lange Liste gibt, fragt er zuerst, ob man das tatsächlich ausgeben will. Aber man kann auch tilde.punkt. benutzen und das ist dann so ein interner Pager. Da kann man dann hier und her scrollen. Und das sind mehr oder weniger die Logik hinter diesen Kommandos. Und wir werden uns das nachher auch noch genauer anschauen. Und die Struktur ist in verschiedenen Modulen. Also es gibt ein lib-r-Verzeichnis, da sind die ganzen Module mit drin, also die Bibliotheken und so weiter. Die sehen wir hier. Also es gibt R-Core, das verbindet alle Bibliotheken miteinander. Und R-Util ist die Bibliothek, die direkt libc, über die man direkt libc benutzen kann. Und da sind die zentralen Debugging-Funktionalitäten drin. Aber man kann das auch ohne Debugging kompilieren und das ist also leicht zu portieren. Und hier ist die Struktur für die Bibliotheken. Und diese ganzen Bibliotheken erlauben euch Plugins zu erstellen. Und die sind dann in dem Verzeichnis P. Und es gibt auch ein bin-r-Verzeichnis, da sind die ganzen Binär-Dateien drin. Das kann man sich auch mal angucken. Und hier können wir uns auch mal lib-r angeschauen. Also das sind die verschiedenen Module. Und dann gibt es noch ein Mythos, dass es für Forensik nicht hilfreich ist. Und das war aber eigentlich das ursprüngliche Ziel des Projekts. Das heißt, es gibt eine ganze Menge Funktionalität und auch Stärken von dem Tool, damit Forensik zu machen. Aber natürlich nur für Open Source Forensik. Aber man kann eine ganze Menge Sachen damit machen. Also man kann zum Beispiel Festplatten öffnen. Zum Beispiel eine Windows oder auch das RAM kann man öffnen, wenn das dein Computer unterstützt. Und man kann auch für den tatsächlichen Kernelspeicher kann man auch lesen und schreiben. Da gibt es das R2PM-Modul. Man kann Dinge suchen und ersetzen. Und es gibt auch Möglichkeit, Dateisysteme zu mounten. Das haben wir aus grob geklaut und leicht verändert. Und man kann Dateien einbinden. Also die Inhalte von einem bestimmten Speicherabbild kann man sich ausgeben lassen. Und man kann auch incrementelle Checksummen erstellen lassen. Das ist ganz praktisch. Wenn man Checksummen wie MD5 über eine Megabyte oder Gigabyte große Datei ausrechnen will, dann kann man einfach sagen, welche Teile der Datei sich geändert haben und dann schnell die neue Checksumme ausrechnen. Und man kann eben auch IO Plugins bauen. Also man kann alles Mögliche Plugins bauen. Und es gibt zum Beispiel Plugins für GZIP oder EWF für Data-Bilder. Und man kann sich die ganzen Plugins mal anzeigen lassen mit minus groß L. Und das ist die Liste der Plugins, die jetzt hier benutzt werden kann, um lokale oder entfernte Ziele zu öffnen. Und man kann das auch mit RAsum 2 benutzen. Da sieht man dann die Assembler Plugins. Und dasselbe gilt auch für Rabin 2. Da kriegt man dann die Liste der Plugins, um Binärdateien zu öffnen, die in dem Projekt unterstützt werden. Also schauen wir uns noch mal die erste Demo an. Also wir haben jetzt hier eine Datei. Das sieht aus wie ... Es sieht aus als wäre es nur Müll. Also wir sehen nichts Interessantes. Und es ist eine ziemlich große Datei. Es gibt eine ganze Menge Nullen. Aber die Intropy ist relativ hoch. Und wonach wir jetzt suchen, ist eine bekannte Dateiformat. Und dafür benutzen wir Slash M, das sucht nach den Magic-Header. Und das sieht so aus, als hätte es was gefunden. Bei dieser Stelle hier, also springen wir dahin. Wir schreiben das jetzt in eine Datei. Mit dem WTF-Kommando. Und das hat eine neue Datei erstellt. Und die beginnen eben bei diesem aktuellen Offset. Und wir sehen, das ist eine GZIP-Datei. Also müssen wir es mit GZIP öffnen. Und jetzt sehen wir hier was da drin. Und wir können einfach noch mal PM machen. Und jetzt sehen wir, das ist ein FAT-Dateiformat. Also benutzen wir das M-Kommando, um dieses Ding zu mounten. Und wir wollen das in einem Route mounten, mit dem FAT-Datei-System ohne Datenoffset zu benutzen. Und jetzt können wir MS benutzen, das Kommando MS, um eine Shell zu starten in diesem Route. Und jetzt sehen wir den Inhalt von diesem Datei. Also wir können einzelne Dateien anzeigen. Wir können anschauen, welche Dateien da sind. Und wir können eine einzelne Datei rausziehen. Und die können wir jetzt hier einfach öffnen. Und jetzt sehen wir, das ist ein Linux 11. Also ein ganz übliches LS-Programm. Also es gibt eine ganze Menge Funktionalitäten, die praktisch sein können für Forensik. Und ein anderer Beschwerde ist, dass die Analyse langsam ist mit diesem Tool. Und das war, dass Analyse tatsächlich relativ langsam ist, weil es auch blockierend ist. Und es braucht eine ganze Weile, um die Informationen zu sammeln, bevor man irgendwas Sinnvolles machen kann. Und... Das heißt, wir mussten eine ganze Menge Mute-Access benutzen. Und es funktioniert für sehr große Binärdateien nicht so wirklich gut, weil es braucht auch viel Arbeitsspeicher- und CPU-Zeit. Und manchmal findet es nicht alle Funktionen. Und es gibt so eine... Es gibt eine Regel. Also wenn man mehr A's am Ende von A einhängen, also wenn man hier zum Beispiel A, A tippt, dann werden alle Symbole analysiert. Wenn man das dreimal macht, dann werden immer mehr Sachen gefunden. Und die Leute machen dann einfach mehr A's, hängen immer mehr A's hinten dran. Und das ist wahrscheinlich nicht die beste Möglichkeit, wie man das machen kann. Und es gibt so viele Kommandos und Konfigurationsoptionen, um das richtig einzustellen. Und ich werde nur ein paar Mal hier erklären, aber wenn euch das interessiert, dann müsst ihr das nachlesen. Aber die Idee dahinten ist nicht, wir warten ganz lange, bis die Analyse zu Ende ist, bevor wir überhaupt anfangen können, um irgendwas zu machen. Denn es ist eine sehr langsame Operation. Das heißt, wir müssen mehr... Also wir müssen lange warten, bevor das Problem gelöst ist. Und was wir machen ist, 90 Prozent der Probleme brauchen überhaupt keine komplette Analyse von täglichen Problemen. Ich kann einfach nur 10 Prozent analysieren oder einen Teil des Programms und dann kriege ich schon die Information, um die ganze Woche, statt die gesamte Benerdatei zu analysieren. Ich suche normalerweise nur nach einem String, nach Referenzen auf diesen String, Funktionsaufrufe, die diesen String benutzen, die diese Referenzen benutzen. Und dann analysiere ich am Ende nur 5 oder 10 Funktionen. Und dann habe ich tatsächlich sehr viel mehr Informationen schon. Und man kann dann einfach die Kommandos benutzen, so ein einzelnes Ding zu analysieren. Und das geht viel schneller. Denn es ist dann auch nur sehr viel weniger Inhalt. Und wir verbessern uns mit jedem Release. Also wenn ihr häufig euch eine neue Version besorgt, dann bekommt ihr da Fixes und das wird dann auch schneller gehen zu analysieren. Und ihr müsst verstehen die Logik hinter diesen ganzen Kommandos und den Optionen und wir werden uns in dem Talk hier noch ein paar angucken. Also das ist jetzt die erste Demo. Ich mache ein Hello World Programm in Go aus und analysiere jetzt alle Symbole. Also das Scope-Binair-Dateien sind relativ groß, dann sie linken alle Bibliotheken und Symbole statisch mit rein. Ich kann das jetzt mal hier mit diesem T-Prefix machen. Da wird die Zeit gemessen. Also es hat jetzt ungefähr 8 Sekunden gedauert. Und danach können wir nach diesem String hier suchen und da hinspringen. Also wir sehen hier ist das Hello World und wir sehen jetzt diese Referenz und da können wir jetzt auch hinspringen. Also wir springen zu der Referenz. Der Hello World String wird hier quasi bei dieser Instruktion hier benutzt. Aber es hat eine ganze Weile Zeit gedauert. 8 Sekunden ist ein ganz einfaches Beispiel. Wenn man das jetzt mit einem größeren Binair-Datei macht, dann braucht es mehr Zeit. Also machen wir mal dasselbe mit diesem Script. Dieses Script macht im Prinzip sucht nach dem Hello String, springt an die Stelle von der Adresse und dann benennt es diese Flag um und definiert, dass das ein String ist, setzt die Block-Suche, die Block-Größe und sucht dann nach Referenzen davon. Also ich fütte es jetzt mal als Script aus und das hat jetzt nur 2 Sekunden, naja fast 3 Sekunden gedauert und das hat die selbe Stelle im Programm identifiziert und die Print F Instruktion gefunden. Also man kann viele Sachen, die Analyse sind, auch beschleunigen. Das ist ein einfaches Beispiel. Es gibt, wenn man das bei einer großen Binair-Datei macht, dann ist der Unterschied sehr viel größer. Und manchmal sind die Referenzen nicht ganz so eindeutig. Also das ist jetzt ein iOS Hello World und wir springen zu dem Hello World String und wir sehen, es gibt keine Referenz, denn wir haben es ja noch nicht analysiert. Also machen wir jetzt eine sehr intensive Analyse und wir sehen, es gibt jetzt hier eine Datenreferenz. Und wenn wir das jetzt ganz einfach analysieren, dann sehen wir, es gibt gar keine Referenz und es gibt einen Grund, denn in dieser Architektur und in anderen auch sind die Referenzen dynamisch in Instruktionen erzeugt. Das heißt, man muss diese dynamischen Instruktionen übersetzen, um die Referenzen zu finden. Also gehen wir jetzt zu dem Namen und wir sehen, dass Print F sich die Adresse von dem Symbol hier herholt. Also es holt sich die Basisadresse und benutzt dann einen Offset. Und wir können jetzt den Emulator mit anschalten. Und mit diesem Emulator sehen wir jetzt, diese Instruktionen werden emuliert und dann bekommen wir die Werte von den Instruktionen und wir sehen jetzt hier, es zeugt die Referenz auf die Stringsektion, also den Abschnitt mit den Strings und dann benutzt er den Offset, um zu dem Hello World String zu springen. Also es gibt einen Kommando, das heißt A-A-E, das analysiert mit dem Emulator. Es gibt auch AAV, der sucht dann weiter nach Zeigern in dem selben Adressraum und es gibt so viele Kommandos, also für A und AA. Und dann eine andere Beschwerde ist, dass Radar nicht dokumentiert ist. Und das ist nicht wahr. Es ist dokumentiert in C. Es gibt Hilfe für jedes Kommando und ihr könnt diese Inline-Hilfe aufrufen, ohne ein Browser aufzumachen oder ein Buch oder so was. Und es gibt auch ein Buch, das habe ich für Radar geschrieben und das ist auch geupdatet worden für Radar 2 von Meijin. Und es gibt eine ganze Menge Folien und YouTube-Videos und Blog-Posts, also es ist nicht wirklich so, dass das nicht dokumentiert ist. Es ist komplex und es ist manchmal schwierig, Hilfe zu finden. Aber es gibt auch den IRC-Channel und da könnt ihr fragen und dann kriegt ihr auch relativ schnell Hilfe. Jetzt ein bisschen über die Kompellation zu machen. Es macht Sachen, die eh nicht dekompellieren sind, aber das ist nicht wirklich die Stärke von diesem Werkzeug, weil es ist schwer. Die Kompellierung ist nicht einfach und es versucht es zu anderen Werkzeugen auszulagern. Neiderman hat ein Plug-in für RageTec benutzt. Das ist ein Online-Service für die Kompellation. Wenn es ein Plug-in ist, wo du die Binary hoch und die Server und man kriegt eine API um die Kompellation und die Funktion, die man analysiert, zurück. Man kriegt ein paar Kommentare und c-ähnlichen Quakecode in der Radar-Shale. Da gibt es auch die Projektrad-Decor. Das ist auch ein Dekompiler, der ist akademisch und das heißt noch nicht. Die Arbeit wird noch mal noch getrankearbeitet, aber es löst noch keine wirklichen Probleme. Ich hoffe, dass es in einem Jahr wirklich genutzbar ist. Da gibt es auch Boomerang, der von Radar 1 unterstützt wurde. Boomerang ist im Moment nicht wirklich aktuell nicht benutzt, aber es kann es immer noch benutzen. Und im letzten Woche habe ich den Snowman die Kompiler übertragen und sie können unterschiedliche Architekturen dekompilieren. Wir können jetzt auch wieder ein kleines Beispiel dafür durchführen. Wir werden später wieder zurückkommen, wenn es fertig ist mit dem ganzen Kompilieren. Die Kompilierung. Das Assembly ist eine der Vorteile von Radar, weil es sehr viele Ideen gibt. Man kann die Befehle einfarben, weil es sehr dattlich ist zu lesen, wenn sie die ganzen mathematischen Operatoren, die in den Federn der Kryptografie macht oder die SysCalls durchführen. Da gibt es auch die Möglichkeit, Variablen oder Argumente zu analysieren. Das heißt, man kann sich anschauen, wo die Variablen aufrufen werden. Im Assembly gibt es unterschiedliche Pseudo-Disassemblies, die etwas sichtbarer machen. Was getan wird, und das ist sehr hilfreich, wenn man z.B. C ähnlicherer Code haben möchte, aber es kann wirklich hier die Kompiler. Wir sind jetzt damit fertig. Haben wir jetzt rein kompiliert. Okay. Tut sie nicht so weit über den Disassembly reden. Das hat gestern funktioniert, aber nee. So, wie ihr sehen könnt, hier ist die disassembliert. Wir haben unterschiedliche Befehle in unterschiedlichen Farben. Man kann die Farbpalette wechseln. Man kann auch die Pseudogrot anstellen. Nee, großte Einschreibung. Wir können unterschiedliche Darstellungen benutzen. Es gibt PDS, das ist eine Zusammenfassung, der befriedet in den Methoden hat. Man kann jetzt in Funktionen, man kann die ganzen Referenzen zu Strings sich anzeigen lassen. Man kann eine Zusammenfassung über die einzelnen Funktionen haben. Man kann auch BDC benutzen. Das ist eine Pseudodekompilation, die Assam benutzt und ein bisschen logisch darüber laufen lässt, um unterschiedliche Blöcke, um herauszufinden, wie die unterschiedlichen Blöcke zusammenhecken. Und diese Sachen sind interaktiv in visuellem Modus. Wenn man ein großes V drückt, kommt man hier rein und rumscrollen. Schaut, wo der Sprung hingeht und so weiter. Und zu guter lässt es sein Graf für die ganzen Funktionen, der erstellt werden kann. Das heißt, man kann analysieren, welche Funktionen es gibt. Wenn man jetzt in einer Funktion ist und man möchte es einklappen, dann kann man das auch machen. Man kann auch in die Assembly springen zu dem selben Ort, wo man in einem Grafen gerade ist. Und da gibt es kein Inter-Guy, aber die Kommando-Zeit ist sehr gut. Und weitere Zusammenhänge mit Stabilität. Leute sagen, dass Radar-Zeit nicht stabil ist. Und der Hauptgrund ist, dass sie eine alte Version benutzen. Weil sie nicht die Git-Version oder die neueste Version benutzen. Und wir können über die Stabilität ein bisschen darüber reden. Darüber, wie viele Freshers es gibt. Und die Menge von Änderungen im Kommentaren oder APIs. Wir sind aktuell in 1.0. Die Befehle sind sehr stabil. Die APIs werden seit Jahren benutzt. Und dann werden wir nichts ändern. Die API ist auch sehr relativ stabil. Wir versuchen, die ganze Zeit umzuwallen. Und ich bin nicht so wichtig, dass irgendwas, was für die Vergangenheit funktioniert hat. Aber ich möchte, dass die Funktionalität für Jahre funktioniert. Nicht, dass eine Funktionalität seit Jahren falsch war, sondern dass die Funktionalität noch weiter funktioniert. Und man kann im Befehl noch etwas dranhängen. Man kriegt ein JSON-Output. Wenn man E drückt, kriegt man Informationen über die Hader. Und wenn man ESP-Sectionen, man kann auch die Sektionen dieser Einlöschenung bekommen. Und wenn man ein J hat, und die Idee hinten anschließt, dann kriegt man diese JSON. und die kann auch schöner gemacht werden, eine richtig identifizierte und besser lesbare Version davon. Und alle modernen Programmiersprachen haben Bibliotheken, um Jason zu pausen und zu analysieren und sehr freche, um damit Skripte zu schreiben. Das ist deutlich faster als andere Methoden zu benutzen. Die ganzen Bananen sind zu dieser Regie an den Pfeifen. Jetzt wieder Objekte erstellen, die nicht ordentlich benutzen werden, weil Jason, Pausen, in der Regel deutlich schneller sind. So, Bewerbung, dass ein spezielles Feature kaputt ist. Die meisten Probleme, die ich im ERC finde, sind, in Git schon neu repariert. Also einfach die Git-Version benutzen. Die meisten Sicherheitsbugs werden in weniger als 24 Stunden gefixt. In der Regel in weniger als 1 oder 2 Stunden. Das ist die Frage, wie weit die mein Laptop von mir ist. Ich versuche den Weg, du siehst es, reparier es zum Folgen. Also, ich versuche euch zu helfen, das zu reparieren, weil die Community-Gruppe gewachsen ist. Und ich versuche den Leuten beizubringen, dass sie selber darauf aufpassen, wie sie ein reproduzierbares Fehler zu GitHub durchzuladen. So dass ich zumindest verstehen kann, was das Problem ist. Hauptsächlich solltet ihr auch eine relativ neue Version von Radar verwenden. Ich repariere nur Fehler, die im aktuellen Version von Git sind. Also, wir versuchen alle sechs Wochen einen Release zu machen, das ist etwas, was ich beschossen habe. Als ich gesehen habe, wie Rust funktioniert, also ich glaube, dass sechs Wochen ausreichend sind, das kann man tatsächlich, weil ein Monat sieht sehr gut aus. Also, jeden ersten Monat macht man was. Und man kriegt nicht so genau mit, wann das nächste ist. Weil man nicht jeden Monat einen neuen Release hat. Und vor ein paar Jahren habe ich einmal, das sei mal im Jahr etwas veröffentlicht, aber das wäre nicht gut für dieses Projekt, weil wenn man, da waren 2000 Commits, die man sich erneut anschauen muss, und es musste viel getestet werden, oder wir haben nicht da nicht viel getestet. Und aktuell ist das gelöst, dadurch, dass wir häufiger neue Versionen veröffentlichen. Und wir testen alles in unserer Test-Suite und regelmäßig. Darum ist es sehr schwer, ein Git-Clone durchzuführen und eine nicht funktionierende Version zu bekommen. Da gibt es auch das Problem mit Debian. Debian ist eine Distribution, die versucht, sehr stabil zu sein. Mit stabil bedeuten Sie, dass sie selten neue Updates einfügen. Naja, das Problem ist, die aktuelle Version von Radarab bei Debian ist fünf, vier Jahre alt. Und wenn alle sechs Versionen 500 neue Commits sind, dann werdet man, wie viele Commits in fünf Jahre sind. Also nicht die Pakete von Debian benutzen. Ich habe Pakete in meinen einzelnen Repositories und Sie können auch die Pakete von anderen benutzen, die ein bisschen neuer sind, aber die sind allen alt. Und ich versuche auch, den Test-Suite zu benutzen. Ich benutze einen RDD-Federn, das ist etwas, was ich gemacht habe. Das war Test-Driven-Derelecting, aber wenn man ein Adress definiert, dann schreibt man einen Test. Und es ist viel zu spät, um Test-Driven-Development zu machen. Und das bedeutet, dass man den Test vor dem Code schreibt. Und so lange der Code schon da ist, muss ich den Test nach der Veröffentlichung machen. Und so lange wir alles, um refaktorieren, um alles möglich zu verbessern, dann können manche Fehler wieder auftauchen. Und darum muss alles getestet werden. Aktuell braucht die Test-Suite ungefähr 15 Minuten, um durchzulaufen. Und ungefähr eine halbe Stunde auf einem neuen Betrieb sehen. Und das ist einfach zu langsamer. Zum Beispiel die Windows-Test-Suite funktioniert noch nicht. Wir versuchen Fussing in diesem Development-Prozess einzubauen. Für jedem Veröffentlichung versuchen Leute Fussing durchzuführen, dass man unterschiedliche Inputs einfach mal ausprobiert. Wir benutzen unterschiedliche Werkzeuge wie Valgrind oder Zylang Analyzer, um die viele behafteten Teile anzuschauen. Und daraus wird welche Teile besonders weder behaftet sind. Und es sind sehr viele Mitarbeiter, die mitarbeiten. Es sind viele der Leute, die erst anfangen, Software zu schreiben. Und wir versuchen einige Standards zu folgen. Und das muss erst mal erklärt werden. Einige Probleme ist, dass es einfach nicht in Python geschrieben ist. Ich weiß, dass C nicht die beste, perfekte Sprache ist. Es ist sehr einfach Fehler zu machen. Aber Python ist auch nicht die Antwort. Vielleicht wird irgendwann eine Sprache sein, die C ersetzt. Vielleicht Rust oder Sift. Aber vielleicht passt Rust besser einfach zu der Philosophie des Projektes. Aber wenn Sie Python benutzen wollen, dann gibt es drei unterschiedliche Bindings. Zwei unterschiedliche mit Pipes, die unterschiedliche Transporte benutzen. Man kann auch Plugins in Ruby schreiben und Python. Und warum wir eine nicht in den dynamischen Sprachen benutzen, ist, dass statisch typisierte Sprachen einen Compile-Time-Fehler erkennen können. Es gibt sehr viele Werkzeuge, um Bugs zu finden und unterschiedliche Plattformen zu erkennen. Es ist deutlich schneller. Es ist deutlich kleiner. Es ist nicht so eine große Run-Time-Library, die mit dem endgültigen Binary ausgediffen wird. Man kann es einfach überall einwinden. Man kann es auch im Webbrowser ausführen. Wenn man 90% der Probleme hat und andere Aufwendungen hat, dann benutzt man einfach eine Skriptsprache. Das nächste ist das grafische Benutzer-Interface. Der Hauptproblem ist, dass es viel gemeckert wird, dass es kein grafisches Benutzer-Interface ist. Das Problem ist, dass Terminals ein bisschen Angst machen. Leute möchten es zu klicken. Das wirkliche Problem ist, dass es kein Geh ist, sondern es gibt sehr viele. Es gibt den visuellen Modus, es gibt den tile-visible-Mode, es gibt den unterschiedlichen Web-Unser-Interfaces, es gibt das Material, es gibt das Alte, es ist jQuery und mobile. Das ist deshalb freundlicher. Ich habe auch blesser-to-benutzer-note und blessed. Der Interface ist mit Fenster und es gibt auch Kraldare. Es wurde von der Führer Radar 1 geschrieben. Das ist ein Terminal mit GTK 2 Interface. Das sind paar Knöpfe und Menü, die man benutzen kann, an schönen Kommentaren zu schreiben. Da war ein komplettes Interface in anderen Sprachen. Es funktioniert relativ schnell und gut, aber es ist schwer, grafische Interfaces zu schreiben. Dann kümmert sich darum und auch habe ich es nie veröffentlicht. Aber es existiert. Es gibt Bocken, das ist ein Python-Interface mit GTK. Es funktioniert nicht sondern nicht gut. Es gibt keine neuen Funktionalität. Jetzt gibt es auch ein Typ, der ein neues Blizzard-Interface in .NET schreibt, aber die Abhängigkeiten sind auf dem Explorer Widget und die MFC API. Es funktioniert jetzt nicht so wirklich auf OS X und nicht portable. Vielleicht wird das übertragbar sein. Vor einigen Tagen hat ein Typ einen anderen hinzugefügt. Er hat auf Twitter geschrieben, er schreibt einen QT file 5 Interface. Wir können einen Screenshot sehen. Wirkliche Benutzer-Interfaces. Eine andere Version, heute seit einem Jahr, mit einem Interface in QT und C++-Interface geschrieben. Das sieht so aus. Das Main-Haupt-Interface ist unterstützt. Es unterstützt die Banking und Immunation im Moment. Es wird früh im nächsten Jahr veröffentlicht werden. Der nächste Punkt ist, dass Skripting kompliziert ist. Wenn man sich auf das Problem fokussiert, dann muss man die Kommandos verstehen. Man kann das natürlich leicht skripten. Ich habe versucht, eine ganze Menge Paradigmen zu unterstützen, indem man zum Beispiel die Bindings freundlicher macht für die verschiedenen Sprachen, sodass man am Ende wirklich nur Bindings für die spezifische Sprache braucht. Der Grund ist, dass das zu viel Arbeit macht. Dann habe ich einen Tool geschrieben, das heißt Wallabind. Das Transkompiliert ein Interface in verschiedene Sprachen und erzeugt da quasi den Basiskode, den man braucht, Python usw. für diese ganzen verschiedenen Sprachen. Aber es ist leider nicht wirklich stabil, denn es gibt Speicherprobleme, und das ist manchmal schwierig, die Unterschiede alle zu erfassen. Am Ende habe ich dann die Idee gehabt, diese Pipe zu implementieren. Das ist im Wesentlichen eine Pipe, die auf diesen vier Kommandos aufsetzt. Es gibt eine Open-Methode von der API, damit kann man so einen speziellen Transport aufmachen, mit dem man da reden kann. Dann gibt es das CMD-Komando, mit dem man dann Befehl ausführen kann. Da kriegt man das Ergebnis zurück. Dann gibt es eine CMD-J-Variante, da kriegt man dann ein Objekt des Ergebnisses zurück. Dann gibt es die Quid-Methode, das sind die einzigen Methoden, die man braucht, um diese API zu benutzen. Jetzt machen wir einmal einen kleinen Demo dafür. Das ist ein Skript für die Konfiguration-Datei von MIRAI, der MIRAI-Mildware auszulesen. Das ist ein Skript, das ist in Pfeifen geschrieben, es benutzt R2-Pipe und das extrahiert im Wesentlichen die Konfiguration-Datei dieser Bineller-Tei. Man kann das in Pfeifen ausführen, indem man Folgendes macht. Jetzt hat man hier die Konfiguration-Datei. Man kann es auch innerhalb von Radar ausführen. Es ist einfach so aufzurufen oder direkt in der Shell. Wenn man hier in der Shell ist, dann kann man die Datei einfach interpretieren lassen mit diesem Punkt-Operator. Es gibt so viele Beispiele in verschiedenen Programmiersprachen. Das ist die Liste der unterstützten Programmiersprachen für R2-Pipe. Nicht alle Transports werden von allem unterstützt. Damit meine ich, dass man das über HTTP benutzen kann oder auch über TCP oder direkt über eine UNIX-Pipe oder indem einfach das Binary gestartet wird und die Ausgabe sich angeschaut wird. Das funktioniert eben unter Linux und OS X. Das gibt hier in dem Repository von R2-Pipe viele Beispiele, z.B. Node.js. Da gibt es Beispiele, die sind damit enthalten. Es gibt z.B. ein IRC-Bot. Es gibt auch einen Syscall-Emulator, das implementiert im Wesentlichen ein Syscall-Händler in JavaScript. Das kann man ausführen. Dieses HelloWorld-Programm, das ist im Wesentlichen dieser Code. Ich muss NPM erst noch den Installer ausführen. Ich kann das jetzt ändern. Das ist ein Python-Sample. Wir gehen jetzt zum Python-Beispiel, dasselbe in Python. Es wird jetzt hier der Syscall-Händler ausgeführt und er sagt im Wesentlichen, ihr müsst dieses L2-Pipe-Script ausführen, wenn der Syscall ausgeführt wird. Viele Leute denken, der Debugger ist verwirrend. Er ist wunderlich, weil es ein sehr niedrig-leveliger Debugger ist. Der Hauptgrund dafür ist, ich versuche, Quellcode-Debugger nicht zu ersetzen, also GDB und so weiter. Das sind ziemlich gute Quelltext-Debugger, aber ich möchte, dass mein Debugger funktioniert für Programme, wo ich den Sourcecode nicht habe, also den Quelltext nicht habe. Wenn man den Debugger benutzen will, dann wird also quasi das sehr niedrig ausgeführt, also nicht beim Einsprungpunkt, denn manche Dateiformate können Befehle ausführen, bevor der Einsprungpunkt kommt. Und es kann sich auch Änderungen im Speicher ergeben, die nicht auf die Datei geschrieben werden. Und dann beschweren sich Leute, ich habe die Datei im Speicher ausgetauscht, und das ändert sich aber nichts. Und der Grund ist, dass ihr es nicht auf die Fettplatte geschrieben habt. Und wenn man das machen will, dann muss man dieses rarer 2-Tool benutzen. Da werden auch verschiedene Verzeichnisse erstellt, die dann benutzt werden. Also wenn man zum Beispiel ein Skript erstellen will oder so weiter, dann muss das in diesem Verzeichnis liegen. Und ihr könnt dieses Tool benutzen jedes Mal, das ist ganz praktisch, wenn ihr da verschiedene Profile erstellen wollt. Also die grundsätzliche Funktionalität ist, also man kann sich daran das laufende Datei anhängen oder neue starten. Es gibt viele Plugins, die man da damit benutzen kann. Also es gibt einen nativen Debugger. Und es gibt Leute, die ja zum Beispiel für Windows ihren nativen Debugger benutzen. Man kann aber auch GDB oder Winddebug benutzen. Und das sind alles, die kann man über dieses D-Kommando aufrufen, diese verschiedenen Debugger. Und... Also das GDB-Backend funktioniert nicht auf allen Plattformen, vielleicht weil auch GDB ein bisschen schlecht ist in dem Fall. Und das benutzt ASCII-Check-Summen und das ist eine ziemlich schlechte Entscheidung. Und die versuchen bei jeder Plattform, jedes Mal wenn man da bei einer anderen Plattform ist, dann muss man verschiedene Lösungen benutzen, die es gibt, um Gister zu lesen oder zu schreiben und Breakpoints zu setzen usw. Und das ist ziemlich unangenehm. Das heißt, es ist Work-in-Progress und funktioniert hauptsächlich für Intel, also man kann das für Windows oder Linux benutzen. Und wir sind... Für MIPS und so weiter sind wir noch dran am arbeiten. Und es gibt also R2-LLDB, das benutzt dann LLDB und das ist im Wesentlichen ein R2-Pipescript. Und da kann man dann LLDB-Sessions aus Radar starten. Man kann alle möglichen LLDB-Funktionen, die hätten, in Radar benutzen. Und das ist ganz praktisch, wenn man mit Apple-Dingen arbeitet, denn also Apple Watch oder Geräte, dann kann man Radar benutzen, um Binary-Star drin zu debaggen. Und es gibt auch R2-Frida. R2-Frida ist ein Programm, das Bibliotheken dynamisch in die Programme einführt. Und dann kann man seine Skripte in die Binarys einfügen. Und dann kann man einfach unsere Bibliotheken benutzen, um da Code drin auszuführen. Das wird von den Personen geschrieben, die bei mir auch in der Firma arbeitet. Und das funktioniert über viele Plugformen, OS X, iOS, Linux, Android, Windows. Das ist relativ schnell. Und wenn ihr mal über JavaScript nachdenkt und so, dann denkt ihr vielleicht, das ist langsam, aber das ist es nicht, sehr schnell. Und man kann also Debugging macht, innerhalb des Prozesses. Und jetzt machen wir eine ganz schnelle Demut dazu. Jawoll. Also ich habe jetzt hier drüben Node.js ausgeführt und hier auf der anderen Seite starte ich Radar und benutze Frida, um mich an diesem Prozess anzuhängen. Und jetzt holen wir uns mal Informationen mit diesem Backslash-Kommando. Und jetzt sehen wir eine Liste von Kommandos für dieses Frida-Placken. Also hier gibt es eine ganze Menge Informationen über das Binary, über die Dinge, die da exportiert werden. Also wir können jetzt lesen und schreiben den Speicher von diesem Prozess und können das analysieren und uns solche Graphs generieren, die Grafiken bauen. Und das hier sollte funktionieren, aber es funktioniert nicht. Na gut, also was ich jetzt mache ist, ich benutze das DTF-Kommando. Da kann man ein spezifisches Symbol sich angucken und ich benutze einen Formatierungs-String, um diese spezielle Funktion hier zu überschreiben. Also jedes Mal, wenn jetzt hier der Node.js write benutzt, dann wird er hier irgendwie was ausgeben. Und wir können uns dann auch den Backtrace angucken, JavaScript injizieren und so weiter. Also jetzt reden wir kurz über E-Seal. Das ist eine virtuelle Maschine innerhalb von Radar 2. Das ist eine eigene Sprache und das setzt jede Instruktion in einen String um. Wir können uns das angucken hier drin. Also wenn wir Groß O drücken, dann sehen wir hier Strings. Und dieser String repräsentiert, was die Anweisung tut. Also es ist quasi eine zusätzliche Sprache. Wir haben zwei verschiedene Stacks. Und es ist stackbasiert. Und Grund dafür ist, dass es recht einfach ist, Dinge zu lesen und zu schreiben, was eine Instruktion tut. Und man kann die Instruktion einfach anpassen, ohne selbst einen Compiler zu benutzen. Das ist praktisch für Analyse. Es wird auch für Debugging benutzt. Also wenn man einen spezifischen String benutzen will, um zum Beispiel zu definieren, ich möchte gerne das Dinge ausgeführt werden, bis ein bestimmter Wert in einem Register steht oder ein Wert aus einem bestimmten Bereich in einem Register steht. Oder ich möchte identifizieren, ob ein bestimmter Jump ausgeführt wird oder nicht. Oder ich möchte zum Beispiel finden, dass ein bestimmter Bereich im Speicher ein bestimmter Wert enthält. Dann kann ich dafür einfach dieses Tool benutzen. Und das sind ein paar von den Kommandos, die man in dem Emulator benutzen kann. Also es ist im Wesentlichen derselbe wie der Debugger. Also nur, dass wir AE benutzen statt D. Und es gibt auch Unterstützung für Unicorn, aber das ist noch nicht so richtig vollständig. Hier gibt es eine Crackme-Datei. Und die kann man lösen mit diesem Skript hier. Man kann das auch mit R2-Pipe über dieses Skript hier lösen. Das springt im Prinzip zu einem Symbol, das man emulieren will. Dann wird der Coder drin ausgeführt und dann wird das in Strings überführt und dann werden die Register ausgegeben. Also wir machen mal das hier. Und ihr bekommt das Passwort raus und genauso bei der Python Version. Das heißt, was das im Wesentlichen macht ist, diese CheckPasswort-Funktion wird aufgerufen, die ist hier drüben. Und innerhalb dieser Funktion sucht er dann nach dem String-Compare und dann besorgt er sich die Werte der Register. Also wenn man das hier macht, dann kann man zum Beispiel sehen, dass im Debugger können wir einfach den Einsprungpunkt benutzen, ständig ausführen und dann können wir DRR benutzen, um Quid ausbeenden. Wir sind gerade nicht im Debugger. Ich fühe jetzt hier den Einsprungpunkt die ganze Zeit aus und jetzt benutze ich DRR und hole mir die Informationen aller Register, wo die Register hinzeigen und dasselbe kann man auch beim Stack benutzen, um alle Zeiger von den Strings zu bekommen und so weiter. Und viele solche Sachen sind hilfreich und werden auch benutzt. Okay, und jetzt geht es um Exploiting. Also Schwachstellen ausnutzen. Und es gibt so viele Funktionalität, die für die Ausnutzung von Schwachstellen in Radare praktisch ist. Also man kann zum Beispiel Code im Speicher angucken. Also ich springe jetzt gerade, bin gerade im Debugger und jetzt kann ich einfach den Cursor irgendwo hin tun und dann riech ich Groß A und dann patche ich den Code mit einer, zum Beispiel mit diesem hier. Und das ist praktisch in verschiedenen Umgebungen. Also es gibt ein Debugger, statische Analyse und man kann auch Offsets generieren und finden. Und man kann Hip-Analysis machen. Das funktioniert nur in, also Hip-Analysis, das funktioniert nur in Linux, aber in Windows wird es bald funktionieren. Und dann machen wir jetzt eine ganz kurze Demo. Mit dem RA-Rob, das ist ein Frontend für Radar mit Node.js. Und da kann man sich einen Rob-Gadget bauen. Also man hat jetzt hier rechts diese ganzen Rob-Gadgets, die man benutzen kann in der Binär-Datei und die kann man hier hinzufügen und auch entfernen und verschieben, das geht auch Petrack & Drop. Und wenn man das komplett fertig hat, dann kann man einfach auf Debug drücken und dann kriegt man Terminal, wo dann der Rob-Gadget debugged werden kann. Und da startet man dann also hier in der Rückgabelfunktion und jetzt machen wir hier schrittweise, gehen wir durch diese Rob-Gadgets durch. Und jetzt wird es Zeit, fertig zu werden. Nicht eins möchte ich euch gerne noch zeigen. Der Grund, für den ihr Radar 2 benutzen könnt, wenn ihr einen speziellen Exploit habt, den ihr erweitern wollt. Und ich benutze jetzt hier einen Exploit, um einen Neo-Pluck-In zu schreiben. Also das ist ein Linux, das ist ein Monat alt. Also ihr könnt hier für diese Schwachstelle mehr lesen und was ich jetzt einfach nur machen möchte ist, ich möchte Dateien modifizieren, die mir nicht gehören. Also ich kann zum Beispiel ETC Services bearbeiten. Ich habe hier keine, da habe ich keine Berechtigung dafür, aber wenn ich jetzt dieses Dirty Co. Pluck-In benutze, dann kann ich das sehen, aber wenn ich jetzt da zum Beispiel einen String schreibe, dann sehen wir, das ändert sich nicht und der Grund ist, dass das eine Race-Condition ist. Also ich muss das ein paar mal machen. Also ich sage gerade hier, schreibe den mal zehnmal und dann wird das funktionieren. Also ihr könnt jetzt einfach Cat benutzen und jetzt sehen wir hier die modifizierte Dateien. Also man kann diese Pluck-Ins benutzen, um auch Schwachstellen auszunutzen, Fehler auszunutzen, die in dem System vorhanden sind. Dann gibt es leider keine Zeit mehr für Fragen, aber Sergei sagt, es wird ein Meeting geben während des Kongresses. Wo können die dich finden? Weißt du wo man das machen kann? Ja ok, also ich habe nur gerade mit ihm auf Twitter gesprochen. Also danke erstmal für diese großartigen Demonstrationen. Noch mal Applaus bitte.