
Radare2 et Frida : mieux ensemble.
Radare2 et Frida, mieux ensemble
Plugin autonome pour radare2 qui embarque frida et permet d'instrumenter des processus locaux ou distants à l'aide de commandes r2 au lieu (mais sans s'y limiter) de scripts Frida.
Le projet radare fournit une chaîne d'outils complète pour le reverse engineering, il est activement maintenu et propose des fonctionnalités bien entretenues et étend 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 permet également, en option, de communiquer avec vos scripts.
:.):dbr_fs.La méthode recommandée pour installer r2frida est via r2pm :
$ r2pm -ci r2frida
Les builds binaires ne nécessitant pas de compilation seront bientôt pris en charge dans
r2pm et r2env. En attendant, n'hésitez pas à télécharger les derniers builds
depuis la page Releases.
Sous GNU/Debian, vous devrez installer les paquets suivants :
$ 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 (au lieu de radare2-x.y.z)preconfigure.bat)configure.bat puis make.batPour 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 maintenant 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: (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
$ r2 frida://0 # same as frida -p 0, connects to a local session
Vous pouvez vous attacher, lancer ou démarrer 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 démarrera 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 que 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
Voici les commandes les plus fréquentes, vous devez donc les apprendre et les suffixer avec ? pour obtenir l'aide des sous-commandes.
: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
Les plugins r2frida s'exécutent côté agent et sont enregistrés avec l'API r2frida.pluginRegister.
Consultez 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