Sortie de radare 0.9.8

Posté par (page perso) . Édité par Christophe Guilloux, Benoît Sibaud, palm123 et ZeroHeure. Modéré par NeoX. Licence CC by-sa
Tags :
76
15
nov.
2014
Science

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 !
theme

Sommaire

Chiffres

En termes de chiffres, il s'agit de :

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.
SDB

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 !
DWARF

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 :
ESIL

  • 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. Exploitation

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.
Graphes

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.
  • # RSoC

    Posté par (page perso) . É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 (page perso) . É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 . É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.

    Sonare

    Des petites questions:

    • Est-il possible d'émuler - durant le désassemblage/running - du Win32@x86 sous Linux ? (via libwine par exemple) (en gros, pouvoir désassembler du code de logiciel Windows sous Linux, cela évite d'avoir tout l'environnement lourdingue Windows)
    • Cas de dernier recours: Y-a t'il un support sous Windows de Radare ? (je n'ai pas vu de support sous Windows, peut-être que je suis passé devant)
    • [^] # Re: IDA

      Posté par (page perso) . Évalué à 8.

      Cas de dernier recours: Y-a t'il un support sous Windows de Radare ? (je n'ai pas vu de support sous Windows, peut-être que je suis passé devant)

      Sachant que la dépêche dit :

      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.

      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 . Évalué à -10.

        Tu peux être encore un peu plus méprisant ?

    • [^] # Re: IDA

      Posté par (page perso) . Évalué à 3.

      • Oui, il est possible de triturer du binaire Windows avec radare2, et même d'émuler (partiellement) certaines parties.
      • Oui, il tourne nativement sous Windows :)
      • [^] # Re: IDA

        Posté par . É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 (page perso) . É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 . É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 (page perso) . É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 . É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 :-)

Suivre le flux des commentaires

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