Vous l'attendiez, elle est enfin arrivée, la nouvelle version de radare2, la 0.9.9, nom de code "Almost there"!
Radare est un framework complet d'analyse et de désassemblage de binaires. Plutôt que de vous inviter à lire chaque commit, voici un résumé des nouveautés dans la seconde partie.
Sommaire
- Quelques nombres
- Console
- Nouvelles architectures
- Amélioration du moteur d'analyse
- Changements au niveau des commandes
- Corrections de bugs
- ESIL
- Recherche
- Graphes ASCII
- Enseignement
- Débogueur
- Web interface
- r2pipe
- Misc
- Captures d'écran bonus
Quelques nombres
Grâce à plus de 50 contributeurs sur environ 1700 commits, voici ce qui a changé :
$ git checkout 0.9.9 && git diff 0.9.8 --shortstat
839 files changed, 156490 insertions(+), 18885 deletions(-)
Console
La meilleure manière d'utiliser radare2, c'est à travers son shell. C'est pourquoi l'équipe a passé beaucoup de temps à la polir. Les utilisateurs sous Windows seront ravis d'apprendre que radare2 fonctionne maintenant sans soucis sur leur plateforme, et atteint presque la parité en matière de fonctionnalités par rapport aux vrais systèmes d'exploitation, avec d'incroyables nouveautés comme le support des touches fléchées, ou encore du ^c
!
Grâce à un contributeur fan de couleurs, radare2 supporte maintenant la norme Truecolor, vous permettant de définir un thème visuel en choisissant parmi 16,777,216 couleurs!
Parmi la pile d'améliorations, on peut également trouver deux nouvelles variables, scr.wheelspeed et scr.responsive qui améliorent la navigation.
Il est de notoriété publique que la courbe d'apprentissage de radare2 est affreuse un peu raide. La bonne nouvelle, c'est que l'équipe a vérifié que chaque commande avait sa documentation (il suffit d'ajouter ?
à la fin d'une commande pour avoir des informations à son sujet). Fini les commandes énigmatiques !
Nouvelles architectures
i4004
Revenons, si vous le voulez bien, en 1971. À cette époque, Intel sortait le premier microprocesseur programmable, sous le nom de i4004.
Processeur ultra-rapide, du haut de ses 740kHz, capable d'adresser directement 640 bytes de RAM, c'était une technologie de pointe à son époque, et maintenant, 34 ans plus tard, radare2 le supporte enfin.
LH5801
Maintenant que nous avons remonté le temps, connaissez-vous le LH5801 ?
C'est un processeur 8bit qui fut utilisé dans le premier ordinateur de poche !
z80
Le précédent désassembleur z80 était sous licence GPL, avait des commentaires en allemand (comme LibreOffice et systemd !). Le nouveau est plus propre, plus correct, 75% plus petit, et sous licence LGPL ! Que demander de plus.
Pebble
Si vous avez une montre Pebble, il est maintenant possible de déboguer ses applications avec radare2.
Amélioration du moteur d'analyse
Les méthodes d'analyse de type nop-skip, de détection de variables locales, d'utilisation du PLT ELF et du mode Thumb sont maintenant supportées sur les architectures ARM et ARM64. Les drapeaux locaux et les labels de fonctions sont également activés par défaut pour l’intégralité des architectures.
Les informations de relocation de type PE sont maintenant affichées de manière plus claire :
Un exemple de support (basique) de l'architecture :
En parlant d'analyse, saurez-vous trouver les améliorations sur l'architecture Dalvik ?
Changements au niveau des commandes
Quelques commandes ont changé, non pas pour le plaisir d’embêter les utilisateurs, mais au contraire pour les rendre plus faciles à appréhender. Si vous remarquez un changement désagréable dans vos habitudes, n'hésitez pas à ouvrir un rapport de bug à ce sujet.
Il y a également eu quelques ajouts, surtout au niveau des sous-commandes de type p, saurez-vous les trouver ? ;)
Corrections de bugs
La suite de tests du projet devient de plus en plus importante, mais ça ne l’empêche pas de se lancer avec diligence sur chaque nouveau commit, évitant les régressions, auparavant si nombreuses. Le nombre de défauts remontés par coverity a été réduit de plus de 75%, abaissant leur nombre à moins de 150.
On peut également noter que des bugs remontés par shellcheck, cppcheck, valgrind et compagnie ont également été exterminés !
ESIL
Comment oublier ESIL, le langage de représentation intermédiaire du projet.
Un contributeur féru de gameboy s'est acharné à en développer les spécifications, et à vouloir émuler complètement sa plateforme préférée avec; pendant que d'autres ont préféré se concentrer sur l'architecture x86, MIPS ou encore ARM. L'émulation et l'analyse avancée se rapprochent de plus en plus !
Deux nouveau contributeurs (qui sont maintenant des étudiants GSoC sous l'ombrelle du projet) ont repectivement ajouté, pour leur première contribution, un transpileur ESIL vers REIL, ainsi qu'une implémentation d'ESIL pour l'architecture 8051. Par mal pour une première contribution.
Recherche
Le moteur de recherche de gadgets ROP supporte maintenant les expressions régulières ! Il convient de noter que le caractère de séparation n'est plus ,
mais ;
, ce qui force l'utilisation de guillemets doubles autour de la commande, ;
étant normalement utilisé pour séparer les commandes dans radare2.
Certaines personnes utilisent radare2 au lieu de binwalk pour lancer libmagic sur des fichiers de format inconnu. C'est pourquoi la commande /m
a été optimisée en vitesse et efficacité.
Graphes ASCII
Radare2 supporte depuis quelques temps les graphes ASCII dans la console; avec cette nouvelle mouture, les couleurs font leur apparition :
Elles sont bien évidement supportées dans les minigraphs :
Un nouveau rendu des arêtes de graphes a fait son apparition, et comme l'équipe aimait les deux, plutôt que de trancher, elles ont été intégrées ensemble, et il est possible de passer de l'une à l'autre avec la touche e
.
Enseignement
Radare2 n'est pas uniquement utilisé pour faire de la retro-ingénierie sur des architectures étranges, ou écrire des exploits tordus, il sert également à enseigner l'informatique !
Radare2 vient avec une base de plus de 250 fortunes, et bien que les développeurs soient convaincus que toutes sont drôles, certaines sont de mauvais goût, voire franchement inappropriées. C'est pourquoi l'option cfg.fortunetype
a été introduit. Il permet de filtrer les fortunes selon trois critères (qui peuvent se combiner) : tips, nsfw et fun. Elle devrait mettre fin aux moments de gêne et d’embarras durant les présentations ;)
Tout le monde ne peut pas se targuer d'être un expert dans d'obscures architectures exotiques, c'est pourquoi radare2 a une option asm.pseudo
, permettant d'afficher les instructions dans une représentation plus évidente.
Il est également possible d'essayer le proto-pre-alpha décompilateur à l'aide de la commande pdc
Débogueur
WinDBG
Un contributeur patient a ajouté le support de WinDBG, le débogueur ring-0 de Windows. Ce qui signifie qu'il est maintenant non seulement possible de tritouiller des drivers avec radare2, mais également des machines virtuelles ! Imaginez, arrêter l’exécution d'une machine Windows, modifier des instructions, et reprendre l'execution pas-à-pas, depuis radare2…
Tracing
Il est maintenant possible d'effectuer du tracing dans radare2, les instructions se décalant davantage à chaque utilisation :
Web interface
L'interface web de radare2 supporte maintenant:
- une minimap, à la IDA
- des graphes interactifs
- encore plus de menus contextuels
- un support des projets
- une vue hexadécimale
- une édition de types primitifs
- un renommage des variables
- un support des debuggers
- du tracing
Le tout, à une vitesse folle !
r2pipe
Comme le développement de radare2 avance à bon train, au lieu d'utiliser des bindings traditionnels, la méthode recommandée pour appeler radare2 depuis un autre langage que le C est d'utiliser r2pipe, qui est grosso-modo un wrapper autour du shell.
En parlant de bindings, saviez-vous qu'en ajoutant j
à chaque commande, radare2 retournera les informations sous forme de JSON ? Si vous vous amusez à parser les sorties de radare2 à la main au lieu d'utiliser le JSON, vous risquez de passer un mauvais quart d'heure.
Actuellement, nous supportons Python (2 et 3), Go et NodeJS; mais aussi D, C#, Java, Ruby, Perl, vala, NewList, Shellscript, Rust, …
Les packages pour r2pipe sont disponibles via pip
pour Python, gem
pour Ruby et npm
pour Node.js.
Il s'agit d'une simple interface permettant d'envoyer des commandes r2 à travers un pipe, une connection tcp ou http, et de recevoir le résultat sous forme de string, ou comme évoqué précédemment, de JSON. Il est intéressant de noter qu'il est également possible d’appeler des scripts r2pipe directement depuis de shell de radare2, grâce à la commande .
, un peu comme dans bash.
Misc
La plupart des développeurs de radare2 utilisent vim, mais certains utilisent emacs, c'est pourquoi il est maintenant possible d'utiliser les raccourcis vim et emacs dans radare2!
Le projet possède (encore) un nouvel assembleur x86, plus efficace, plus court, et plus joli !
Build
Le temps de build a été significativement réduit (près de 30% sur Windows !); c'est pourquoi il ne faut maintenant plus que 3m37s pour compiler la version git de radare2 sur un UbuntuPhone.
TV
Saviez-vous que radare2 a été aperçu sur une chaîne de télévision nationale (espagnole) grâce à Gabriel Gonzalez d'IOActive.
À propos, si vous utilisez radare2, n'hésitez pas à vous signaler ;)
Captures d'écran bonus
Comparaison des deux styles de graphes
Le logo de radare2, dans radare2, sous forme de stéréogramme
Évidement que radare2 tourne sur les Mazda. Oui, Mazda, les voitures.
Aller plus loin
- La nouvelle originale (302 clics)
- Le site officiel (529 clics)
- Le changelog détaillé (131 clics)
# présentation radare2 : dommage ...
Posté par christophe brocas (site web personnel) . Évalué à 4.
Merci Julien pour la présentation de cette version.
Radare2 n'a jamais été présenté en détail aux RMLL (track Sécu).
Avis à toi pour l'an prochain :-)
[^] # Re: présentation radare2 : dommage ...
Posté par jvoisin (site web personnel) . Évalué à 1.
En voila une bonne idée ! Je fais passer le mot, histoire de rattraper cet oubli pour l'année prochaine ;)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.