Torna agli aggiornamenti
New releaseAug 10, 2026

r2frida v6.2.0

Radare2 e Frida meglio insieme.

Condividi

r2frida

Radare2 e Frida meglio insieme ci radare2

Descrizione

Plugin autonomo per radare2 che include frida e permette di strumentare processi locali o remoti usando comandi r2 (ma non solo) al posto degli script Frida.

Il progetto radare fornisce una toolchain completa per il reverse engineering, è mantenuto attivamente e offre funzionalità ben consolidate, estendendo le sue caratteristiche con altri linguaggi di programmazione e strumenti.

Frida è un toolkit di strumentazione dinamica che semplifica l'ispezione e la manipolazione di processi in esecuzione, iniettando il tuo JavaScript e, opzionalmente, comunicando con i tuoi script.

Funzionalità

  • Esecuzione di script Frida non modificati (usa il comando :.)
  • Esecuzione di snippet in C, JavaScript o TypeScript in qualsiasi processo
  • Possibilità di attaccare, spawnare o lanciare processi in sistemi locali o remoti
  • Elenco di sezioni, simboli, esportazioni, protocolli, classi, metodi
  • Ricerca di valori in memoria dall'agente o dall'host
  • Sostituzione di implementazioni di metodi o creazione di hook con comandi brevi
  • Caricamento di librerie e framework nel processo target
  • Supporto per interfacce Dalvik, Java, ObjC, Swift e C
  • Manipolazione di descrittori di file e variabili d'ambiente
  • Invio di segnali al processo, continuazione, breakpoint
  • Il plugin IO di r2frida è anche un backend fs (filesystem) e debug
  • Automazione di r2 e frida tramite r2pipe
  • Lettura/scrittura della memoria di processo
  • Chiamata a funzioni, syscall e snippet di codice raw
  • Connessione a frida-server via USB o TCP/IP
  • Enumerazione di app e processi
  • Tracciamento di registri, argomenti di funzioni
  • Testato su x64, arm32 e arm64 per Linux, Windows, macOS, iOS e Android
  • Non richiede frida installato nell'host (nessuna necessità di frida-tools)
  • Estensione dei comandi r2frida con plugin che girano nell'agente
  • Modifica dei permessi delle pagine, patching di codice e dati
  • Risoluzione di simboli per nome o indirizzo e loro importazione come flag in r2
  • Esecuzione di comandi r2 nell'host dall'agente
  • Utilizzo delle API di r2 ed esecuzione di comandi r2 all'interno del processo target remoto
  • Breakpoint nativi tramite l'API :db
  • Accesso a filesystem remoti tramite l'API r_fs

Installazione

Il metodo consigliato per installare r2frida è tramite r2pm:

$ r2pm -ci r2frida

Le build binarie che non richiedono compilazione saranno presto supportate in r2pm e r2env. Nel frattempo, sentiti libero di scaricare le ultime build dalla pagina delle Release.

Compilazione

Dipendenze

  • radare2
  • pkg-config (non richiesto su Windows)
  • curl o wget
  • make, gcc
  • npm, nodejs (sarà presto rimosso)

Su GNU/Debian dovrai installare i seguenti pacchetti:

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

Istruzioni

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

Windows

  • Installa meson e Visual Studio
  • Decomprimi l'ultimo zip di radare2 nella directory principale di r2frida
  • Rinominalo in radare2 (invece di radare2-x.y.z)
  • Per rendere disponibile il compilatore VS nel PATH (preconfigure.bat)
  • Esegui configure.bat e poi make.bat

Utilizzo

Per test, usa r2 frida://0, poiché collegarsi al pid0 in frida è una sessione speciale che gira in locale. Ora puoi eseguire il comando :? per ottenere l'elenco dei comandi disponibili.

