Sortie de radare2 0.9.9 - Almost there

58
8
juin
2015
Sécurité

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

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.

i4004 CPU

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 ?

pocket computer

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 :

PE RELOC

PE RELOC 2

Un exemple de support (basique) de l'architecture CRIS :
Cris anal

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 :

couleurs

Elles sont bien évidement supportées dans les minigraphs :

Coloured minigraph

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.

Graph edge styles

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

decompiler

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…

WinDBG support

Tracing

Il est maintenant possible d'effectuer du tracing dans radare2, les instructions se décalant davantage à chaque utilisation :

tracing

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 !

tracegraph

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

Edge style comparison
Comparaison des deux styles de graphes

R2 3D logo
Le logo de radare2, dans radare2, sous forme de stéréogramme

Mazda
Évidement que radare2 tourne sur les Mazda. Oui, Mazda, les voitures.

Aller plus loin

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.