Radare2 et Frida mieux ensemble

Plugin autonome pour Radare2 qui expédie Frida et permet d'instrumenter des processus locaux ou distants à l'aide de commandes R2 (mais sans s'y limiter) des scripts FRIDA.
Le projet Radare fournit une chaîne d'outils complète pour l'ingénierie inverse, il est activement entretenu et offre des fonctionnalités bien entretenues et étend ses fonctionnalités avec d'autres langages et outils de programmation.
Frida est une boîte à outils d'instrumentation dynamique qui facilite l'inspection et la manipulation des processus de fonctionnement en injectant votre propre JavaScript, et communique également également avec vos scripts.
:.:dbr_fs . La façon recommandée d'installer R2Frida est via R2PM:
$ r2pm -ci r2frida Les versions binaires qui ne nécessitent pas de compilation seront bientôt prises en charge à r2pm et r2env . Pendant ce temps, n'hésitez pas à télécharger les dernières constructions à partir de la page des versions.
Dans GNU / Debian, vous devrez installer les packages 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-Xyz)preconfigure.bat )configure.bat puis make.bat Pour les tests, utilisez r2 frida://0 , comme la fixation du PID0 dans Frida est une session spéciale qui fonctionne dans local. Maintenant, vous pouvez exécuter le :? 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 attacher, apparaître ou lancer sur 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 pidL'utilisation du chemin absolu d'un binaire pour apparaître va engendrer le processus:
$ r2 frida:///bin/ls
[0x00000000] > :dc # continue the execution of the target programFonctionne également avec les arguments:
$ r2 frida:// " /bin/ls -al " Pour le débogage USB, les applications iOS / Android utilisent 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 Ce sont les commandes les plus fréquentes, vous devez donc les apprendre et la suffixer avec ? Pour obtenir une aide sous-communs.
: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 fonctionnent du côté de l'agent et sont enregistrés auprès de l'API r2frida.pluginRegister .
Voir les plugins/ répertoire pour quelques exemples de scripts de plugin.
[ 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 Le :. La commande fonctionne comme les R2 . Commande, mais s'exécute à l'intérieur de l'agent.
:. a.js # run script which registers a plugin
:. # list plugins
:.-test # unload a plugin by name
:.. a.js # eternalize script (keeps running after detach) Si vous êtes prêt à installer et à utiliser R2Frida nativement sur Android via Termux, il y a quelques mises en garde avec les dépendances de la bibliothèque en raison de certaines résolutions de symboles. La façon de faire ce travail consiste à étendre l'environnement LD_LIBRARY_PATH pour pointer vers le répertoire système avant le Termux Libdir.
$ LD_LIBRARY_PATH=/system/lib64:$LD_LIBRARY_PATH r2 frida://...
Assurez-vous que vous utilisez une version moderne de R2 (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 imprimé, utilisez la variable d'environnement R2_DEBUG=1 pour obtenir des messages de débogage pour découvrir la raison.
Si vous avez des problèmes de compilation R2FRIDA, vous pouvez utiliser r2env ou récupérer les versions de version à partir de la page GitHub Releases, gardez à l'esprit que seule la version majeure doit correspondre, ceci est R2-5.7.6 peut charger n'importe quel plugin compilé sur n'importe quelle version entre 5.7.0 et 5.7.8.
+---------+
| 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
+-------+
Ce plugin a été développé par Pancake aka Sergi Alvarez (l'auteur de Radare2) pour Nowsecure.
Je tiens à remercier Ole André d'avoir écrit et entretenu Frida ainsi que d'être si gentil de réparer de manière proactive les bogues et de discuter des détails techniques sur tout ce dont il faut faire fonctionner cette union. Gloire