
Workshop zum Reverse Engineering von Firmware
Dieses Repository enthält Folien und praktische Materialien für den Workshop zum Reverse Engineering von Firmware von Emproof, der auf der ScapyCon Automotive 2025 präsentiert wurde. Der Workshop richtet sich an ein technisches Publikum mit geringer Sicherheitserfahrung und vermittelt die Grundlagen anhand praktischer, in sich abgeschlossener Aufgaben. Die Themen umfassen
Wenn dich das anspricht, schau dir auch die technische Webinar-Reihe von Emproof mit weiteren Übungen und aufgezeichneten Sitzungen an.
Die Workshop-Inhalte wurden von Tim Blazytko entworfen und organisiert, mit Unterstützung von Simran Kathpalia.
Um die Umgebung einzurichten, klone das Repository:
git clone https://github.com/emproof-com/workshop_firmware_reverse_engineering
cd workshop_firmware_reverse_engineering
Für mehrere Aufgaben benötigen wir eine AArch64-Linux-Ausführungsumgebung. Wir stellen einen Docker-Container auf Basis von Kali Linux mit vorinstallierten gängigen Tools (z. B. GNU Binutils, Binwalk) bereit. Dies vereinheitlicht die Umgebung unter Linux, Windows und macOS – unabhängig von der Host-CPU-Architektur. Um den Container zu starten und die Shell zu öffnen, führe Folgendes aus:
./docker_run.sh
Hinweis: Der erste Lauf kann eine Weile dauern, um das Image zu erstellen.
Hinweis (Architektur): Der Docker-Compose-Dienst legt
platform: "linux/arm64"fest.
Auf x86_64-Hosts (Intel macOS/Windows/Linux) führt Docker Desktop das Image unter Emulation aus, daher können der erste Build und Start langsamer sein – das ist zu erwarten. Auf nativen ARM64-Hosts (Apple Silicon, ARM-Server) läuft es nativ und ist schneller.
Hinweis: Der Docker-Container kann auch ARMv7-Binärdateien (armhf) ausführen. Wir installieren die armhf-Laufzeit (dynamischer Lader + Bibliotheken) im Image und registrieren binfmt-Handler sowohl für
aarch64als auch fürarmüber das Startskript.
Zusätzlich installiere die folgenden grafischen Werkzeuge auf deinem Host für interaktive Reverse-Engineering-Aufgaben (diese sind nicht im Container enthalten):
Beide Werkzeuge sind für Windows, Linux und macOS verfügbar.
Hinweis: Binary Ninja Free unterstützt AArch64 nicht. Verwende für AArch64-Analysen Ghidra (oder einen lizenzierten Binary-Ninja-Build). Daher enthalten mehrere Labs eine ARMv7-Begleit-Binärdatei (
*.armv7) speziell für Binary Ninja Free; diese können ebenfalls im selben Container ausgeführt werden.
Jede Aufgabe ist in sich abgeschlossen in tasks/<name>/ und umfasst:
samples/ — Binärdateien (und manchmal Quellcode), die in der Übung verwendet werdentask.md — die Aufgabenstellung mit Schritt-für-Schritt-Anleitungen und HinweisenDie Aufgaben können unabhängig bearbeitet werden, aber wir bieten eine empfohlene Reihenfolge (unten aufgeführt), die den Schwierigkeitsgrad steigert und nach und nach neue Techniken einführt. Die meisten Samples zielen auf ARMv7 (Thumb/ARM32) oder AArch64; wo relevant, weisen die Aufgabennotizen auf Architektur, benötigte Werkzeuge und etwaige besondere Laufzeitanforderungen hin.
tasks/hello_world: Grundlagen der ELF-Datei- und Metadatenanalyse; erste Schritte in Ghidra / Binary Ninja.
tasks/license_check: hartcodierte Geheimnisse extrahieren / Funktionen freischalten; grundlegendes Patchen, um Validierungen zu umgehen (Cracking).
tasks/game: einfaches Zahlenraten-Spiel; die Logik verstehen und den Test- vs. Vollmodus knacken.
tasks/keygenning_1: eine Lizenzvalidierung reverse-engineeren und einen minimalen Keygen schreiben, um gültige Seriennummern zu erzeugen.
tasks/keygenning_2: eine etwas anspruchsvollere Keygen-Aufgabe (Salts/Schlüssel, Hex-Kodierung).
tasks/string_encryption: Binärdatei mit verschlüsselten Strings (häufig bei Malware); den Entschlüssler identifizieren und Strings statisch wiederherstellen.
tasks/mirai: eingebettete Malware mit einer String-Entschlüsselungsroutine; eine größere Codebasis navigieren, interessante Konstrukte identifizieren und mit verschleierten Strings umgehen.
tasks/embedded_linux_1: Embedded-Linux-Firmware mit Dateisystem; entpacken, untersuchen und Linux-Login-Informationen knacken (CTF-Stil).
tasks/embedded_linux_2: ähnlich, aber eine versteckte Binärdatei finden und analysieren, die dort nicht sein sollte.
tasks/car_demo: Bare-Metal-Firmware-Analyse: Architektur, Board, Speicherbelegung, Toolchain-Artefakte identifizieren; WLAN-Zugangsdaten und Protokoll-Endpunkte extrahieren.
Sofern nicht anders angegeben, sind alle Workshop-Materialien in diesem Repository unter der GNU General Public License, Version 2 (GPL-2.0) lizenziert. Den vollständigen Text findest du in LICENSE.
Einige Samples von Drittanbietern bzw. aus externen Quellen sind von der GPL ausgenommen und werden nur zu Analyse-/Bildungszwecken bereitgestellt (keine Weiterverbreitung). Diese sind:
Hinweis: Wenn ein Unterverzeichnis eine eigene Lizenzdatei oder einen eigenen Lizenzheader enthält, hat diese Lizenz Vorrang für den Inhalt dieses Unterverzeichnisses.
tasks/iot_diag: Bare-Metal-Firmware-Dump eines Diagnosewerkzeugs; Speicherlayouts aus dem Datenblatt rekonstruieren und dann das Passwort finden, um den Diagnosemodus freizuschalten.
tasks/crypto_detection: AArch64-Binärdatei, die kryptografische Operationen mit einem hartcodierten AES-Schlüssel durchführt; den EVP-Aufruf lokalisieren und Schlüssel/IV zurückverfolgen, um ohne das Programm zu entschlüsseln.
tasks/license_check_anti_patching: Anti-Patching durch Code-Checksummen; den CRC-Schutz verstehen und Wege kennenlernen, ihn zu umgehen.
tasks/fibonacci_obfuscation: saubere vs. verschleierte Fibonacci-Implementierungen (Switch-Flattening, berechnetes goto, opake Prädikate, arithmetische Verschleierung, kleine VM); Techniken verstehen und normalisieren.