2.7 KiB
Radare 2
Radare 2 ist ein Reverse-Engineering-Werkzeug für die Kommandozeile. Es gibt mit iato 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.
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 (print dissassembly). Die Anzahl der Zeilen (Opcodes) kann als Parameter angegeben werden, alsopd 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 mitq
wieder verlassen kann. Im visuellen Modus kann man durchENTER
die Anzeige verbreiternCTRL-D
verlässtr2