Volver a actualizaciones
Nuevo releaseAug 10, 2026

r2frida v6.2.0

Radare2 y Frida mejor juntos.

Compartir

r2frida

Radare2 y Frida mejor juntos ci radare2

Descripción

Plugin autocontenido para radare2 que incluye frida y permite instrumentar procesos locales o remotos usando comandos de r2 en lugar de (pero no limitado a) scripts de Frida.

El proyecto radare proporciona un conjunto completo de herramientas para ingeniería inversa, se mantiene activamente y ofrece funcionalidades bien mantenidas, además de extender sus características con otros lenguajes de programación y herramientas.

Frida es un kit de herramientas de instrumentación dinámica que facilita la inspección y manipulación de procesos en ejecución mediante la inyección de tu propio JavaScript y, opcionalmente, también comunicarse con tus scripts.

Características

  • Ejecuta scripts de Frida sin modificar (Usa el comando :.)
  • Ejecuta fragmentos de código en C, Javascript o TypeScript en cualquier proceso
  • Puede adjuntar, generar o lanzar en sistemas locales o remotos
  • Lista secciones, símbolos, exportaciones, protocolos, clases, métodos
  • Busca valores en memoria dentro del agente o desde el anfitrión
  • Reemplaza implementaciones de métodos o crea hooks con comandos cortos
  • Carga librerías y frameworks en el proceso objetivo
  • Soporta interfaces Dalvik, Java, ObjC, Swift y C
  • Manipula descriptores de archivo y variables de entorno
  • Envía señales al proceso, continuar, puntos de interrupción
  • El plugin io de r2frida también es un backend de sistema de archivos fs y debug
  • Automatiza r2 y frida usando r2pipe
  • Lee/Escribe memoria del proceso
  • Llama a funciones, syscalls y fragmentos de código en bruto
  • Conecta al frida-server mediante usb o tcp/ip
  • Enumera aplicaciones y procesos
  • Rastrea registros, argumentos de funciones
  • Probado en x64, arm32 y arm64 para Linux, Windows, macOS, iOS y Android
  • No requiere que frida esté instalado en el anfitrión (no es necesario tener frida-tools)
  • Extiende los comandos de r2frida con plugins que se ejecutan en el agente
  • Cambia permisos de página, parchea código y datos
  • Resuelve símbolos por nombre o dirección y los importa como flags en r2
  • Ejecuta comandos de r2 en el anfitrión desde el agente
  • Usa APIs de r2 y ejecuta comandos de r2 dentro del proceso objetivo remoto.
  • Puntos de interrupción nativos usando la API :db
  • Accede a sistemas de archivos remotos usando la API r_fs.

Instalación

La forma recomendada de instalar r2frida es mediante r2pm:

$ r2pm -ci r2frida

Las compilaciones binarias que no requieren compilación estarán pronto disponibles en r2pm y r2env. Mientras tanto, no dudes en descargar las últimas compilaciones desde la página de lanzamientos.

Compilación

Dependencias

  • radare2
  • pkg-config (no requerido en windows)
  • curl o wget
  • make, gcc
  • npm, nodejs (pronto se eliminará)

En GNU/Debian necesitarás instalar los siguientes paquetes:

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

Instrucciones

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

Windows

  • Instala meson y Visual Studio
  • Descomprime el zip de la última versión de radare2 en el directorio raíz de r2frida
  • Cámbiale el nombre a radare2 (en lugar de radare2-x.y.z)
  • Para hacer que el compilador de VS esté disponible en PATH (preconfigure.bat)
  • Ejecuta configure.bat y luego make.bat

Uso

Para probar, usa r2 frida://0, ya que adjuntarse al pid0 en frida es una sesión especial que se ejecuta en local. Ahora puedes ejecutar el comando :? para obtener la lista de comandos 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: (Use the `%` command to change the environment at runtime)
  R2FRIDA_SAFE_IO=0|1              # Workaround a Frida bug on Android/thumb
  R2FRIDA_DEBUG=0|1                # Used to debug argument parsing behaviour
  R2FRIDA_COMPILER_DISABLE=0|1     # Disable the new frida typescript compiler (`:. foo.ts`)
  R2FRIDA_AGENT_SCRIPT=[file]      # path to file of the r2frida agent

Ejemplos

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

Puedes adjuntar, generar o lanzar cualquier programa por nombre o pid. La siguiente línea se adjuntará al primer proceso llamado rax2 (ejecuta rax2 - en otra terminal para probar esta línea)

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

Usando la ruta absoluta de un binario para generar se generará el proceso:

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

También funciona con argumentos:

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

Para depuración USB de aplicaciones iOS/Android usa estas acciones. Ten en cuenta que spawn se puede reemplazar por launch o attach, y el nombre del proceso puede ser el bundleid o el 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

Comandos

Estos son los comandos más frecuentes, así que debes aprenderlos y añadirles el sufijo ? para obtener ayuda de subcomandos.

:i        # get information of the target (pid, name, home, arch, bits, ..)
.:i*      # import the target process details into local r2
:?        # show all the available commands
:dm       # list maps. Use ':dm|head' and seek to the program base address
:iE       # list the exports of the current binary (seek)
:dt fread # trace the 'fread' function
:dt-*     # delete all traces

Plugins

Los plugins de r2frida se ejecutan en el lado del agente y se registran con la API r2frida.pluginRegister.

Consulta el directorio plugins/ para ver más ejemplos 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

El comando :. funciona como el comando . de r2, pero se ejecuta dentro del agente.

:. a.js  # run script which registers a plugin
:.       # list plugins
:.-test  # unload a plugin by name
:.. a.js # eternalize script (keeps running after detach)

Termux

Si deseas instalar y usar r2frida de forma nativa en Android a través de Termux, hay algunas advertencias con las dependencias de librerías debido a algunas resoluciones de símbolos. La forma de hacerlo funcionar es extendiendo la variable de entorno LD_LIBRARY_PATH para que apunte al directorio del sistema antes del libdir de Termux.

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

Solución de problemas

Asegúrate de usar una versión moderna de r2 (preferiblemente la última versión o git).

Ejecuta r2 -L | grep frida para verificar si el plugin está cargado; si no se imprime nada, usa la variable de entorno R2_DEBUG=1 para obtener algunos mensajes de depuración y encontrar la razón.

Si tienes problemas para compilar r2frida, puedes usar r2env o descargar las compilaciones de lanzamiento desde la página de lanzamientos de GitHub. Ten en cuenta que solo la versión MAJOR.MINOR debe coincidir; es decir, r2-5.7.6 puede cargar cualquier plugin compilado en cualquier versión entre 5.7.0 y 5.7.8.

Diseño

 +---------+
 | radare2 |     The radare2 tool, on top of the rest
 +---------+
      :
 +----------+
 | io_frida |    r2frida io plugin
 +----------+
      :
 +---------+
 |  frida  |     Frida host APIs and logic to interact with target
 +---------+
      :
  +-------+
  |  app  |      Target process instrumented by Frida with Javascript
  +-------+

Créditos

Este plugin ha sido desarrollado por pancake aka Sergi Alvarez (el autor de radare2) para NowSecure.

Me gustaría agradecer a Ole André por escribir y mantener Frida, así como por ser tan amable de corregir errores de forma proactiva y discutir detalles técnicos sobre todo lo necesario para que esta unión funcione.

Reconocimientos.

Categorías