Retour aux mises à jour
New releaseAug 10, 2026

r2frida v6.2.0

Radare2 et Frida : mieux ensemble.

Partager

r2frida

Radare2 et Frida, encore meilleurs ensemble ci radare2

Description

Plugin autonome pour radare2 qui embarque frida et permet d'instrumenter des processus locaux ou distants en utilisant les commandes r2 à la place (mais pas seulement) des scripts Frida.

Le projet radare fournit une chaîne d'outils complète pour le rétro-ingénierie, il est activement maintenu et offre des fonctionnalités bien entretenues, tout en permettant d'étendre ses capacités avec d'autres langages de programmation et outils.

Frida est une boîte à outils d'instrumentation dynamique qui facilite l'inspection et la manipulation de processus en cours d'exécution en injectant votre propre JavaScript, et optionnellement de communiquer avec vos scripts.

Fonctionnalités

  • Exécuter des scripts Frida non modifiés (Utilisez la commande :.)
  • Exécuter des extraits en C, Javascript ou TypeScript dans n'importe quel processus
  • Peut attacher, lancer ou exécuter sur des systèmes locaux ou distants
  • Lister les sections, symboles, exports, protocoles, classes, méthodes
  • Rechercher des valeurs en mémoire dans l'agent ou depuis l'hôte
  • Remplacer les implémentations de méthodes ou créer des hooks avec des commandes courtes
  • Charger des bibliothèques et frameworks dans le processus cible
  • Prend en charge les interfaces Dalvik, Java, ObjC, Swift et C
  • Manipuler les descripteurs de fichier et les variables d'environnement
  • Envoyer des signaux au processus, continuer, points d'arrêt
  • Le plugin io r2frida est également un backend de système de fichiers fs et de débogage debug
  • Automatiser r2 et frida avec r2pipe
  • Lire/Écrire la mémoire du processus
  • Appeler des fonctions, des appels système et des extraits de code bruts
  • Se connecter à frida-server via USB ou TCP/IP
  • Énumérer les applications et les processus
  • Tracer les registres, les arguments des fonctions
  • Testé sur x64, arm32 et arm64 pour Linux, Windows, macOS, iOS et Android
  • Ne nécessite pas que frida soit installé sur l'hôte (pas besoin de frida-tools)
  • Étendre les commandes r2frida avec des plugins qui s'exécutent dans l'agent
  • Modifier les permissions des pages, patcher le code et les données
  • Résoudre les symboles par nom ou adresse et les importer comme flags dans r2
  • Exécuter des commandes r2 sur l'hôte depuis l'agent
  • Utiliser les API r2 et exécuter des commandes r2 dans le processus cible distant.
  • Points d'arrêt natifs utilisant l'API :db
  • Accéder aux systèmes de fichiers distants en utilisant l'API r_fs.

Installation

La méthode recommandée pour installer r2frida est via r2pm :

$ r2pm -ci r2frida

Les builds binaires qui ne nécessitent pas de compilation seront bientôt pris en charge dans r2pm et r2env. En attendant, n'hésitez pas à télécharger les dernières builds depuis la page des releases.

Compilation

Dépendances

  • radare2
  • pkg-config (non requis sous Windows)
  • curl ou wget
  • make, gcc
  • npm, nodejs (sera bientôt supprimé)

Sous GNU/Debian, vous devrez installer les paquets suivants :

$ sudo apt install -y make gcc libzip-dev nodejs npm curl pkg-config git

Instructions

$ git clone https://github.com/nowsecure/r2frida.git
$ cd r2frida
$ make
$ make user-install

Windows

  • Installer meson et Visual Studio
  • Décompressez la dernière archive zip de radare2 dans le répertoire racine de r2frida
  • Renommez-le en radare2 (au lieu de radare2-x.y.z)
  • Pour rendre le compilateur VS disponible dans PATH (preconfigure.bat)
  • Exécutez configure.bat puis make.bat

Utilisation

Pour tester, utilisez r2 frida://0, car s'attacher au pid0 dans frida est une session spéciale qui s'exécute en local. Vous pouvez alors exécuter la commande :? pour obtenir la liste des commandes disponibles.

$ r2 'frida://?'
r2 frida://[action]/[link]/[device]/[target]
* action = list | apps | attach | spawn | launch
* link   = local | usb | remote host:port
* device = '' | host:port | device-id
* target = pid | appname | process-name | program-in-path | abspath
Local:
* frida://?                        # show this help
* frida://                         # list local processes
* frida://0                        # attach to frida-helper (no spawn needed)
* frida:///usr/local/bin/rax2      # abspath to spawn
* frida://rax2                     # same as above, considering local/bin is in PATH
* frida://spawn/$(program)         # spawn a new process in the current system
* frida://attach/(target)          # attach to target PID in current host
USB:
* frida://list/usb//               # list processes in the first usb device
* frida://apps/usb//               # list apps in the first usb device
* frida://attach/usb//12345        # attach to given pid in the first usb device
* frida://spawn/usb//appname       # spawn an app in the first resolved usb device
* frida://launch/usb//appname      # spawn+resume an app in the first usb device
Remote:
* frida://attach/remote/10.0.0.3:9999/558 # attach to pid 558 on tcp remote frida-server
Environment: (Utilisez la commande `%` pour modifier l'environnement à l'exécution)
  R2FRIDA_SAFE_IO=0|1              # Contourner un bug de Frida sur Android/thumb
  R2FRIDA_DEBUG=0|1                # Utilisé pour déboguer le comportement d'analyse des arguments
  R2FRIDA_COMPILER_DISABLE=0|1     # Désactiver le nouveau compilateur typescript de frida (`:. foo.ts`)
  R2FRIDA_AGENT_SCRIPT=[file]      # chemin vers le fichier de l'agent r2frida

