TinyTracer - API/Instruction-Tracer zum Auspacken-Spickzettel
TinyTracer (von hasherezade) ist ein dynamisches Tracing-Tool, das auf Intel Pin gebaut ist. Es führt eine ausführbare Zieldatei aus und produziert ein Tracelog von API-Aufrufen und ausgewählten Anweisungen, wobei jedes Ereignis als Offset relativ zum Modul (RVA) loggt, sodass die Ausgabe auch für verlegte Code sinnvoll bleibt. Da Pin auf niedriger Ebene instrumentiert, ist TinyTracer unbeeindruckt von den meisten Anti-Debug-Tricks, die ein Packer-Stub verwendet, was es ausgezeichnet zum Lokalisieren des Original Entry Point (OEP) eines Samples und zum Beobachten, was es tatsächlich tut, macht.
Nur für autorisierte Malware-Analyse. Führen Sie nicht vertrauenswürdige Samples nur in einer isolierten VM/Sandbox aus.
Anforderungen
- Intel Pin (das dynamische binäre Instrumentierungs-Framework)
- Windows (x86/x64) Analyse-VM
- Kompiliertes TinyTracer
TinyTracer.dll (Pintool)
Installation
| Schritt | Wie |
|---|
| Get Pin | Intel Pin herunterladen und PIN_ROOT setzen |
| Get TinyTracer | Ein Release herunterladen oder das Pintool bauen |
| Helper-Skripte | Gebündelte run_me.bat / Installer-Helper verwenden |
| Verifizieren | Gegen eine bekannte EXE ausführen und .tag/Log-Ausgabe überprüfen |
Einen Trace ausführen
# Konzeptioneller Aufruf (über den gebündelten Helper oder Pin direkt)
pin.exe -t TinyTracer.dll -o output.tag -- target.exe
| Flag | Zweck |
|---|
-t TinyTracer.dll | TinyTracer als Pintool laden |
-o FILE | Tracelog (.tag)-Pfad-Ausgabe |
-m MODULE | Tracing auf ein Modul begrenzen |
-b | Basic Blocks / detailliertere Events tracen |
-- target args | Das zu verfolgende Programm und seine Argumente |
Was das Tracelog enthält
| Eintrag | Bedeutung |
|---|
RVA;called: FUNC | Ein API-Aufruf, unter einer Modul-relativen Adresse |
| Section-Übergänge | Ausführung zwischen Abschnitten (Unpacking) |
| TLS-Callbacks | Frühe Anti-Analyse/Ausführungs-Hooks |
| Sub-Aufrufe | Optional interne Call-Ziele |
Die RVA-basierte Protokollierung ist der Schlüssel: Auch nachdem ein Packer auspackt und in neuen Code springt, bleiben Einträge an das Modul verankert, sodass Sie sie in einem Disassembler zurückabbilden können.
OEP finden
Der klassische Verwendungsfall: Beobachten Sie, wo die Ausführung nach Abschluss des Packer-Stubs landet.
| Schritt | Worauf zu suchen |
|---|
| 1 | Führe das gepackte Sample unter TinyTracer aus |
| 2 | Beobachte einen Sprung in einen zuvor nicht geschriebenen Abschnitt |
| 3 | Die erste “echte” API-Explosionen (GetModuleHandle, usw.) kennzeichnen ungepackten Code |
| 4 | Notiere die RVA — diese Region ist dein OEP-Kandidat |
| 5 | Dump an diesem Punkt (z.B. mit PE-sieve) und analysiere statisch |
| Tool | Rolle neben TinyTracer |
|---|
| PE-sieve | Dump das ungepackte Modul am OEP gefunden |
| x64dbg | Breakpoint am OEP-RVA für tiefere Analyse setzen |
| Detect It Easy | Packer vor dem Tracing identifizieren |
| Ghidra | Verfolgte RVAs der Disassembly zuordnen |
Häufige Workflows
# Behavioral-Trace der API-Nutzung eines Samples
pin -t TinyTracer.dll -o sample.tag -- sample.exe
# → sample.tag auf verdächtige API-Sequenzen (Krypto, Netzwerk, Injection) überprüfen
# OEP-Jagd für einen unbekannten Packer
# 1) trace, 2) find the section-transition in ungepackter Code,
# 3) PE-sieve zum Dump, 4) analyzed die saubere Binärdatei
TinyTracer im Vergleich zu verwandten Ansätzen
| Aspekt | TinyTracer | x64dbg (manuell) | API Monitor |
|---|
| Basis | Pin-Instrumentierung | Interaktiver Debugger | API-Hooking |
| Anti-Debug-Widerstand | Hoch | Benötigt ScyllaHide | Moderat |
| Ausgabe | RVA-Tracelog | Interaktiv | Live-API-Log |
| Best für | Automatisiertes OEP/Behavior-Tracing | Hands-On-Stepping | Beobachten von API-Aufrufen |
Ressourcen