Radare2, déjà évoqué sur LinuxFR.org (cf Sortie de radare2 0.9.6), vient de sortir en version 0.9.8. Radare est un cadriciel complet pour jouer avec analyser des fichiers binaires: assembleurs, désassembleurs, moteurs d'analyse, …
Bref, c'est complet et touffu. Et cette nouvelle mouture apporte son lot de bonheur !
Sommaire
- Chiffres
- Nouvelles plates-formes
- Nouvelles architectures
- Un meilleur débogueur
- Intégration de SDB
- Capstone
- Qualité logicielle
- DWARF
- ESIL
- Exploitation
- Graphes en ASCII art
- RSoC
- Intégration et bindings
- Documentation et publicité
- Analyse inforensique
- R2Pipe et JSON
- Bonus
Chiffres
En termes de chiffres, il s'agit de :
- plus de 2500 commits ;
- plus de 120 nouveaux idlers sur #radare (soit plus de 300% d'augmentation) ;
- environ 60 contributeurs ;
- 13 thèmes de couleur ;
- 8 mois de gestation ;
- 1 grand chef ;
- une homepage ;
- un numéro de version : 0.9.8 ;
- une bande son par neuroflip !
Il est bien sûr possible d'aller éplucher le changelog détaillé à la main, mais c'est plus sympa de lire un billet avec les améliorations et nouveautés alléchantes :
Nouvelles plates-formes
r2-0.9.8 est maintenant compilable pour Android L, à savoir deux nouvelles architectures, mips64 et aarch64. La compilation croisée pour les appareils tournant sous iOS étant maintenant supportée, plus besoin de compiler nativement sur une machine jailbreakée. Les utilisateurs d'Haiku et de Windows 7 seront ravis d'apprendre qu'ils ne sont pas en reste, et que leurs plates-formes sont nativement supportées également.
Nouvelles architectures
Plusieurs architectures ont été ajoutées :
- un meilleur support de Java. Ok, ça n'est pas une nouvelle architecture, mais son support a été grandement amélioré !
- cr16 et msp430, principalement utilisées dans l'embarqué ;
- il est maintenant possible de charger (et de modifier !) des ROM de Nintendo DS ;
- tms320 (c55x, c55x+, et plus encore à venir), utilisée dans certain BIOS ;
- m68k, ce qui a permis entre autres choses de reverser des morceaux de Street Fighter ;
- Spc700, le chips chargé du son dans la Super NES ;
- Propeller ;
- et toutes celles apportées par Capstone qui n'étaient pas encore supportées, comme SystemZ.
Un meilleur débogueur
Radare2 possède à nouveau un débogueur natif pour Windows (uniquement en 32 bit pour l'instant), supportant les points d'arrêts matériel ! Beaucoup de choses se sont passées du coté de l'intégration avec GDB, qui fonctionne maintenant sur X86, MIPS et ARM pour qemu et gdb-server.
Intégration de SDB
SDB est un système clef-valeur (un peu comme memcached) en cours d'intégration dans radare2. Il permet de simplifier le code, et d'améliorer les performances de manière générale. Il est possible de jouer avec, grâce à la commande k
.
Capstone
Le projet utilise maintenant capstone pour désassembler plusieurs architectures, ce qui a pour effet de simplifier la maintenance et d’apporter un support complet de choses un peu tordues alambiquées, comme AVX ou les instructions FPU.
Qualité logicielle
Grâce à coverity, beaucoup de bugs ont été corrigés. L'utilisation d'ASAN, Valgrind, Jenkins et d'une suite de tests complète a également tiré la qualité vers le haut.
Beaucoup de warnings et de corruptions mémoire ont été détectées et corrigées grâce à l'usage de différents fuzzers, comme (radamsa, melkor, nightmare, zzuf, …), ce qui permet maintenant à radare2 d'être bien plus robuste sur des fichiers exotiques.
DWARF
Un des contributeurs a passé beaucoup de temps à ajouter le support des données DWARF, permettant maintenant à tout le monde de déboguer ses binaires ELF (presque) sans avoir à lire de l'assembleur !
ESIL
ESIL signifie Evaluable Strings Intermedate Language. Il s'agit d'une représentation de chaque opcode, dans le but d'effectuer une émulation complète, pour améliorer l'analyse. Avec ESIL, il est maintenant possible de :
- déboguer des applications écrites en Brainfuck ;
- partiellement émuler les architectures suivantes : Gameboy, X86, ARM et MIPS ;
- définir des points d’arrêt conditionnels ;
- utiliser des expressions de recherche complexes ;
- implémenter des moteurs d'analyse indépendants des instructions bas-niveau sous-jacentes.
Exploitation
Radare2 vise également à être utile aux auteurs d'exploits ; il est donc maintenant possible de :
- analyser des adresses spécifiques avec la commande
ai
; - déréférencer et manipuler les résultats de registres ou de la mémoire avec
drr/pxr
, à la PEDA ; - recherche des gadgets ROP avec
/R
- détecter certaines protections logicielles avec
i
; - générer des patterns de De Bruijn ;
- utiliser la variable
search.in
pour spécifier où mener la recherche, comme par exemple, la pile, le tas, ou les pages exécutables.
Graphes en ASCII art
Radare2 n'ayant pas (encore) de GUI officielle, la (fameuse) vue en graphe d'IDA a été implémentée en ASCII art ! Il est possible de la faire apparaître avec V
en mode visuel, en plaçant le curseur sur une fonction déjà analysée. Cerise sur le gâteau, c'est une visualisation interactive, et utilisable en mode debug ! Les callgraphs sont disponibles avec VVV
. Évidement, les graphes de type Graphviz, HTML5 et JSON sont toujours là, mais ne sont plus utilisés par défaut.
Pour l'occasion, le mode visuel a été grandement amélioré pour fournir une meilleure gestion du curseur, un navigateur des références croisées avec x
et X
ainsi que le support de la molette de souris.
RSoC
Comme le projet n'a pas été accepté par Google pour un GSoC, il a lancé son propre Summer of Code, le RSoC, qui a porté ses fruits : de nouveaux contributeurs, plus de fonctionnalités, de tests et d'utilisateurs :
Support de patrons
Skia a fait du beau travail en implémentant le support de patrons à la 010Editor. Il est maintenant possible, avec r2 -nn
d'analyser les en-têtes de fichiers avec pf.
, pxa
et autres commandes associées.
Support de FLIRT et de YARA
jfrankowski a lui aussi apporté sa pierre à l’édifice en améliorant le support de yara dans radare2, ainsi qu'en ajoutant la possibilité d'utiliser des signatures de type FLIRT ! Actuellement, radare2 n'est pas capable de créer ces signatures, donc, si vous cherchez quoi implémenter pour une première contribution, vous savez quoi faire ;)
PDB support
inisider a implémenté une bibliothèque indépendante pour gérer le format PDB, puis l'a intégrée dans radare2. C'est un peu l'équivalent des informations de débug DWARF, mais pour les binaires Windows.
Intégration et bindings
Le script d'importation d'IDA vers radare2 a été grandement amélioré. Duktape est maintenant supporté, ce qui permet d'écrire des programmes pouvant s'interfacer avec radare2 en JavaScript, et même pourquoi pas de les faire tourner sur du NodeJS. Ceci vient s'ajouter aux bindings C, Python et Lua déjà existants.
Documentation et publicité
Un des reproches les plus couramment faits à radare2 est son manque de documentation et de didacticiels. Nous sommes en train d'y remédier, que ce soit avec le radare2 book, un blog, ainsi qu'en donnant des conférences et des workshops.
Analyse inforensique
Le support de libmagic
a été amélioré à tel point que radare2 peut maintenant remplacer certaines fonctionnalités de binwalk, par exemple l'analyse des firmwares de routeurs. Les commandes permettant la recherche des données ont également été retravaillées, facilitant la recherche de données complexes. Si vous aimez jouer avec des gros ensembles de données, vous allez aimer la commander rabin2 -zzz
qui permet de lister sur la sortie standard toutes les chaînes de texte trouvées dans un fichier, sans faire de copie en mémoire.
R2Pipe et JSON
Depuis cette version, il est possible d'utiliser une version simple des bindings : r2pipe, qui se contente en fait de recevoir des commandes radare2 d'un coté, et de sortir le résultat de l'autre, au lieu de forcer le développeur à appeler les fonctions une par une. Vu que (presque) toutes les commandes peuvent sortir du JSON pour peu qu'on leur ajoute un j
à la fin, il est facile d'implémenter des interfaces et des modules (surtout en JavaScript).
Bonus
Comme les contributeurs de radare2 sont des petits malins, ils ont également :
- ajouté une version ASCII du jeu 2048 ;
- ajouté une tripotée de thèmes ;
- coloré l'aide intégrée (
?
) ; - amélioré le moteur d'analyse.
Aller plus loin
- Sources (135 clics)
- Bindings (48 clics)
- SDB (28 clics)
- Dépôt git (116 clics)
- Blog (91 clics)
- Site officiel (681 clics)
- Billet de sortie original (65 clics)
# RSoC
Posté par Thom (site web personnel) . Évalué à 3.
Comment a marché votre RsoC ?
La réalité, c'est ce qui continue d'exister quand on cesse d'y croire - Philip K. Dick
[^] # Re: RSoC
Posté par jvoisin (site web personnel) . Évalué à 3.
De manière un peu chaotique, mais il a finalement été productif.
Il y a un billet de blog qui vient de sortir résumant tout ça.
# IDA
Posté par Prae . Évalué à 6.
Je vois qu'il y a déjà un prototype d'interface graphique "Sonare". En espérant que cela se rapproche du concept IDA - avec les breakpoints graphiques et visu de l'output. Cela serait vraiment kiffant et me ferait abandonner IDA définitivement.
Des petites questions:
[^] # Re: IDA
Posté par claudex . Évalué à 8.
Sachant que la dépêche dit :
Et que la page de téléchargement montre un logo Windows cliquable. Je pense effectivement que tu as dû passer à côté.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: IDA
Posté par Prae . Évalué à -10.
Tu peux être encore un peu plus méprisant ?
[^] # Re: IDA
Posté par jvoisin (site web personnel) . Évalué à 3.
[^] # Re: IDA
Posté par Prae . Évalué à 2.
Merci pour les réponses :)
Concernant la partie "émulation" (même partielle), comment cela se passe t-il ? Comment radare arrive-t'il a interpréter puis a lancer du pure binaire Windows ? Il se base sur une couche émulation à la libwine ou bien il a son propre process ? Je demande car je suis étonné (en bien) qu'on puisse exécuter du code Windows sur une autre plateforme.
[^] # Re: IDA
Posté par jvoisin (site web personnel) . Évalué à 3.
Radare2 utilise ESIL pour l'émulation, qui est agnostique de toutes plate-formes, vu qu'il utilise uniquement les opcodes : Il n'est donc évidement pas possible de descendre dans les API.
# Support des patrons
Posté par programLyrique . Évalué à 2.
Où peut-on trouver plus d'informations sur les patrons (struct templates dans la liste des tâches de RSoc ) ?
J'ai jeté un coup d’œil au blog de Skia mais ce n'était pas très éclairant.
Radare m'intéresse pour analyser des formats propriétaires, plutôt que des binaires exécutables, et les patrons vont être très utiles.
[^] # Re: Support des patrons
Posté par Maijin (site web personnel) . Évalué à 5.
o/ J'ai déjà créé quelques exemples qui sont pré-installés dans r2 (elf, pe). Pour obtenir de l'aide sur cette partie tu peux utiliser cette doc à propos de pf.
N'hésites pas à passer sur #radare @ Freenode si tu as besoin d'aide ou si tu as des questions supplémentaires ;-)
# Typo dans la section "Analyse inforensique" ?
Posté par rdg . Évalué à 2.
"qui permet de lister sur la sortie standard toutes les chaînes de tests trouvées dans un fichier"
--> Ce ne serait pas plutôt "chaînes de texte" ?
Ou alors je ne comprends pas :-)
[^] # Re: Typo dans la section "Analyse inforensique" ?
Posté par Benoît Sibaud (site web personnel) . Évalué à 3.
Corrigé, merci.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.