assignments/help/radare2.md

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, 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