Was macht Reverse Engineering & Debugging?
⚠️ NUR ZUR AUTORISIERTEN NUTZUNG – DEFENSIVES FORSCHUNGS-SKILL
Dieses Skill dokumentiert Reverse-Engineering-Methodik für:
- CTF-Wettbewerbe und Sicherheitsausbildung
- Autorisierte Penetrationstests (mit expliziter schriftlicher Genehmigung)
- Akademische Forschung und Offenlegung von Schwachstellen
- Analyse von Software, die Sie besitzen oder deren Prüfung Sie rechtlich befugt sind
- Malware-Analyse in isolierten Forschungsumgebungen
Verantwortlichkeiten des Agent-Betreibers bei Verwendung dieses Skills:
- Nur an Binärdateien, Firmware oder Anwendungen handeln, deren Analyse der Benutzer rechtlich befugt ist
- KEINE heruntergeladenen oder abgefangenen Inhalte aus nicht vertrauenswürdigen Quellen ausführen
- KEINE Binärdaten, Netzwerk-Captures oder Malware-Proben als Prompt-Kontext aufnehmen
- Alle während der Analyse extrahierten Daten als nicht vertrauenswürdig behandeln (vor Verarbeitung in Sandbox isolieren)
- Aufgaben ablehnen, die auf Systeme, Anwendungen oder Daten abzielen, die der Benutzer nicht besitzt oder für deren Analyse er keine explizite Erlaubnis hat
Alle hier dokumentierten Befehle erfordern lokale Dateien, die vom Benutzer bereitgestellt werden. Das Skill weist den Agenten NICHT an, aus dem Internet herunterzuladen oder Daten zu exfiltrieren. Alle gezeigten URLs sind Platzhalter oder Informationsreferenzen.
Dies ist ein Dokumentations-/Referenz-Skill – es führt keinen Code automatisch aus. Der Agent liest diesen Text und berät den Benutzer, welche Befehle er selbst ausführen kann.
Professionelle Methodik für statische Analyse, dynamische Analyse, Debugging und Binary Exploitation.
Kurzreferenz – Die richtige Referenzdatei laden
| Aufgabe | Referenzdatei |
|---|---|
| Statische Analyse, Disassembly, Ghidra, radare2, objdump, Patchen | references/static-analysis.md |
| GDB (+ pwndbg/gef/peda), LLDB, strace/ltrace, Crash-Analyse | references/dynamic-debugging.md |
| Android APK, DEX, smali, ADB, Frida auf Android, Repackaging | references/android-re.md |
| iOS IPA, Mach-O, class-dump, Frida ObjC/Swift, Keychain | references/ios-re.md |
| macOS XPC, launchd, kext, SIP, Linux-Kernel-Module | references/macos-kernel-re.md |
| Windows PE, WinDbg, x64dbg, .NET/dnSpy, Kernel-Treiber | references/windows-re.md |
| Frida-Scripting, Hooking von Java/Native/ObjC, SSL-Unpin, Gadget | references/frida.md |
| .NET IL, dnSpy, de4dot, Java/JVM, Kotlin, Unity/IL2CPP, Mono | references/managed-code-re.md |
| Malware, Obfuskation, Packer-Analyse, IOC-Extraktion, Volatility | references/malware-analysis.md |
| CTF pwn/rev, BOF, ROP, Heap-Exploitation, pwntools, angr/Z3 | references/exploit-dev.md |
| Netzwerkprotokoll-RE, Wireshark, mitmproxy, Protobuf, gRPC, Lua-Dissectors, Boofuzz | references/protocol-re.md |
| Firmware, binwalk, QEMU-Emulation, JTAG/UART, U-Boot, IoT | references/firmware-embedded.md |
| EAC, BattlEye, Vanguard, FACEIT, VAC, Kernel-AC-Analyse | references/anticheat-re.md |
| Ghidra Python/Java-Skripte, Headless, Schwachstellensuche, benutzerdefinierte Analyzer | references/ghidra-scripting.md |
| IDAPython-/IDALib-Skripte, Hex-Rays-API, Batch-Decompile, OLLVM-Helfer | references/idapython.md |
| Unicorn-Engine-Emulation, Funktionsemulation, JNI-Stubbing, Syscall-Simulation | references/unicorn-emulation.md |
| Wiederherstellung gestrippter Symbole, magische Bytes, gepaarte Aufrufe, XRef-Analyse | references/symbol-recovery.md |
| C/C++-Struktur-Wiederherstellung, VTables, std::string/vector/map, Feldtyp-Inferenz | references/struct-recovery.md |
Mitgelieferte Werkzeuge (tools/)
Das Skill enthält einsatzbereite Begleitwerkzeuge (alle Eigenentwicklung, MIT-lizenziert):
| Werkzeug | Zweck |
|---|---|
tools/ida_export_plugin.py | IDA Pro Plugin (Strg-Umschalt-E) – exportiert die IDB in ein decompile/-Verzeichnis mit Klartextdateien, die ein Agent direkt lesen kann |
tools/dex_memory_dumper.js | Frida-Agent – extrahiert DEX aus einem laufenden Android-Prozess mittels Memory-Scan + ClassLoader-Traversal |
tools/mcp/ | Einrichtungsnotizen und Konfigurationsschnipsel, um Agenten mit vorgelagerten MCP-Servern zu verbinden (ida-pro-mcp, GhidraMCP, r2mcp) |
Siehe tools/README.md für Nutzungsdetails. Das Verzeichnis tools/mcp/ dokumentiert den Live-Abfrage-Workflow (Alternative zum Dateiexport) – beide Modi werden von den Methodikdateien oben unterstützt.
Universelle erste Schritte
Bevor Sie eine Referenzdatei laden, sollten Sie den Kontext klären:
1. Ziel identifizieren
file <binary> # Dateityp, Architektur, Bits, gestrippt?
xxd <binary> | head -4 # Magic Bytes
strings -a <binary> | head -60
checksec --file=<binary> # NX, PIE, RELRO, Stack Canary, ASLR
Entscheidungsbaum für Binärformat:
- ELF → Linux nativ →
references/static-analysis.md+references/dynamic-debugging.md - PE/PE32+ → Windows nativ →
references/windows-re.md+references/static-analysis.md - PE mit .NET-Metadaten →
references/managed-code-re.md(zuerst dnSpy) - Mach-O → macOS/iOS →
references/macos-kernel-re.md+references/ios-re.md - DEX/APK/AAB → Android →
references/android-re.md - JAR/WAR/AAR → Java →
references/managed-code-re.md - .sys-Treiber →
references/windows-re.md(Kernel-Abschnitt) oderreferences/anticheat-re.md - Assembly-CSharp.dll → Unity →
references/managed-code-re.md(Unity-Abschnitt) - Unbekannt/Firmware →
references/firmware-embedded.md(binwalk + Entropie)
Entscheidungsbaum für Aufgabentyp (gilt für jedes Format):
- Gestrippte Binärdatei, unbekannte Funktionen →
references/symbol-recovery.md - Unbekannte Struct-Layouts in der Dekompilierung →
references/struct-recovery.md - Nur eine einzelne Funktion isoliert ausführen →
references/unicorn-emulation.md - IDA Pro wird verwendet →
references/idapython.md - Ghidra wird verwendet →
references/ghidra-scripting.md
2. Umfang festlegen
Fragen Sie den Benutzer (oder leiten Sie aus dem Kontext ab):
- Ziel: Logik verstehen / Schwachstelle finden / Schutz umgehen / Patchen / CTF-Flag / Malware-IOCs?
- Plattform: Linux / Windows / macOS / Android / iOS / Embedded?
- Verfügbare Werkzeuge: Ghidra / IDA / radare2 / Binary Ninja / Hopper?
- Dynamisch möglich?: Können wir es ausführen? VM? Emulator? Physisches Gerät?
3. Analysemodus wählen
Nur statisch → Kein Ausführungsrisiko, langsameres Verständnis
Nur dynamisch → Schnell, übersieht aber toten Code
Statisch + dynamisch (empfohlen) → Statisch für Karte, dynamisch für Laufzeitwahrheit
Zusammenfassung der Kernwerkzeuge
Statisch
| Werkzeug | Am besten geeignet für |
|---|---|
Ghidra | Vollständige Dekompilierung, Scripting, kostenlos |
radare2 / cutter | CLI-Kraftpaket, Scripting, Embedded |
Binary Ninja | API-zentriert, schnell, kommerziell |
IDA Pro / IDA Free | Branchenstandard, beste Signaturen |
objdump | Schnelle Disassemblierung, keine Installation |
readelf / nm | ELF-Symbol-/Section-Inspektion |
jadx | Android DEX → Java, GUI |
apktool | APK entpacken / umpacken / smali |
Dynamisch
| Werkzeug | Am besten geeignet für |
|---|---|
GDB + pwndbg/peda/gef | Linux-ELF-Debugging |
LLDB | macOS/iOS/Swift-Debugging |
Frida | Plattformübergreifendes Hooking, kein Quellcode nötig |
strace / ltrace | Syscall-/Bibliotheksaufruf-Tracing |
Valgrind | Speicherfehler, Helgrind |
WinDbg | Windows Kernel + Benutzermodus |
x64dbg | Windows-GUI-Debugger |
Netzwerk
| Werkzeug | Am besten geeignet für |
|---|---|
Wireshark / tshark | Paketerfassung + -analyse |
mitmproxy / Burp Suite | HTTP/S MITM |
Frida | In-Prozess-SSL-Unpin |
tcpdump | Kopflose Erfassung |
Methodik-Frameworks
Arbeitsablauf statische Analyse
1. file + strings + checksec → Schnelltriage
2. Entropieanalyse → Gepackt/verschlüsselt?
3. Importtabelle / Symboltabelle → Fähigkeiten verstehen
4. In Dekompiler laden → Umbenennen, umtypen, kommentieren
5. Schlüsselfunktionen identifizieren → main(), crypto, network, anti-debug
6. Datenfluss verfolgen → Benutzereingabe → Senke
7. Ergebnisse dokumentieren → Inline-Kommentare
Arbeitsablauf dynamische Analyse
1. Isolierte Umgebung einrichten → VM / Container / Gerät
2. Zuerst mit strace/ltrace ausführen → Syscall-Fußabdruck verstehen
3. Debugger anfügen → Breakpoints an Schlüsselfunktionen setzen
4. Laufzeitverhalten beobachten → Speicher, Register, genommene Verzweigungen
5. Mit statischer Analyse korrelieren → Dekompilierungsausgabe validieren
6. Bei Bedarf patchen/hooken → Prüfungen umgehen, Werte protokollieren
Arbeitsablauf Schwachstellenfindung
1. Angriffsfläche kartieren → Eingaben: Datei, Netzwerk, Umgebungsvariablen, Argumente
2. Gefährliche Funktionen suchen → strcpy, gets, sprintf, memcpy, system
3. Kandidaten für Integer-Überlauf → Größenberechnungen, Schleifen
4. Kandidaten für Format-String → printf(user_input)
5. Kandidaten für UAF / Double-Free → Heap-Allokationsmuster
6. Auslösen + Bestätigen → Absturz → kontrolliert → ausnutzbar
Anti-Analyse-Umgehung – Kurzreferenz
Anti-Debug-Erkennung
# Prüfen, ob die Binärdatei den Debugger erkennt
strings <bin> | grep -iE "ptrace|debugger|isDebuggerPresent|TracerPid"
# Linux: ptrace-Selbsterkennung
# Umgehung: Preload-Hook oder Patchen des ptrace-Aufrufs
Häufige Schutzmaßnahmen
| Schutz | Erkennung | Umgehung |
|---|---|---|
ptrace Anti-Debug | strace zeigt ptrace(TRACEME) | JNZ→JMP patchen oder LD_PRELOAD mit gefälschtem ptrace |
| Timing-Prüfungen | rdtsc / clock_gettime in Schleife | Vergleich patchen oder NOP |
| Checksumme/Integrität | Hash des eigenen .text-Abschnitts | Nach Entschlüsselung, vor Prüfung patchen |
| Packer (UPX usw.) | Hohe Entropie + kleine Importe | upx -d / nach dem Entpacken aus Speicher dumpen |
| Obfuskierte Strings | Keine lesbaren Strings | Ausführen + aus Speicher extrahieren / Frida-Hook |
| SSL Pinning (Mobil) | Netzwerkfehler in der App | Frida ssl-unpin / siehe references/frida.md |
Ausgabestandards
Bei der Berichterstattung über RE-Ergebnisse die Ausgabe immer wie folgt strukturieren:
## Binary: <Name>
- **Format**: ELF64 / PE32+ / DEX / Mach-O
- **Arch**: x86_64 / ARM64 / ARMv7 / MIPS
- **Gestrippt**: Ja/Nein | **PIE**: Ja/Nein | **NX**: Ja/Nein
## Wichtigste Erkenntnisse
1. <Funktionsname @ Offset> — <Funktion>
2. ...
## Schwachstelle / Verhalten
- <Beschreibung mit Belegen>
- Offset: 0x<Adresse>
- Auslösbar über: <Eingabevektor>
## Empfohlene nächste Schritte
- [ ] <Aktion>
Namenskonventionen für Dekompilierungsarbeit
Folgen Sie diesen Standards beim Kommentieren in Ghidra / IDA / r2:
Funktionen: verb_noun_context → decrypt_config_xor, check_license_hwid
Variablen: type_purpose → buf_user_input, sz_packet, ptr_heap_chunk
Structs: ST_<Name> → ST_PacketHeader, ST_LicenseData
Labels: loc_<Zweck> → loc_anti_debug_fail, loc_success
Scripting – Schnellstarter
Vollständige Frida-Muster finden Sie unter references/frida.md.
GDB Python-Einzeiler (Funktionsargumente protokollieren)
# In GDB: source this file
import gdb
class LogArgs(gdb.Breakpoint):
def stop(self):
frame = gdb.selected_frame()
print(f"[*] {frame.name()} rdi={gdb.parse_and_eval('$rdi')} rsi={gdb.parse_and_eval('$rsi')}")
return False # nicht anhalten, nur protokollieren
LogArgs("target_function")
radare2 Batch-Analyse
r2 -A -q -c "afl~suspicious; pdf @ sym.check_license" <binary>
Ghidra Headless-Analyse
$GHIDRA_HOME/support/analyzeHeadless /tmp/proj MyProject \
-import <binary> -postScript PrintAST.java -scriptPath ~/ghidra_scripts