Engenharia Reversa & Depuração
⚠️ USO AUTORIZADO APENAS — HABILIDADE DE PESQUISA DEFENSIVA
Esta skill documenta metodologia de engenharia reversa para:
- Competições CTF e educação em segurança
- Testes de penetração autorizados (com permissão explícita por escrito)
- Pesquisa acadêmica e divulgação de vulnerabilidades
- Análise de software que você possui ou tem autoridade legal para inspecionar
- Análise de malware em ambientes de pesquisa isolados
Responsabilidades do operador do agente ao invocar esta skill:
- Agir apenas sobre binários, firmware ou aplicações que o usuário tenha autoridade legal para analisar
- NÃO executar conteúdo baixado ou interceptado de fontes não confiáveis
- NÃO ingerir dados binários, capturas de rede ou amostras de malware como contexto de prompt
- Tratar quaisquer dados extraídos durante a análise como não confiáveis (sandbox antes de processamento adicional)
- Recusar tarefas que visem sistemas, aplicações ou dados que o usuário não possua ou não tenha permissão explícita para analisar
Todos os comandos documentados aqui exigem arquivos locais fornecidos pelo usuário. A skill NÃO instrui o agente a baixar da internet ou exfiltrar dados. Quaisquer URLs mostradas são placeholders ou referências informativas.
Esta é uma skill de documentação/referência — ela não executa código automaticamente. O agente lê este texto e aconselha o usuário sobre quais comandos ele pode executar.
Metodologia profissional para análise estática, análise dinâmica, depuração e exploração binária.
Referência Rápida — Carregue o Arquivo de Referência Correto
| Tarefa | Arquivo de Referência |
|---|---|
| Análise estática, desmontagem, Ghidra, radare2, objdump, patching | references/static-analysis.md |
| GDB (+ pwndbg/gef/peda), LLDB, strace/ltrace, análise de crash | references/dynamic-debugging.md |
| Android APK, DEX, smali, ADB, Frida no Android, reempacotamento | references/android-re.md |
| iOS IPA, Mach-O, class-dump, Frida ObjC/Swift, Keychain | references/ios-re.md |
| macOS XPC, launchd, kext, SIP, módulos de kernel Linux | references/macos-kernel-re.md |
| Windows PE, WinDbg, x64dbg, .NET/dnSpy, drivers de kernel | references/windows-re.md |
| Scripts Frida, hooking Java/Native/ObjC, despinning SSL, gadget | references/frida.md |
| .NET IL, dnSpy, de4dot, Java/JVM, Kotlin, Unity/IL2CPP, Mono | references/managed-code-re.md |
| Malware, ofuscação, análise de packers, extração de IOC, Volatility | references/malware-analysis.md |
| CTF pwn/rev, BOF, ROP, exploração de heap, pwntools, angr/Z3 | references/exploit-dev.md |
| RE de protocolos de rede, Wireshark, mitmproxy, Protobuf, gRPC, dissectores Lua, Boofuzz | references/protocol-re.md |
| Firmware, binwalk, emulação QEMU, JTAG/UART, U-Boot, IoT | references/firmware-embedded.md |
| EAC, BattlEye, Vanguard, FACEIT, VAC, análise de AC de kernel | references/anticheat-re.md |
| Scripts Ghidra Python/Java, headless, descoberta de vulnerabilidades, analisadores personalizados | references/ghidra-scripting.md |
| Scripts IDAPython / IDALib, API Hex-Rays, descompilação em lote, helpers OLLVM | references/idapython.md |
| Emulação com Unicorn engine, emulação em nível de função, stubbing JNI, simulação de syscall | references/unicorn-emulation.md |
| Recuperação de símbolos removidos, números mágicos, chamadas emparelhadas, análise de xref | references/symbol-recovery.md |
| Recuperação de estruturas C/C++, vtables, std::string/vector/map, inferência de tipo de campo | references/struct-recovery.md |
Ferramentas Inclusas (tools/)
A skill fornece utilitários complementares prontos para uso (todos trabalho original, licenciados sob MIT):
| Ferramenta | Propósito |
|---|---|
tools/ida_export_plugin.py | Plugin para IDA Pro (Ctrl-Shift-E) — exporta o IDB para um diretório decompile/ com arquivos de texto simples que um agente pode ler diretamente |
tools/dex_memory_dumper.js | Agente Frida — despeja DEX de um processo Android em execução via varredura de memória + travessia de ClassLoader |
tools/mcp/ | Notas de configuração e trechos de configuração para conectar agentes a servidores MPC upstream (ida-pro-mcp, GhidraMCP, r2mcp) |
Consulte tools/README.md para detalhes de uso. O diretório tools/mcp/ documenta o fluxo de trabalho de consulta ao vivo (alternativa à exportação de arquivos) — ambos os modos são suportados pelos arquivos de metodologia acima.
Primeiros Passos Universais
Antes de carregar qualquer arquivo de referência, estabeleça o contexto:
1. Identifique o Alvo
file <binary> # tipo de arquivo, arquitetura, bits, removido?
xxd <binary> | head -4 # bytes mágicos
strings -a <binary> | head -60
checksec --file=<binary> # NX, PIE, RELRO, stack canary, ASLR
Árvore de decisão de formato de binário:
- ELF → Linux nativo →
references/static-analysis.md+references/dynamic-debugging.md - PE/PE32+ → Windows nativo →
references/windows-re.md+references/static-analysis.md - PE com metadados .NET →
references/managed-code-re.md(dnSpy primeiro) - Mach-O → macOS/iOS →
references/macos-kernel-re.md+references/ios-re.md - DEX/APK/AAB → Android →
references/android-re.md - JAR/WAR/AAR → Java →
references/managed-code-re.md - Driver .sys →
references/windows-re.md(seção de kernel) oureferences/anticheat-re.md - Assembly-CSharp.dll → Unity →
references/managed-code-re.md(seção Unity) - Desconhecido/firmware →
references/firmware-embedded.md(binwalk + entropia)
Árvore de decisão de tipo de tarefa (aplica-se a qualquer formato):
- Binário removido, funções desconhecidas →
references/symbol-recovery.md - Layouts de struct desconhecidos na descompilação →
references/struct-recovery.md - Preciso executar apenas uma função isoladamente →
references/unicorn-emulation.md - Usando IDA Pro para análise →
references/idapython.md - Usando Ghidra para análise →
references/ghidra-scripting.md
2. Estabeleça o Escopo
Pergunte ao usuário (ou infira do contexto):
- Objetivo: entender a lógica / encontrar vuln / ignorar proteção / patch / flag CTF / IOCs de malware?
- Plataforma: Linux / Windows / macOS / Android / iOS / embarcado?
- Ferramentas disponíveis: Ghidra / IDA / radare2 / Binary Ninja / Hopper?
- Dinâmico possível?: Podemos executar? VM? Emulador? Dispositivo físico?
3. Escolha o Modo de Análise
Somente estática → Sem risco de execução, compreensão mais lenta
Somente dinâmica → Rápida, mas perde código morto
Estática + Dinâmica (recomendado) → Estática para mapa, dinâmica para verdade em tempo de execução
Resumo da Cadeia de Ferramentas Principal
Estática
| Ferramenta | Melhor Para |
|---|---|
Ghidra | Descompilação completa, scripts, gratuita |
radare2 / cutter | Poder de linha de comando, scripts, embarcado |
Binary Ninja | API-first, rápido, comercial |
IDA Pro / IDA Free | Padrão da indústria, melhores assinaturas |
objdump | Desmontagem rápida, sem instalação |
readelf / nm | Inspeção de símbolos/seções ELF |
jadx | Android DEX → Java, GUI |
apktool | Desempacotar/rempacotar APK, smali |
Dinâmica
| Ferramenta | Melhor Para |
|---|---|
GDB + pwndbg/peda/gef | Depuração de ELF Linux |
LLDB | Depuração macOS/iOS/Swift |
Frida | Hooking multiplataforma, sem código fonte |
strace / ltrace | Rastreamento de syscall/chamada de biblioteca |
Valgrind | Erros de memória, Helgrind |
WinDbg | Modo kernel + usuário Windows |
x64dbg | Depurador GUI Windows |
Rede
| Ferramenta | Melhor Para |
|---|---|
Wireshark / tshark | Captura + dissecação de pacotes |
mitmproxy / Burp Suite | MITM HTTP/S |
Frida | Despinning SSL em processo |
tcpdump | Captura headless |
Frameworks de Metodologia
Fluxo de Trabalho de Análise Estática
1. file + strings + checksec → triagem rápida
2. Análise de entropia → compactado/criptografado?
3. Tabela de importação / tabela de símbolos → entender capacidades
4. Carregar no descompilador → renomear, retipar, anotar
5. Identificar funções-chave → main(), crypto, rede, anti-debug
6. Rastrear fluxo de dados → entrada do usuário → sumidouro
7. Documentar descobertas → comentar inline
Fluxo de Trabalho de Análise Dinâmica
1. Configurar ambiente isolado → VM / contêiner / dispositivo
2. Executar com strace/ltrace primeiro → entender pegada de syscall
3. Anexar depurador → definir breakpoints em funções-chave
4. Observar comportamento em tempo real → memória, registradores, branches tomados
5. Correlacionar com estática → validar saída do descompilador
6. Aplicar patch/hook conforme necessário → ignorar verificações, registrar valores
Fluxo de Trabalho de Descoberta de Vulnerabilidades
1. Mapeamento de superfície de ataque → entradas: arquivo, rede, variáveis de ambiente, argumentos
2. Busca de funções perigosas → strcpy, gets, sprintf, memcpy, system
3. Candidatos a estouro de inteiro → cálculos de tamanho, loops
4. Candidatos a string de formato → printf(user_input)
5. Candidatos a UAF / dupla liberação → padrões de alocação de heap
6. Gatilho + confirmação → crash → controlado → explorável
Bypass de Anti-Análise — Referência Rápida
Detecção de Anti-Debug
# Verificar se o binário detecta depurador
strings <bin> | grep -iE "ptrace|debugger|isDebuggerPresent|TracerPid"
# Linux: autodetecção ptrace
# Bypass: hook de pré-carregamento ou patch da chamada ptrace
Proteções Comuns
| Proteção | Detecção | Bypass |
|---|---|---|
ptrace anti-debug | strace mostra ptrace(TRACEME) | Patch JNZ→JMP ou LD_PRELOAD com ptrace falso |
| Verificações de tempo | rdtsc / clock_gettime em loop | Patch comparação ou NOP |
| Checksum/integridade | Hash da própria seção .text | Patch após descriptografia, antes da verificação |
| Packer (UPX etc.) | Alta entropia + poucos imports | upx -d / despejar da memória após descompactar |
| Strings ofuscadas | Nenhuma string legível | Executar + extrair da memória / hook Frida |
| SSL pinning (mobile) | Falha de rede no app | Frida ssl-unpin / ver references/frida.md |
Padrões de Saída
Ao relatar descobertas de RE, sempre estruture a saída como:
## Binário: <nome>
- **Formato**: ELF64 / PE32+ / DEX / Mach-O
- **Arquitetura**: x86_64 / ARM64 / ARMv7 / MIPS
- **Removido**: Sim/Não | **PIE**: Sim/Não | **NX**: Sim/Não
## Principais Descobertas
1. <nome da função @ offset> — <o que ela faz>
2. ...
## Vulnerabilidade / Comportamento
- <descrição com evidência>
- Offset: 0x<endereço>
- Acionável via: <vetor de entrada>
## Próximos Passos Recomendados
- [ ] <ação>
Convenções de Nomenclatura para Trabalho de Descompilador
Siga estes padrões ao anotar no Ghidra / IDA / r2:
Funções: verbo_substantivo_contexto → decrypt_config_xor, check_license_hwid
Variáveis: tipo_propósito → buf_user_input, sz_packet, ptr_heap_chunk
Structs: ST_<nome> → ST_PacketHeader, ST_LicenseData
Rótulos: loc_<propósito> → loc_anti_debug_fail, loc_success
Iniciadores Rápidos de Scripts
Consulte references/frida.md para padrões Frida completos.
One-liner Python para GDB (registrar argumentos de função)
# No GDB: carregar este arquivo
import gdb
class LogArgs(gdb.Breakpoint):
def stop(self):
frame = gdb.selected_frame()
print(f"[*] {frame.name()} rdi={gdb.parse_and_eval('$rdi')} rsi={gdb.parse_and_eval('$rsi')}")
return False # não parar, apenas registrar
LogArgs("target_function")
Análise em lote com radare2
r2 -A -q -c "afl~suspicious; pdf @ sym.check_license" <binary>
Análise headless com Ghidra
$GHIDRA_HOME/support/analyzeHeadless /tmp/proj MyProject \
-import <binary> -postScript PrintAST.java -scriptPath ~/ghidra_scripts