 Donc, aujourd'hui, pour cette première session, on va parler de Radare. C'est un framework de réversing engineering qui a pas mal d'attention ces dernières années. On l'a même vu sur Mr Robot, la série télévisée. Il a, par contre, une réputation d'être... de ne pas être simple, plutôt compliqué à utiliser. Mais donc, pour régler le problème sur tous ces mythes, nous avons ici Sergi Alvarez, connu aussi sous le nom de Pancake, qui va nous démystifier le produit et tout nous dire sur Radare. Bonjour. Donc, cette présentation est sur la démystification de Radare. Je vais essayer de vous expliquer le produit et les raisons derrière ce titre. Donc, qui je suis, Sergi Alvarez, aka Pancake. Je travaille chez Now Secure. Je fais des recherches sur la sécurité mobile. Je suis aussi auteur de Radare 1 et 2. Donc, et d'autres outils open source. Je fais aussi du codage Bluetooth, X4 des optimisations pour X86, des firmwares, du forenzik, du sysadmin, du web et du développement. Qu'est-ce que Radare? Tout ça, l'outil gratuit open source, la framework, c'est, on a un focus sur la partie portable extensible et expressive. C'était un projet qui a commencé en 2006 pour le fun et on a eu une réécriture complète en 2009 et très peu de contribution depuis 2013. Principalement développé par moi, mais pour des raisons personnelles. J'ai pas énormément avancé ces années. J'ai étendu l'outil à chaque fois que j'ai eu quelques idées. Donc le support de différents types de langages de scripting et différents types de librairies et des API étaient principaux. Il y avait peu de personnes qui compartient CPI jusqu'à 3 ans et il y a beaucoup utilisateurs et maintenant beaucoup de contributeurs. J'ai deux, trois, il y a quelques utilisateurs sur Telegram et IAC et Twitter. Cette année, j'ai organisé le premier congrès à beaucoup de l'outil. C'est la troisième année où nous organisons un summer of code. Donc c'est très actif et il y a beaucoup de gens qui participent. Ça veut dire quoi radar ? C'est raw data recovery, l'occupation de donner boot. J'ai commencé ça pour de la France et pas pour un debugging. Donc ça arrive avec un data X. Ça permet d'assembler des assemblées. On peut créer des plugins pour chaque fonctionnalité. Ça supporte beaucoup de fichiers, de formats. On essaie de tester tous nos outils pour trouver des bugs dans la personne. C'est principalement de l'année statique, mais il y a aussi de la possibilité pour faire. Ça peut faire calculer de l'entropie, calculer des haches, charger des différences entre différents fichiers. Il y a aussi un émulateur pour API, pour faire des rapports pour les plugins, des émulateurs comme Unicorn. Il y a aussi des fonctionnalités pour exploiter. Donc générateur de payload, etc. Il y a aussi des scriptings. Il y a tant d'extensions et de plugins que les gens utilisent, que je ne veux pas non plus mettre tout ça dans le cœur. Donc on a une façon simple pour tout le monde d'installer ces plugins. Qu'est-ce qu'on peut inspecter ? Ce sont des exemples de ce que font les gens avec. Donc il y a les Pokémon ROM pour le Game Boy, il y a Street Fighter, iWatch, DNA, etc. Mais attendez, on va essayer de parler sur le mit. On va expliquer les mythes. On va expliquer ce que pensent les gens à propos du projet. Beaucoup de gens pensent que Radar n'est pas stable. Ils pensent que c'est difficile, qu'il y a beaucoup de commandes, que c'est difficile de s'en souvenir, que c'est buggy, que ça ne peut pas décompiler, que le debugger est cassé, enfin déconne. Mais on va essayer de voir qui d'entre vous connaît Radar. À peu près tout le monde a regardé le site web avant d'utiliser. Combien de personnes l'utilisent ? OK, la moitié. La moitié des gens qui sont là. C'est pas mal. Donc le premier mit, c'est que c'est difficile. Parlons-en. Ça c'est à propos de la... Quand on ne connaît rien, et le point où on est prêt à faire quelque chose, c'est un graphe. En fait, c'est difficile d'apprendre, mais on peut aussi comparer cette courbe avec l'utilisation de guides ou d'autres choses. Il y a beaucoup de commandes, mais il y a une certaine logique derrière. Donc si on comprend la logique, ça permet d'apprendre par soi-même. Donc si vous comprenez le guide, il y a un certain nombre de commandes. On peut mélanger les commandes pour recréer des nouvelles fonctionnalités. On peut généralement haquer le code. On peut modifier et changer quelque chose. On peut écrire des plugins. On peut écrire des scripts. On peut écrire de nouveaux langages de scripts pour étendre les fonctionnalités. On peut ajouter des outils, baser des outils là-dessus. Donc parlons de la difficulté. Les commandes sont des mnemoniques. Elles sont construits de lettres. Chaque lettre veut dire quelque chose. Elles sont structurées de façon que la première lettre c'est la raison pour la commande. P, c'est pour imprimer. La deuxième lettre, c'est que voulez-vous imprimer des assemblées en octal, etc. C'est beaucoup à un X au niveau des conceptuelles. On peut utiliser des pipes. On peut utiliser des rédactions. On peut utiliser grep. Tout ça, c'est dans l'outil en le même. On peut l'ajouter dans le shell, mais on peut simplement envoyer le binaire sur une plateforme et on aura un shell complet dedans. On n'a pas besoin de rajouter toutes ces données. C'est tout dedans. Ça essaie d'être orthogonal. Ça veut dire qu'on peut mélanger différentes commandes. Faisons une démo rapide. Quelles commandes sont les commandes de base? On a besoin de ce souvenir de 5 commandes. Après ça, c'est bon. On peut commencer à ajouter le modifier, mais les commandes de base sont celles-ci. On peut ouvrir un fichier. On peut chercher n'importe quel endroit. On va zoomer un peu. On peut chercher, par exemple, un premier, imprimer des assemblées. On peut faire un retour de recherche. On peut utiliser aussi un point d'interrogation à la fin de la commande pour ficher les options. On peut faire des recherches relatives comme ça. L'autre commande c'est P pour imprimer. On peut faire un print de différents formats. On peut imprimer des instructions de Jason. L'autre commande c'est W pour attendre. Je vais activer le cache. Si je veux écrire quelque chose ici, il faut que je active le cache. Je peux écrire, par exemple, les premières instructions. On peut écrire des experts, des assemblées, des fichiers, des informations. Et la dernière commande c'est le Q, pour quitter. On peut voir qu'il y a des modificateurs, des options. Si on fait un disassembling comme ça, on peut ajouter des commandes et faire des greppes. On peut aussi compter le nombre d'entrées et si on a une longue liste, il va nous demander si on veut vraiment afficher la liste. Sinon on peut trier en plusieurs affichages. On verra plus de commandes après ça. Le radar est structuré en différents modèles. On a la librairie, avec toutes les dépendances internes. On le voit ici sur cette topologie. On a l'air cor, on a l'air utile, la librairie de base. On a la librairie de base. Si vous voulez faire un port sur notre plateforme, il faut juste changer quelques petites choses, celles qui ne sont pas portables. On peut aussi le faire avec des plugins, donc c'est relativement facile à apporter. Toutes ces librairies permettent d'échanger des plugins. Il y a aussi ceux qui contiennent des répertoires. On va voir ce qu'il y a dans les librairies. Les bibliothèques. C'est tous les modules. Il y a un autre mythe qui est invisable pour la forensique, pour la recherche légale. En fait, ça a été le premier but du projet. Il y a certaines fonctions qui sont très bien pour la forensique, mais il y a d'autres outils qui sont utilisés uniquement pour la forensique, donc qui sont probablement plus pratiques pour la forensique. Mais on peut faire la forensique avec Radar. On peut aussi, par exemple, ouvrir des disques. On peut ouvrir des... On peut ouvrir différentes... des ROMs. On peut ouvrir un R2K Linux qui permet de mapper la mémoire du kernel. On peut monter des fichiers pour essayer de comprendre les partitions système. On peut aussi en faire ça en groupe. J'ai fixé un salon de bug dans le... là-dedans. C'est aussi facile pour les fichiers connus. On peut regarder le contenu d'un dump mémoire pour examiner la mémoire. Donc on peut calculer des checksum par increments ou par blocs. Si vous avez un Md5 sur chaque giga, vous pouvez comparer avec différents dumps et comparer quelles parties du fichier ont été changées. Vous pouvez aussi changer les plugins pour les entrées sorties. Comme je disais, toutes les entrées et sorties, c'est une table. Donc ça permet de faire les plugins pour à peu près tout. Il y a des plugins sur jazip, pour les images jazip. On peut charger et utiliser les plugins avec cette commande. Et ça, c'est la liste des plugins qui peuvent être utilisés pour ouvrir des fichiers locaux ou distants. Le flag, mis au grand L, permet de les assembler. Les plugins d'achamblages de la complage, on n'a pas et pour Rabin 2, qui permettent de lister les plugins utilisés pour les systèmes des fichiers supportés par le projet. Faisons la première démonstration. Nous avons un fichier, donc ça ressemble à rien. Il n'y a rien intéressant. On peut regarder le calcul RCP d'entropie. Il y a des zéro, mais l'entropie est relativement haute. Donc on va essayer de trouver un système de fichier. Ça cherche, c'est magique, c'est pour trouver le type. Il semblerait que ça avait trouvé quelque chose à set offset. Donc on va aller là-bas. On écrit le fichier. Nous avons créé un nouveau fichier avec le contenu qui commande offset auquel on était. On va l'ouvrir. C'est un jazip. On peut l'ouvrir avec comme fichier jazip. Maintenant on va voir quelque chose dedans. On peut voir que c'est un fichier FAT. On va monter la partition. On va monter ça en route avec FAT à offset 0. On peut monter différents offsets dans le fichier. Ensuite on va faire MS qui est le shell à l'intérieur du système fichier monté. On peut voir le contenu du fichier. On peut voir ce qu'il y a d'un pin. On va récupérer ce fichier. On peut l'ouvrir ensuite. On voit que c'est un Linux ELF. Un programme ALS standard. Il y a pas mal de fonctionnalités qui sont pratiques pour la forensic. La prochaine chose c'est que l'analyse est lente. L'analyse est très lente. C'est bloquant parce que ça prend du temps. Il faut récupérer toutes les informations avant de faire quelque chose utile. On peut faire ça en arrière-plan mais ça prend du temps. Il faudrait mettre beaucoup de mutex dans la logique de l'analyse. Ça le ralentirait encore. Ça marche pas si bien que ça pour les gros binaire. C'est pas forcément capable de trouver toutes les fonctions. Mais il y a une règle pour trouver plus de A après d'autres A. On va faire encore plus d'analyse. Plus on fait de A, ça permet d'avoir beaucoup d'eau. Les gens ajoutent toujours des A pour avoir plus d'analyse. Il y a beaucoup de configurations pour cette commande. Là on a écrit un post de blog pour expliquer toutes ces choses-là. C'est compte avec moi si vous voulez de l'aide. Mais attendez un petit peu. Mais je pense que ça va être bientôt fini. Mais si l'analyse ne fonctionne plus et ça peut être vraiment très lent. Il faut trouver une autre chose pour l'analyse. Il faut qu'il y ait une autre chose pour l'analyse. Il faut trouver une autre chose pour résoudre le problème. 80% des problèmes peuvent être résolus. Au moins mes problèmes. Je peux simplement analyser 10% ou une partie du problème. Récupé les informations dont je ferai besoin au lieu d'analyser tout le binaire. Généralement j'ajuste des références pour cette chaine des caractères. Des références pour une fonctionnalité. Ensuite on analyse 5, 10 fonctions. Après ça on n'a pas vraiment besoin de plus d'informations. On peut juste utiliser la commande pour récupérer juste les informations qu'on a besoin. Du coup ça va beaucoup plus vite puisqu'il y a moins de contenu. On s'améliore régulièrement. On récupère des fixes et on récupère des analyses plus rapides. Il faut aussi comprendre la logique derrière toutes ces commandes et ces options. Mais on va voir quelques-unes. Donc voilà la première démonstration. On va ouvrir un Hello World. On va faire une analyse. On va lancer l'analyse. La librairie est assez grande. Le binaire est super grand. Parce qu'il est statique. Ça a pris 8 secondes. Après ça, on peut rechercher le String. On voit qu'il y a une référence. On clique sur On peut ouvrir la référence. On peut voir que la chaîne de référencé est loin des référencé dans ce caractère. Ça nous a pris 8 secondes. C'était un exemple simple. On va faire la même chose en utilisant ce script. Il va ouvrir la chaîne de caractère Hello. Il va rechercher ces caractères. On définit une taille d'AIO pour accélérer la recherche. On exécute le script. Ça nous a pris 2 secondes, presque 3 secondes. Et il nous a identifié le même offset. C'est un exemple simple. Il y a des différences si vous avez un binaire plus grand. Parfois, les références ne sont pas si claires. On peut rechercher la chaîne de caractère Hello. On voit que les références ne sont pas si claires. On peut rechercher la chaîne de caractère Hello. On peut rechercher la chaîne de caractère Hello World. On voit qu'il n'y a pas de références parce qu'on n'a rien analysé. On va regarder les options d'analyse. On va lancer toutes les options d'analyse. On voit qu'il y a une référence ici. Si on essaie d'analyser d'une manière plus simple, on voit qu'il n'y a pas de références. C'est parce que dans les architectures ARM, vous avez besoin d'émuler pour pouvoir récupérer les références. On voit que le printf nous récupère la fonction d'analyse. On voit que le printf nous récupère la fonction d'analyse. Nous récupère la fonction d'émulation. On utilise l'émulation et on voit que toutes les instructions sont émulées et on récupère les informations. On a les références pour les... Et on trouve la référence vers la chaîne Hello World. Il y a la commande AAE qui est l'analyse en utilisant l'humilation. Par exemple en MIPS, c'est très pratique. Il y a d'autres possibilités pour récupérer les... On peut aussi utiliser les références avec AAB en utilisant des pointeurs sur les données ou des pointeurs vers la même utilisation. Il y a d'autres sous commande. Il y a d'autres choses que ce n'est pas documenté, mais ce n'est pas vrai. C'est documenté en C. Il y a à l'aide en ligne dans chaque commande. On peut récupérer l'aide en ligne dans chaque browser ou dans Facebook. Il y a un book que j'ai écrit dessus et un matching pour R2. Il y a beaucoup de présentations, des slides, des posts de blogs, des tutoriels sur YouTube. Donc ce n'est pas vraiment pas documenté. Des fois, c'est vrai que c'est difficile de trouver l'aide, mais il y a toujours YHC et Telegram. Vous pouvez demander là-bas et ça peut aider. Ensuite, on va parler de la compilation. Radar 2 n'est pas capable de décompiler. Ça peut faire des choses qui peuvent ressembler à la décompilation, mais qui ne sont pas d'avril à décompilation. C'est difficile. C'est pas quelque chose de facile, donc on délègue à d'autres outils. Neterman a écrit le plugin pour RedTech. C'est un service en ligne de décompilation. Ça a été écrit en Node.js et ça leur télécharge sur leur saveur. Ils ont une API pour récupérer le désassemblé. Donc il y a des commandes et du code qui est surbloqué dans le shell. J'ai RadEco qui est pour le décompiler, mais c'est encore en progrès. Ça ne fonctionne pas encore depuis l'essai, mais ça ne résoud pas de vrais problèmes de nos jours. Mais d'ici de quelques années, ça devrait être une option. Il y a aussi Boomerang qui a été supporté par Radar 1. Je pense que Boomerang n'est plus maintenu, donc il n'y a pas beaucoup d'intérêt pour le supporter dans Radar 2. Mais on peut le porter des scripts dans Radar 1 ou Radar 2. La semaine dernière, j'ai porté le décompiler Snowman qui supporte différentes architectures. On peut faire une démonstration rapide. Donc on reviendra quand ça aura décompiler. Donc parlons des assemblés. Des assemblés, c'est un des bons points de Radar, puisqu'il y a beaucoup de possibilités pour des assemblés. Vous pouvez coloriser les instructions en dépendant les types d'instructions. Ça permet de chercher les points mathématiques, différencier les parts du code qui sont encryptées ou qui font des traps. Il y a aussi le support pour analyser les arguments et les variables. On peut voir où les variables sont utilisées dans les assemblés. Sinon ça va aussi permettre de voir EAX plus 3 et ça va être plus facile pour les humains à lire. Ça va permettre d'avoir un truc qui ressemble plus à du C. Donc on a EAX de Snow et là... ah non, ça marche pas. Parlons des assemblés. Hier, ça marchait. Comme vous pouvez voir, ce qu'on a des assemblés, les instructions sont mises en forme. On peut changer le schéma de couleur. On peut aussi mettre, ajouter l'ASM ou l'activer. Il tapote. Donc ça va permettre d'avoir ce genre de choses. Et que PDS, c'est un résumé de la fonction. Ça va permettre d'analyser la fonction et ensuite on fait PDS. Et on voit toutes les références des streams et d'appel à cette fonction. On peut en lire un résumé de ce que fait la fonction. On peut aussi utiliser PDC qui ressemble à une vraie décompilation. Et donc on voit l'assemblage avec un petit peu de logique pour recréer des blocs. On peut mettre des commentaires en bas, à droite. Et toutes ces choses sont interactives dans ce mode en utilisant le grand V. On peut se déplacer dans le code, voir où le saut va dérire. Sinon, il y a un graph en ASCII art de toutes les fonctions pour voir les appels. Si vous êtes dans ce... On peut plier, déplier, sauter juste dans l'assemblée. Au point où vous êtes dans le graph ou à la revenir sur le graph. Donc il n'y a pas d'infusion d'utilisation, mais c'est relativement pratique quand même. D'autres personnes disent que ce n'est pas stable. Et la raison principale, c'est parce qu'ils utilisent une vieille version. Puisqu'ils n'utilisent pas la dernière release ou git. Donc la stabilité dépend du nombre de crashes qu'on a et les changements au niveau des commandes et des APIs. Donc maintenant, on a une version 1.x. La plupart des commandes et des APIs ne vont pas changer, donc ils sont plutôt stables. Les APIs en C sont plutôt stables également. Mais pour garder la compatibilité à long terme, il peut y avoir des changements additionnels. Donc on peut faire quelque chose comme ça. Si on tapis, on a les informations sur les librairies. Si on tapis, on peut récupérer les informations sur les sections. Et si on tapis.js pour JSON, on peut récupérer les informations. Et on peut changer la fichage et pour avoir les informations sous format JSON. C'est intéressant pour pouvoir parser les informations entre les différents formats automatiquement. C'est beaucoup plus rapide que d'utiliser FFI, ou avec d'autres langages comme du Python dans lequel il faut parser dans différents langages, ce qui peut prendre beaucoup de temps. La plupart des problèmes qu'on m'a communiqué sont résolues, donc regardez la dernière version sur Git. Les bugs de sécurité sont en général fixés en moins d'une journée, donc une à deux heures en général. Donc si vous trouvez un problème, j'essaye de vous montrer comment le résoudre. J'essaye d'éduquer la communauté pour être plus responsable et pouvoir... pouvoir mieux comprendre où sont les problèmes. C'est aussi intéressant que si vous postiez que vous ne m'informiez sur la version que vous utilisez. Donc nous essayons de faire une release tous les six semaines. C'est quelque chose que j'ai décidé après avoir vu comment Rust fonctionne. Avoir un mois c'est très productif et tous les six mois c'est un peu plus aléatoire. Donc on ne sait pas exactement quand la prochaine release va être et donc c'est une surprise. Et le truc c'est qu'il y a quelques années je faisais une release une ou deux fois par an. Ce n'était pas super bien pour le projet, principalement parce qu'il y avait 200 000 comites ouvrées. Il y avait beaucoup de tests, ce n'était pas tout testé à l'époque, maintenant c'est résolu. Par utilisant des temps plus courts on teste tout de suite et on teste plus fréquemment. Et du coup c'est plus difficile de faire un guide-clone et d'avoir une version qui ne fonctionne pas. Mais il y a aussi une version débian et ils sont relativement stables et ça veut dire qu'ils ne mettent pas régulièrement un jour. Et la version actuelle dans la version débian stable c'est il y a cinq ans. Donc si on fait un changement il y a six ans on va voir combien de comites il y a eu depuis cinq ans. Donc je vois comment ne pas utiliser des packages débiens. Dans mon réponse il y a des packages, donc utiliser plutôt ceux-là. Ou utiliser ceux de sites qui sont un petit peu plus mis à jour, même s'ils sont vieux. Comme je le disais auparavant j'essaie d'utiliser des jeux, j'essaie d'utiliser du RDD. Après qu'on fait une régression on fait un test et comme ça on est certain que ça ne va pas avoir de régression. On fait du TDD Test Driven Development, on écrit le test avant d'écrire le code. Donc à chaque fois que le code est déjà là il faut écrire le test après coup. Et on fait un refactoring continu pour améliorer la stabilité et la portabilité du code, éviter les bugs, etc. Et supporter et tester tout. Donc ça prend à peu près un quart d'heure pour tout tester entre temps. Il y a une demi-heure pour SX. Donc les Windows de tests sont pratiquement... On essaie de faire du fuzzing dans le process de développement. Donc pour chaque release il y a des gens qui font du fuzzing avec le command line, avec les différentes formes de fichiers. On utilise Valgrind, Hassan, Clang Analyzer pour trouver des problèmes. Pour trouver les parties qui sont plus buguées et pour résoudre les bugs. C'est important parce qu'il y a tant de contributions et beaucoup de gens qui commencent juste à coder. Et donc on essaie de suivre quelques standards, il y a un style de code et il y a beaucoup de choses à la communauté. Il y a une autre complète, ce qui est que ce n'est pas écrit en Python. C, c'est vrai que ce n'est pas parfait. Il y a beaucoup d'erreurs, mais Python n'est pas parfait. Peut-être qu'il y a un langage qui va pouvoir remplacer C, maybe Rust, or Swift, ou je ne sais pas. Je pense que Rust, c'est celui qui fonctionne le mieux avec la philosophie. Mais si vous utilisez Python, il y a au moins trois différents bindings, donc différents transports. On va l'expliquer plus tard. On peut écrire les plugins en Python déjà. La raison pour ne pas utiliser un langage stp dynamiquement, c'est que ça permet de raccourcir les temps de compilation. Il y a tellement d'outils utilisables pour le C. Il s'est portable sur plus de plateformes. C'est plus rapide, c'est natif. C'est plus petit en termes de mémoire. Il n'y a pas tant que ça dans les binaires. Donc il suffit de tout linker statiquement et tout va bien. On peut aussi transpiler tout vers JavaScript. C'est suffisant pour 98% de mes problèmes. Pour le reste, vous pouvez utiliser un langage de script comme vous voulez. Parlons de l'interface graphique. Le gros problème, c'est qu'il n'y en a pas. Terminal, ça fait peur. Les gens ont peur du terminal. Ils s'embêtisent et la souris. Ils essaient de cliquer. Le problème pour R2, c'est qu'il n'y en a pas tant que ça. Il y a un mode visuel découpé. Il y a différentes modes web. Il y a ça qui utilise jQuery modal et qui est très bien pour le desktop. Il y a aussi blesser, qui est nod et blest. Qui interface très bien avec Windows, avec des fenêtres. Il y a aussi Gradar qui a été écrit. C'est un terminal avec un petit peu de GTK autour. Il y a quelques boutons et des menus. On peut simplement chercher dans le menu. Il y avait une interface complète qui a été écrite en bala. Ça ne marchait pas très bien, mais ça a été abandonné. Je pense que personne n'ait intéressé par ça. Je n'ai jamais fait de réalisme, mais ça existe. Il y a SinonBoken, qui est en Python GTK. Ce n'est pas vraiment maintenu. Ça doit marcher avec la version, mais j'ai ajouté de nouvelles fonctionnalités. Ça ne va pas marcher. Sinon, il y a UnDigo qui écrit une interface pour .NET. Ça ne fonctionne que pour Windows. Les débalances dépendent d'exploreurs XZ. Les MFC, pour l'API, ne marchent pas sous Linux. Ce n'est pas portable sous Linux ou SX, mais peut-être qu'un jour. Il y a quelques jours à mentionner. Il a fallu que je le ajoute dans un slide. Il est entre à écrire une interface en Qtif 5. Sinon une vraie interface utilisateur. L'auteur de Boken a été en train de travailler depuis un an et demi en Qtif. C'est plus et plus qui ressemble à ça. C'est l'interface principale. Ça supporte le débegage et tout ce genre de choses. Il va faire une release en prochain. Parlons maintenant du scripting. C'est un sujet un peu compliqué. Si vous avez des problèmes, vous voulez comprendre les commandes et vous voulez savoir ce que vous avez fait. J'ai voulu rendre le langage plus facile à comprendre. Les APIs sont compliquées, donc j'ai rédigé un outil qui nous permet de lire dans différentes langues et différents types de librairies. Mais ce n'est pas sable du tout, puisqu'il y a encore des problèmes de mémoire. Des fois, il a du mal à gérer les références. Et à la fin, j'ai eu l'idée d'écrire R2Pype, qui est un pipe qui est construit sur ces quatre commandes. L'API donne une commande Open qui m'aide à ouvrir un couche de transport spécifique qui permet de lancer une commande radar. C'est la même chose avec la version JSON, qui sort du JSON en fond comme retour. Et sinon, il y a pour quitter. Il y a juste une seule commande, une seule méthode dont il faut se soutenir pour utiliser l'API. Faisons une démonstration rapide. C'est un script pour récupérer le fichier de configuration de Mirai. C'est un bot net. C'est le script en piton, en utilisant R2Pype. Je vais simplement extraire la fichier de configuration du binaire. Et je vais l'utiliser comme piton. Je le lance comme ça. Et voici le fichier de configuration. On peut l'utiliser à partir de radar. On a le même résultat. Ou du shell. On peut interpréter le fichier, l'utiliser sur le point. Et ça le lance. Beaucoup d'exemples dans différents langages. Donc ça, c'est la liste des langages que l'on supporte. Donc, tout ne supporte pas tous les transports. Mais R2Pype peut être utilisé par HTTP. Il peut être utilisé par TCP. On peut l'utiliser avec des pipes. Envoyer directement dans un pipe et rentrer dedans. Ça fonctionne sur toutes les plateformes. Linux, Windows, OSX. Voilà. Il y a des exemples dans le répertoire. Donc si vous allez dans le repos, vous allez voir les exemples. Voici l'exemple pour Node.js. Et on peut voir l'exemple, il y a un bot IRC. Il y a aussi un syscall, un emulator syscall qui implémente un handler de syscall en javascript. On peut voir ce hello world qui est simplement ce code. Et il faut que je lance un intérieur de la... un intérieur de NTPM. Ah, ça marche pas. Ah, je peux le changer. Le Python, l'exemple en Python, c'est la même chose en Python. Donc, nous voyons l'en de la syscall et le disk qui... vous pouvez utiliser un emulator pour ré-mettez le code et tout va bien. Sinon, le debugger est confus, qu'il est un peu bizarre, parce que c'est un debugger de bas niveau. Et la raison principale, c'est que je n'essaie pas de remplacer les debuggers source. Il y a gdb, ldb et différents debuggers de source, mais... et principalement pour des binaires, donc on n'a pas le code source. Donc, si vous commencez à debugger avec d'autres outils, vous allez avoir vous êtes dans le système et pas dans le point d'entrée. La raison, c'est qu'il y a certains systèmes de fichiers ne vont pas pouvoir l'utiliser ou des choses qui vont être exécutées avant le point d'entrée, ou qui n'ont plus d'un point d'entrée. Et il y a aussi des changes en mémoire, des changements de mémoire qui ne vont pas être appliqués sur le disque. Et j'ai patché... le binaire en mémoire, mais on patch... en mémoire et pas le binaire lui-même. Si vous voulez créer un environnement, il faut utiliser RRN2 qui est... qui crée un profil qui est... donc il va créer un profil avec le user ID, avec le change route, avec tous les arguments de la commande. Si vous voulez changer les entrées et les sorties, si vous voulez avoir une socket qui va écouter sur un port spécifique, vous pouvez créer ce profil ces pratiques pour certaines choses. Donc les bases du debugger, vous pouvez spawner, vous pouvez attacher, vous pouvez... il y a des plugins. Comme je le disais auparavant, il y a des plugins pour beaucoup de choses. Là, c'est un... il y a plus d'un debugger natif. Il y a un debugger pour Windows. On peut attacher avec JDB. On peut attacher à WinDBG. On a tous les debuggers avec la RTD. On peut faire en local ou en distant. Il y a aussi DX qui permet d'injecter du code de changer l'état. Le backend de JDB ne fonctionne pas sur toutes les plateformes, parce que le protocole JDB est un peu pourri. Il y a du XML. C'est une très mauvaise décision. Ils essaient de réimplementer les choses pour chaque plateforme. Quand on essaie de connecter sur une nouvelle plateforme, il faut utiliser une solution différente pour écrire les liens, les registres ou la mémoire, ou mettre des grade points. Donc, ça marche. Ça permet d'utiliser des debuggers, les noyaux linux, par exemple. Sinon, il y a R2LLDB. C'est un projet que j'ai écrit pour Nosecure. C'est un script qui est à l'intérieur de LLDB et ça va lancer un script picketon. Et on peut utiliser toutes les fonctions d'écrire et de lire dans la mémoire avec Radar2. C'est un shell. Et c'est pratique si vous travaillez avec des machins Apple, comme Apple Watch ou iPhone, vous pouvez utiliser cet outil pour débugger vos binaires. Sinon, R2 Frida c'est un traceur dynamique, une bibliothèque avec un interprèteur d'or. Et on pouvait utiliser vos scripts ou utiliser cette bibliothèque. Ce projet est écrit par Ulandry, qui travaille aussi dans ma compagnie. Ça fonctionne sur beaucoup de plateformes. OSX, iOS, Windows, Linux. C'est relativement rapide. On est en train de penser avec JavaScript. Et on peut penser excellent, c'est relativement vite. Ça permet l'intervection à l'intérieur du process. On peut débugger directement le process. On va passer à la démo. J'ai 2 terminaux. J'ai mon JS d'un côté. Là, j'ai la liste des commandes d'un point de vue. J'ai la liste des commandes du plugin Frida. On peut avoir des informations sur les binaires. On peut avoir des informations sur les exports. Petit plantage. Là, on voit le processus. On peut le modifier comme on veut. On peut aussi l'analyser. Ça devrait marcher. Bon, ça ne marche pas. Ce que je vais faire maintenant, c'est que je vais utiliser la commande DTF qui nous permet de tracer des symboles spécifiques. On utilise des strings pour utiliser des chaînes de caractère pour lancer la fonction. À chaque fois qu'on a que l'on trouve le résultat, on va voir l'output ici. On peut aussi faire des bugtraces de cette manière-là. On va parler des îles. C'est une VM qui vient avec R2. Ça transforme toutes les instructions en chaînes de caractère. On voit ici la chaîne de caractère. Cette chaîne de caractère représente ce que fait la fonction. Ça supporte un langage qui est bâché sur une pile. C'est un peu comme force. Les instructions de vous-même sont utilisées pas pour l'émulation mais pour l'émulation. Ça permet de spécifier une chaîne spécifique. Je veux continuer l'exécution avec une valeur qui a changé. Ou alors identifier quand un saut spécifique va être exécuté ou pas. Ou chercher des endroits dans la mémoire. Trouver une certaine région de mémoire qui va contenir quelque chose spécifique c'est parfait pour ça. Certaines des commandes sont utilisées pour l'émulation. C'est la même chose que pour les debug. Utilise Ae au lieu de D. Il y a aussi un support pour Unicorn mais ce n'est pas aussi complet que pour Aesile. Voici Cragmi. Voici le script. On peut utiliser en faisant ce script R2Pypes. Donc chercher un symbole que vous voulez édumuler. Ajouter le code dedans. Et ensuite stopper au moment où vous comparez les deux chaînes des caractères. Et regarder les valeurs du registre. Voici le mot de passe. Et ça fonctionne de la même façon pour Python. Ce qu'il fait c'est chercher la fonction de check password. Et à l'intérieur de la fonction il va aller chercher une comparaison de chaînes des caractères. Et ensuite regarder la valeur des registres. Si vous faites ça vous allez voir par exemple dans le debugger vous pouvez continuer l'exécution à partir d'un point d'entrée et utiliser DRR pour on n'est pas dans le debugger. Donc continuons à partir du point d'entrée. On va lâcher les informations sur les registres et où est-ce qu'ils pointent. On peut faire la même chose dans la stack dans la pile pour récupérer tous les pointeurs sur des chaînes des caractères. Voilà. Il y a beaucoup de choses qui sont utiles à partir de là. Par rapport à l'exploitation ce qui est mon slide final il y a vraiment beaucoup de fonctionnalités qu'on peut utiliser et on peut patcher le code en mémoire avec une fonction comme ceci. Voilà je suis dans le debugger, il faut que je sorte. Donc je peux mettre le curseur où je veux et je peux taper A et A majuscule et insérer les informations. Donc ça peut être intéressant les environnements spécifiques. On a des fonctionnalités intéressantes comme récupérer des... des différents patteurs nos différentes informations dans un output avant de les extraire. Donc voilà un exemple avec Radar2 qui va vous permettre d'extraire d'extraire des informations et de les afficher dans on a tous les gadgets wrap dans le côté gauche on peut ajouter des objets ou les retirer les déplacer de haut en bas. Donc une fois qu'on a préparé ça on peut simplement débugger et donc on a le terminal qui est prêt pour débugger le ROP et donc à l'intérieur du terminal après on peut sélectionner les objets qu'on veut débugger. Et pour terminer je vais vous montrer une des raisons pour laquelle vous pouvez utiliser Radar2 pour des exploits comment on peut l'utiliser Donc ça c'est un Je ne sais pas si vous connaissez Dirty Co mais c'est assez drôle donc ce que ça nous permet de faire c'est modifier des fichiers par exemple on va dans ETC service donc on voit qu'on n'a pas l'autorisation mais si j'utilise le Dirty Cow le plugin Dirty Cow je peux voir et si j'écris une chaîne de caractère vous voyez que ça ne change pas donc il faut que j'écris plusieurs fois pour que ce soit visible et pour que je puisse patcher les binaires donc on peut faire juste un 4 et récupérer la chaîne de caractère qu'on a modifié donc on peut utiliser AIO plugin ou tout autre type d'AIO pour faire ces modifications donc je suis désolé il n'y a pas le temps pour des questions mais Sergi a dit qu'il allait essayer d'arranger un petit meeting ici pendant le congrès ou peut-on le trouver si c'est un n'importe quel endroit où je peux rencontrer des gens donc moi je me suis connecté à lui je vous propose de vous connecter à Louis sur Twitter et de lui demander vous pouvez le trouver merci d'applaudir