forked from ree-lecture/assignments
36 lines
2.7 KiB
Markdown
36 lines
2.7 KiB
Markdown
|
# Radare 2
|
||
|
|
||
|
[Radare 2 ](https://rada.re) ist ein Reverse-Engineering-Werkzeug für die Kommandozeile. Es gibt mit [iato](https://github.com/radareorg/iaito/) auch eine grafische Oberfläche. Diese setzen wir hier aber nicht ein, sondern verwenden ein anderes Werkzeug namens Ghidra.
|
||
|
|
||
|
## Installation
|
||
|
|
||
|
Sie müssen Radare 2 installieren, bevor Sie es benutzen können. Unter Ubuntu können Sie eine ältere Version einfach mit `sudo apt install radare2` installieren. Diese Version reicht für diese und folgende Übungen vollständig aus. Möchten Sie eine aktuellere Version, so finden Sie diese auf [GitHub](https://github.com/radareorg/radare2/releases).
|
||
|
|
||
|
Die Version 4.1.x von radare2 hat Probleme mit der Instruktion `endbr64` (`f3 0f 1e fa`) am Anfang von Funktionen und zeigt diese als "invalid" an. Deswegen können Sie Funktionen nicht einfach mit `pd@ FNAME` disassemblieren, sondern müssen die Funktion über `s` suchen und dann mit `pd` disassemblieren. Um dieses Problem zu umgehen, installieren Sie die aktuelle Version.
|
||
|
|
||
|
## Wichtige Kommandos
|
||
|
|
||
|
### rabin2
|
||
|
|
||
|
`rabin2` ist ein Werkzeug, um Informationen über ein vorliegendes Binary zu erhalten. Sie übergeben `rabin2` den Pfad des Executables und legen über ein Flag fest, welche Informationen Sie sehen wollen. Beispielsweise zeit das Kommando `rabin2 -i /usr/bin/ls` die Imports des `ls`-Kommandos an.
|
||
|
|
||
|
Die wichtigsten Flags für `rabin2` sind:
|
||
|
|
||
|
* `-z`: Strings in der `.data`-Section ausgeben
|
||
|
* `-zzz`: Strings aus allen Sektionen ausgeben
|
||
|
* `-i`: Imports ausgeben
|
||
|
* `-E`: Exports ausgeben
|
||
|
* `-l`: Verwendete Libraries ausgeben
|
||
|
|
||
|
### r2
|
||
|
|
||
|
`r2` ist das eigentliche Reverse-Engieering-Werkzeug mit einem integrierten Disassembler. Das zu analysierende Programm wird `r2` als Parameter übergeben, z.B. `r2 /usr/bin/ls`. Üblicherweise startet man `r2` mit dem zusätzlichen Parameter `-AA`, um das Programm auch direkt zu analysieren, also `r2 -AA /usr/bin/ls`. Will man Änderungen am Binary vornehmen, muss man es im Write-Mode mit `-w` öffnen.
|
||
|
|
||
|
Nach dem Start zeigt `r2` einen Prompt mit der aktuellen Adresse. Im folgenden sollen die wichtigsten Kommandos aufgelistet werden:
|
||
|
|
||
|
* `s`: Sucht nach einem Symbol und springt an die Startadresse des Symbols, z.B. `s main`
|
||
|
* `pd`: Gib ab der aktuellen Position ein Assembler-Listing aus (*p*rint *d*issassembly). Die Anzahl der Zeilen (Opcodes) kann als Parameter angegeben werden, also `pd 10` für 10 Zeilen.
|
||
|
* `pdr`: Gibt ab der aktuellen Position ein Assembler-Listing aus, verwendet aber einen rekursiven Disassembler.
|
||
|
* `v`: Startet den visuellen Modus, den man mit `q` wieder verlassen kann. Im visuellen Modus kann man durch `ENTER` die Anzeige verbreitern
|
||
|
* `CTRL-D` verlässt `r2`
|