
Radare2 und Frida besser zusammen.
Radare2 und Frida besser zusammen
Eigenständiges Plugin für radare2, das frida mitbringt und es ermöglicht, lokale oder entfernte Prozesse mit r2-Befehlen anstelle (aber nicht ausschließlich) von Frida-Skripten zu instrumentieren.
Das radare-Projekt bietet eine vollständige Toolchain für Reverse Engineering, wird aktiv gepflegt und stellt gut gewartete Funktionalitäten bereit und erweitert seine Funktionen mit anderen Programmiersprachen und Werkzeugen.
Frida ist ein dynamisches Instrumentierungs-Toolkit, das es einfach macht, laufende Prozesse zu inspizieren und zu manipulieren, indem Sie Ihr eigenes JavaScript injizieren und optional auch mit Ihren Skripten kommunizieren.
:.):db-APIr_fs-API zugreifen.Die empfohlene Methode zur Installation von r2frida ist über r2pm:
$ r2pm -ci r2frida
Binäre Builds, die keine Kompilierung erfordern, werden bald in r2pm und r2env unterstützt. In der Zwischenzeit können Sie die letzten Builds von der Releases-Seite herunterladen.
In GNU/Debian müssen Sie die folgenden Pakete installieren:
$ 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 um (anstelle von radare2-x.y.z)preconfigure.bat)configure.bat und dann make.bat ausZum Testen verwenden Sie r2 frida://0, da das Anhängen an die pid0 in frida eine spezielle Sitzung ist, die lokal läuft. Jetzt können Sie den Befehl :? ausführen, um die Liste der verfügbaren Befehle zu erhalten.
$ 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
Umgebung: (Verwenden Sie den Befehl `%`, um die Umgebung zur Laufzeit zu ändern)
R2FRIDA_SAFE_IO=0|1 # Workaround für einen Frida-Fehler unter Android/thumb
R2FRIDA_DEBUG=0|1 # Wird verwendet, um das Verhalten der Argumentanalyse zu debuggen
R2FRIDA_COMPILER_DISABLE=0|1 # Deaktiviert den neuen Frida TypeScript-Compiler (`:. foo.ts`)
R2FRIDA_AGENT_SCRIPT=[file] # Pfad zur Datei des r2frida-Agents
$ r2 frida://0 # same as frida -p 0, connects to a local session
Sie können an jedes Programm nach Namen oder PID anfügen, spawnen oder starten. Die folgende Zeile wird an den ersten Prozess namens rax2 anfügen (führen Sie rax2 - in einem anderen Terminal aus, um diese Zeile zu testen)
$ r2 frida://rax2 # attach to the first process named `rax2`
$ r2 frida://1234 # attach to the given pid
Die Verwendung des absoluten Pfads einer Binärdatei zum Spawnen wird den Prozess spawnen:
$ r2 frida:///bin/ls
[0x00000000]> :dc # continue the execution of the target program
Funktioniert auch mit Argumenten:
$ r2 frida://"/bin/ls -al"
Für USB-Debugging von iOS/Android-Apps verwenden Sie diese Aktionen. Beachten Sie, dass spawn durch launch oder attach ersetzt werden kann und der Prozessname die Bundle-ID oder die PID sein kann.
$ 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
Dies sind die häufigsten Befehle, also sollten Sie sie lernen und mit ? versehen, um Hilfe zu Unterbefehlen zu erhalten.
: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
r2frida-Plugins laufen auf der Agent-Seite und werden mit der r2frida.pluginRegister-API registriert.
Siehe das Verzeichnis plugins/ für weitere Beispiel-Plugin-Skripte.
[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
Der Befehl :. funktioniert wie der r2-Befehl ., läuft aber innerhalb des Agents.
:. a.js # run script which registers a plugin
:. # list plugins
:.-test # unload a plugin by name
:.. a.js # eternalize script (keeps running after detach)
Wenn Sie r2frida nativ auf Android über Termux installieren und verwenden möchten, gibt es einige Fallstricke mit den Bibliotheksabhängigkeiten aufgrund einiger Symbolauflösungen. Der Weg, dies zum Laufen zu bringen, besteht darin, die Umgebungsvariable LD_LIBRARY_PATH so zu erweitern, dass sie vor dem Termux-libdir auf das Systemverzeichnis zeigt.
$ LD_LIBRARY_PATH=/system/lib64:$LD_LIBRARY_PATH r2 frida://...
Stellen Sie sicher, dass Sie eine moderne Version von r2 verwenden (vorzugsweise die neueste Version oder git).
Führen Sie r2 -L | grep frida aus, um zu überprüfen, ob das Plugin geladen ist. Wenn nichts ausgegeben wird, verwenden Sie die Umgebungsvariable R2_DEBUG=1, um einige Debug-Nachrichten zu erhalten, um den Grund herauszufinden.
Wenn Sie Probleme beim Kompilieren von r2frida haben, können Sie r2env verwenden oder die Release-Builds von der GitHub-Releases-Seite herunterladen. Beachten Sie, dass nur die MAJOR.MINOR-Version übereinstimmen muss, d.h. r2-5.7.6 kann jedes Plugin laden, das mit einer Version zwischen 5.7.0 und 5.7.8 kompiliert wurde.
+---------+
| 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
+-------+
Dieses Plugin wurde von pancake aka Sergi Alvarez (dem Autor von radare2) für NowSecure entwickelt.
Ich möchte Ole André dafür danken, dass er Frida geschrieben und gewartet hat, und dafür, dass er so freundlich war, proaktiv Fehler zu beheben und technische Details zu allem zu besprechen, was nötig war, um diese Vereinigung zum Funktionieren zu bringen. Kudos