TinyTracer - Cheatsheet API/Instruction Tracer per Unpacking
TinyTracer (by hasherezade) è uno strumento di dynamic tracing costruito su Intel Pin. Esegue un eseguibile target e produce un tracelog di API call e istruzioni selezionate, loggando ogni evento come un offset relativo al modulo (RVA) così l”output rimane significativo anche per codice rilocalizzato. Poiché Pin strumenta a basso livello, TinyTracer è ininfluenzato dalla maggior parte dei trucchi anti-debug che uno stub packer usa, che lo rende eccellente per individuare il Original Entry Point (OEP) di un campione e osservare cosa effettivamente fa.
Per authorized malware analysis. Esegui campioni untrusted solo in una sandbox VM isolata.
Requisiti
- Intel Pin (il dynamic binary instrumentation framework)
- Windows (x86/x64) analysis VM
- La
TinyTracer.dll compilata di TinyTracer (Pintool)
Installazione
| Passo | Come |
|---|
| Get Pin | Scarica Intel Pin e imposta PIN_ROOT |
| Get TinyTracer | Scarica una release o build il Pintool |
| Helper scripts | Usa i bundled run_me.bat / installer helpers |
| Verifica | Esegui contro un EXE noto e controlla l”output .tag/log |
Esecuzione di un Trace
# Invocazione concettuale (via l''helper bundled o pin direttamente)
pin.exe -t TinyTracer.dll -o output.tag -- target.exe
| Flag | Scopo |
|---|
-t TinyTracer.dll | Carica TinyTracer come Pintool |
-o FILE | Percorso output tracelog (.tag) |
-m MODULE | Limita il tracing a un modulo |
-b | Traccia basic blocks / eventi più granulari |
-- target args | Il programma da tracciare e i suoi argomenti |
Cosa Contiene il Tracelog
| Entry | Significato |
|---|
RVA;called: FUNC | Una API call, in un indirizzo module-relativo |
| Section transitions | Esecuzione che si muove tra sezioni (unpacking) |
| TLS callbacks | Early anti-analysis/execution hooks |
| Sub-calls | Opzionalmente, internal call targets |
Il logging basato su RVA è la chiave: anche dopo che un packer unpacca e salta in nuovo codice, gli entry rimangono ancorati al modulo così puoi mapparli back in un disassembler.
Trovare l”OEP
Il classico uso: osserva dove l”esecuzione atterra dopo che lo stub packer finisce.
| Passo | Cosa cercare |
|---|
| 1 | Esegui il campione packed sotto TinyTracer |
| 2 | Osserva un salto in una sezione precedentemente-non-scritta |
| 3 | I primi “veri” API bursts (GetModuleHandle, etc.) marcano il codice unpacked |
| 4 | Nota l”RVA — quella regione è il tuo candidato OEP |
| 5 | Dumpa a quel punto (e.g. con PE-sieve) e analizza staticamente |
| Tool | Ruolo insieme a TinyTracer |
|---|
| PE-sieve | Dumpa il modulo unpacked trovato all”OEP |
| x64dbg | Imposta un breakpoint all”RVA dell”OEP per analisi più profonda |
| Detect It Easy | Identifica il packer prima di tracciare |
| Ghidra | Mappa gli RVA tracciati al disassembly |
Workflow Comuni
# Behavioral trace dell''utilizzo API di un campione
pin -t TinyTracer.dll -o sample.tag -- sample.exe
# → review sample.tag per sequenze API sospette (crypto, network, injection)
# OEP hunting per un packer sconosciuto
# 1) trace, 2) trova il section-transition nel codice unpacked,
# 3) PE-sieve per dumpare, 4) analizza il binario pulito
TinyTracer vs Approcci Correlati
| Aspetto | TinyTracer | x64dbg (manual) | API Monitor |
|---|
| Basis | Pin instrumentation | Interactive debugger | API hooking |
| Anti-debug resistance | High | Needs ScyllaHide | Moderate |
| Output | RVA tracelog | Interactive | Live API log |
| Best for | Automated OEP/behavior tracing | Hands-on stepping | Watching API calls |
Risorse