TinyTracer - Cheatsheet do Tracer de API/Instrução para Unpacking
TinyTracer (por hasherezade) é uma ferramenta de rastreamento dinâmico construída no Intel Pin. Executa um executável alvo e produz um tracelog de chamadas de API e instruções selecionadas, registrando cada evento como um offset relativo ao módulo (RVA) para que a saída permaneça significativa mesmo para código realocado. Como Pin instrumenta em nível baixo, TinyTracer não é afetado pela maioria dos truques anti-debug que o stub de um empacotador usa, o que o torna excelente para identificar o Original Entry Point (OEP) de uma amostra e observar o que ela realmente faz.
Para análise de malware autorizada. Execute amostras não confiáveis apenas em uma VM/sandbox isolada.
Requisitos
- Intel Pin (o framework de binary instrumentation dinâmico)
- Análise VM do Windows (x86/x64)
TinyTracer.dll compilado do TinyTracer (Pintool)
Instalação
| Step | Como |
|---|
| Get Pin | Faça download do Intel Pin e defina PIN_ROOT |
| Get TinyTracer | Faça download de uma release ou construa o Pintool |
| Helper scripts | Use o run_me.bat / helper installers fornecidos |
| Verificar | Execute contra um EXE conhecido e verifique saída .tag/log |
Executando um Rastreamento
# Invocação conceitual (via helper ou pin diretamente)
pin.exe -t TinyTracer.dll -o output.tag -- target.exe
| Flag | Propósito |
|---|
-t TinyTracer.dll | Carregue TinyTracer como o Pintool |
-o FILE | Caminho do tracelog de saída (.tag) |
-m MODULE | Limite rastreamento a um módulo |
-b | Rastreie basic blocks / eventos mais granulares |
-- target args | O programa para rastrear e seus argumentos |
O Que o Tracelog Contém
| Entry | Significado |
|---|
RVA;called: FUNC | Uma chamada de API, em um endereço relativo ao módulo |
| Section transitions | Execução movendo-se entre seções (unpacking) |
| TLS callbacks | Hooks anti-análise/execução antecipados |
| Sub-calls | Opcionalmente, alvos de chamada interna |
O registro baseado em RVA é a chave: mesmo depois que um empacotador desempacota e salta para novo código, as entradas permanecem ancoradas ao módulo para que você possa mapeá-las de volta em um disassembler.
Encontrando o OEP
O uso clássico: observe onde a execução desembarca após o stub do empacotador terminar.
| Step | O que procurar |
|---|
| 1 | Execute a amostra empacotada sob TinyTracer |
| 2 | Veja um jump em uma seção previamente não escrita |
| 3 | Os primeiros “bursts” reais de API (GetModuleHandle, etc.) marcam código desempacotado |
| 4 | Anote o RVA — essa região é seu candidato a OEP |
| 5 | Dump nesse ponto (ex. com PE-sieve) e analise estaticamente |
| Ferramenta | Papel ao lado do TinyTracer |
|---|
| PE-sieve | Dump do módulo desempacotado encontrado no OEP |
| x64dbg | Defina um breakpoint no RVA do OEP para análise mais profunda |
| Detect It Easy | Identifique o empacotador antes de rastrear |
| Ghidra | Mapeie RVAs rastreados para disassembly |
Fluxos de Trabalho Comuns
# Rastreamento comportamental de uso de API de uma amostra
pin -t TinyTracer.dll -o sample.tag -- sample.exe
# → revise sample.tag para sequências de API suspeitas (crypto, network, injection)
# OEP hunting para um empacotador desconhecido
# 1) rastreie, 2) encontre a transição de seção para código desempacotado,
# 3) PE-sieve para dump, 4) analise o binário limpo
TinyTracer vs Abordagens Relacionadas
| Aspecto | TinyTracer | x64dbg (manual) | API Monitor |
|---|
| Base | Pin instrumentation | Interactive debugger | API hooking |
| Anti-debug resistance | Alta | Precisa de ScyllaHide | Moderada |
| Output | RVA tracelog | Interactive | Live API log |
| Melhor para | Rastreamento automático de OEP/comportamento | Stepping manual | Observação de chamadas de API |
Recursos