
Radare2 e Frida meglio insieme.
Radare2 e Frida meglio insieme
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.
:.):dbr_fsIl 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.
Su GNU/Debian dovrai installare i seguenti pacchetti:
$ sudo apt install -y make gcc libzip-dev nodejs npm curl pkg-config git
$ git clone https://github.com/nowsecure/r2frida.git
$ cd r2frida
$ make
$ make user-install
radare2 (invece di radare2-x.y.z)preconfigure.bat)configure.bat e poi make.batPer 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
$ 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
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
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)
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://...
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.
+---------+
| 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
+-------+
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