Reverse Engineering — Grundlagen.
Quick-Reference für Disassembler, Debugger und die zuerst zu prüfenden Signaturen — inklusive ARM-Referenz für Analysten beim Übergang von x86 und der moderne Browser als Angriffsfläche.
Tool-Auswahl
- Ghidra. Frei, Decompiler-first-Workflow, scriptbar in Python/Java. Bester Default für Malware-Analyse und CTF.
- IDA Pro. Kommerziell, Gold-Standard für große Binaries, beste Graph-View, FLIRT-Signatures für Library-Identifikation. Hex-Rays-Decompiler übertrifft Ghidras auf komplexem Code.
- Binary Ninja. Erschwinglich, ILs (LLIL/MLIL/HLIL) exzellent für Analyse-Automation. Headless-API für Batch-Processing.
- radare2 / rizin. Frei, scriptbar, CLI-first. Steile Lernkurve. Nutzen wenn Per-Instruction-Analyse über Tausende von Binaries gescripted werden muss.
- x64dbg. Freier Windows-Debugger. Default zum Unpacken von Malware auf Windows.
- WinDbg. Microsofts Debugger. Pflicht für Kernel-Debugging, Dump-Analyse. Modernes WinDbg hat jetzt vernünftige UI.
- gdb + GEF oder pwndbg. Linux-Debugger mit Security-fokussierten Extensions. Standard für Binär-CTFs.
- rr. Time-Travel-Debugger für Linux. Einmal aufzeichnen, vorwärts und rückwärts laufen. Game-Changer für harte Bugs.
Erster Blick auf unbekanntes Binary
- File-Type.
file unknown.bin→ Format + Arch. - Section-Anomalien. Ghidra-/IDA-Section-Listing. .text sehr klein + riesige .data-Section = Packer. Section-Name-Mismatch (z.B. UPX0/UPX1) = packed.
- Imports.
nm -D/dumpbin /imports. CryptDecrypt + VirtualAlloc + WriteProcessMemory = Unpacker-Stub. Curl + json + base64 = Exfil. Minimale Imports + LoadLibrary/GetProcAddress = dynamische Resolution zur Intent-Versteckung. - Strings.
strings -n 7für ASCII;strings -elfür UTF-16. URLs, File-Pfade, Error-Messages, Version-Strings. - Entropy.
binwalk -E. Sections bei >7.0 Entropy = encrypted/compressed. Packed Binary zeigt Low-Entropy-Stub am Entry-Point, dann High-Entropy-Region, die es entpackt. - Packer-Signatures. Detect-It-Easy / PEiD. UPX →
upx -dentpackt selbst. Themida/VMProtect = Wochen manuelles Unpacking erwarten. - Anti-Debug-Tells.
IsDebuggerPresent,CheckRemoteDebuggerPresent, PEB-BeingDebugged-Read, INT-3-Scan über eigenen Code, Timing-Checks (RDTSC-Delta).
ARM für x86-Analysten
- Register. ARM64: x0–x30 (x30=LR), SP, PC. ARM32: r0–r12, r13=SP, r14=LR, r15=PC. Calling-Convention: x0–x7 Args (ARM64), r0–r3 (ARM32). Return in x0/r0.
- Endianness. ARM default Little-Endian; manche Embedded Big-Endian. Mit Header bestätigen.
- Häufige Muster.
stp x29, x30, [sp, #-16]!— Function-Prolog (FP + LR speichern).ldp x29, x30, [sp], #16— Epilog.bl func— Call (Branch-and-Link, setzt LR).ret— Return (Branch zu LR).
- Syscalls. Linux ARM64: Syscall-Nummer in x8, Args in x0–x5,
svc #0. macOS ARM64 nutzt andere Syscall-Konventionen;/usr/share/man/man2konsultieren. - PAC (Pointer Authentication). ARMv8.3+. Return-Adressen signiert vor Push, verifiziert vor Use. Bypass: Signing-Gadget (selten), via Signing-Key-Leak forgen (unmöglich ohne Kernel), weg von signierten Returns zu BR/BLR-style Indirect pivoten (BTI möglicherweise auch enabled).
Browser als Angriffsfläche
- Process-Modell. Chrome: ein Browser-Prozess + N Renderer-Prozesse (sandboxed) + GPU + Network-Prozess. V8-Engine im Renderer. Firefox ähnlich mit Content-Prozessen. Safari Multi-Process mit WebKit.
- Sandbox-Grenze. Renderer kann nicht direkt Files öffnen, Network-Sockets; spricht mit Broker via IPC (Mojo in Chrome). Bypass = Sandbox-Escape via IPC-Vuln oder via Browser-Process-seitigen Bug.
- JIT-Engines. V8 TurboFan, JavaScriptCore FTL, SpiderMonkey IonMonkey. Häufige Vuln-Klasse: Type-Confusion via inkorrekter Optimierungs-Annahme. JIT-Spray für Code-Cache-Write/Exec-Primitive.
- Mitigations. Site-Isolation (Chrome) — separater Prozess pro Origin, um Spectre-Klassen-Leaks zu schlagen. CFI für Indirect-Calls. JIT-Isolation (Renderer kann nicht in JIT-Pages lesen/schreiben).
- Historische CVE-Cluster. V8-TurboFan-Bounds-Check-Elimination (CVE-2018-17463, CVE-2020-6418). WebKit-JS-Bounds-Check (CVE-2021-30858). Use-After-Free in DOM-Event-Handler-Tear-Down.
FaustregelFür Malware-Analyse Binary zuerst in Snapshot-VM mit Wireshark + Sysmon laufen lassen, dann reverten was du gesehen hast. Pure-Static-Analyse auf packed/obfuscated Samples dauert 10× länger als Dynamic-then-Static. Für Exploit-Analyse umgekehrt — dynamisch erst, wenn statische Struktur verstanden ist.
Von der Referenz zum Befund