Exemples

$ r2 frida://0     # same as frida -p 0, connects to a local session

Vous pouvez attacher, lancer ou exécuter n'importe quel programme par nom ou pid. La ligne suivante s'attachera au premier processus nommé rax2 (exécutez rax2 - dans un autre terminal pour tester cette ligne)

$ r2 frida://rax2  # attach to the first process named `rax2`
$ r2 frida://1234  # attach to the given pid

Utiliser le chemin absolu d'un binaire pour le lancer lancera le processus :

$ r2 frida:///bin/ls
[0x00000000]> :dc        # continue the execution of the target program

Fonctionne aussi avec des arguments :

$ r2 frida://"/bin/ls -al"

Pour le débogage USB d'applications iOS/Android, utilisez ces actions. Notez que spawn peut être remplacé par launch ou attach, et le nom du processus peut être le bundleid ou le PID.

$ r2 frida://spawn/usb/         # enumerate devices
$ r2 frida://spawn/usb//        # enumerate apps in the first iOS device
$ r2 frida://spawn/usb//Weather # Run the weather app

Commandes

Voici les commandes les plus fréquentes, vous devez donc les apprendre et les suffixer avec ? pour obtenir l'aide des sous-commandes.

:i        # obtenir des informations sur la cible (pid, nom, home, arch, bits, ..)
.:i*      # importer les détails du processus cible dans r2 local
:?        # afficher toutes les commandes disponibles
:dm       # lister les cartes. Utilisez ':dm|head' et cherchez l'adresse de base du programme
:iE       # lister les exports du binaire courant (seek)
:dt fread # tracer la fonction 'fread'
:dt-*     # supprimer toutes les traces

Plugins

Les plugins r2frida s'exécutent côté agent et sont enregistrés avec l'API r2frida.pluginRegister.

Voir le répertoire plugins/ pour d'autres exemples de scripts de plugins.

[0x00000000]> cat example.js
r2frida.pluginRegister('test', function(name) {
  if (name === 'test') {
    return function(args) {
      console.log('Hello Args From r2frida plugin', args);
      return 'Things Happen';
    }
  }
});
[0x00000000]> :. example.js   # load the plugin script

La commande :. fonctionne comme la commande . de r2, mais s'exécute dans l'agent.

:. a.js  # exécute un script qui enregistre un plugin
:.       # lister les plugins
:.-test  # décharger un plugin par nom
:.. a.js # éternaliser le script (continue à s'exécuter après le détachement)

Termux

Si vous souhaitez installer et utiliser r2frida nativement sur Android via Termux, il y a quelques mises en garde concernant les dépendances de bibliothèques en raison de certaines résolutions de symboles. La façon de faire fonctionner cela est d'étendre la variable d'environnement LD_LIBRARY_PATH pour pointer vers le répertoire système avant le libdir de termux.

$ LD_LIBRARY_PATH=/system/lib64:$LD_LIBRARY_PATH r2 frida://...

Dépannage

Assurez-vous d'utiliser une version moderne de r2 (de préférence la dernière version ou git).

Exécutez r2 -L | grep frida pour vérifier si le plugin est chargé, si rien n'est affiché, utilisez la variable d'environnement R2_DEBUG=1 pour obtenir des messages de débogage et trouver la raison.

Si vous rencontrez des problèmes pour compiler r2frida, vous pouvez utiliser r2env ou récupérer les builds de release depuis la page des releases GitHub, gardez à l'esprit que seule la version MAJEURE.MINEURE doit correspondre, par exemple r2-5.7.6 peut charger tout plugin compilé sur n'importe quelle version entre 5.7.0 et 5.7.8.

Conception

 +---------+
 | radare2 |     L'outil radare2, au-dessus du reste
 +---------+
      :
 +----------+
 | io_frida |    Plugin io r2frida
 +----------+
      :
 +---------+
 |  frida  |     API hôte de Frida et logique pour interagir avec la cible
 +---------+
      :
  +-------+
  |  app  |      Processus cible instrumenté par Frida avec Javascript
  +-------+

Crédits

Ce plugin a été développé par pancake alias Sergi Alvarez (l'auteur de radare2) pour NowSecure.

Je tiens à remercier Ole André d'avoir écrit et maintenu Frida, ainsi que d'avoir été si gentil de corriger proactivement les bugs et de discuter des détails techniques sur tout ce qui est nécessaire pour faire fonctionner cette union.

Kudos

Catégories