$ 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://?                        # mostra questo aiuto
* frida://                         # elenca i processi locali
* frida://0                        # collega a frida-helper (nessuno spawn necessario)
* frida:///usr/local/bin/rax2      # percorso assoluto per spawn
* frida://rax2                     # come sopra, considerando che local/bin è nel PATH
* frida://spawn/$(program)         # spawna un nuovo processo nel sistema corrente
* frida://attach/(target)          # collega al PID target nell'host corrente
USB:
* frida://list/usb//               # elenca i processi nel primo dispositivo USB
* frida://apps/usb//               # elenca le app nel primo dispositivo USB
* frida://attach/usb//12345        # collega al PID indicato nel primo dispositivo USB
* frida://spawn/usb//appname       # spawna un'app nel primo dispositivo USB trovato
* frida://launch/usb//appname      # spawna + riprende un'app nel primo dispositivo USB
Remoto:
* frida://attach/remote/10.0.0.3:9999/558 # collega al PID 558 su frida-server remoto TCP
Ambiente: (usa il comando `%` per cambiare l'ambiente a runtime)
  R2FRIDA_SAFE_IO=0|1              # Workaround per un bug di Frida su Android/thumb
  R2FRIDA_DEBUG=0|1                # Usato per debug del comportamento di parsing degli argomenti
  R2FRIDA_COMPILER_DISABLE=0|1     # Disabilita il nuovo compilatore TypeScript di frida (`:. foo.ts`)
  R2FRIDA_AGENT_SCRIPT=[file]      # Percorso del file dell'agente r2frida

Esempi

$ r2 frida://0     # come frida -p 0, si collega a una sessione locale

Puoi attaccare, spawnare o lanciare qualsiasi programma per nome o PID. La riga seguente si collega al primo processo chiamato rax2 (esegui rax2 - in un altro terminale per testare questa riga)

$ r2 frida://rax2  # collega al primo processo chiamato `rax2`
$ r2 frida://1234  # collega al PID indicato

Usando il percorso assoluto di un binario per spawnare, verrà avviato il processo:

$ r2 frida:///bin/ls
[0x00000000]> :dc        # continua l'esecuzione del programma target

Funziona anche con argomenti:

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

Per il debugging USB di app iOS/Android usa queste azioni. Nota che spawn può essere sostituito con launch o attach, e il nome del processo può essere il bundleid o il PID.

$ r2 frida://spawn/usb/         # enumera i dispositivi
$ r2 frida://spawn/usb//        # enumera le app nel primo dispositivo iOS
$ r2 frida://spawn/usb//Weather # esegue l'app Meteo

Comandi

Questi sono i comandi più frequenti: imparali e aggiungi ? per ottenere l'aiuto dei sottocomandi.

:i        # ottiene informazioni sul target (pid, nome, home, arch, bits, ...)
.:i*      # importa i dettagli del processo target in r2 locale
:?        # mostra tutti i comandi disponibili
:dm       # elenca le mappe. Usa ':dm|head' e cerca l'indirizzo base del programma
:iE       # elenca le esportazioni del binario corrente (seek)
:dt fread # traccia la funzione 'fread'
:dt-*     # cancella tutte le tracce

Plugin

I plugin di r2frida girano lato agente e vengono registrati con l'API r2frida.pluginRegister.

Vedi la directory plugins/ per alcuni script di esempio aggiuntivi.

[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   # carica lo script del plugin

Il comando :. funziona come il comando . di r2, ma viene eseguito all'interno dell'agente.

:. a.js  # esegue lo script che registra un plugin
:.       # elenca i plugin
:.-test  # scarica un plugin per nome
:.. a.js # eternalizza lo script (rimane in esecuzione dopo il distacco)

Termux

Se intendi installare e usare r2frida nativamente su Android tramite Termux, ci sono alcune limitazioni con le dipendenze delle librerie a causa di risoluzioni di simboli. Il modo per farlo funzionare è estendere la variabile d'ambiente LD_LIBRARY_PATH in modo che punti alla directory di sistema prima della libdir di Termux.

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

Risoluzione dei problemi

Assicurati di usare una versione moderna di r2 (preferibilmente l'ultima release o git).

Esegui r2 -L | grep frida per verificare se il plugin è caricato; se non viene stampato nulla, usa la variabile d'ambiente R2_DEBUG=1 per ottenere messaggi di debug che ti aiutino a trovare la causa.

Se hai problemi a compilare r2frida, puoi usare r2env o scaricare le build di release dalla pagina delle Release di GitHub. Tieni presente che solo la versione MAJOR.MINOR deve corrispondere: ad esempio, r2-5.7.6 può caricare qualsiasi plugin compilato su qualsiasi versione tra 5.7.0 e 5.7.8.

Design

 +---------+
 | radare2 |     Lo strumento radare2, sopra tutto il resto
 +---------+
      :
 +----------+
 | io_frida |    Plugin IO di r2frida
 +----------+
      :
 +---------+
 |  frida  |     API host di Frida e logica per interagire con il target
 +---------+
      :
  +-------+
  |  app  |      Processo target strumentato da Frida con JavaScript
  +-------+

Crediti

Questo plugin è stato sviluppato da pancake aka Sergi Alvarez (l'autore di radare2) per NowSecure.

Vorrei ringraziare Ole André per aver scritto e mantenuto Frida, oltre ad essere stato così gentile da correggere bug in modo proattivo e discutere dettagli tecnici su tutto ciò che era necessario per far funzionare questa unione. Kudos

Categorie