Neu Das Whitepaper zur kontinuierlichen Sicherheitsvalidierung 2026 ist verfügbar. Whitepaper lesen →

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

  1. File-Type. file unknown.bin → Format + Arch.
  2. Section-Anomalien. Ghidra-/IDA-Section-Listing. .text sehr klein + riesige .data-Section = Packer. Section-Name-Mismatch (z.B. UPX0/UPX1) = packed.
  3. Imports. nm -D / dumpbin /imports. CryptDecrypt + VirtualAlloc + WriteProcessMemory = Unpacker-Stub. Curl + json + base64 = Exfil. Minimale Imports + LoadLibrary/GetProcAddress = dynamische Resolution zur Intent-Versteckung.
  4. Strings. strings -n 7 für ASCII; strings -el für UTF-16. URLs, File-Pfade, Error-Messages, Version-Strings.
  5. 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.
  6. Packer-Signatures. Detect-It-Easy / PEiD. UPX → upx -d entpackt selbst. Themida/VMProtect = Wochen manuelles Unpacking erwarten.
  7. 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/man2 konsultieren.
  • 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

Validieren Sie das in Ihrer eigenen Umgebung.