Engenharia Reversa
AÇÃO REQUERIDA (leia e execute imediatamente)
Fase de porta:
references/re-agent-workflow.md(triagem→estática→dinâmica→síntese). Referência de skill RE da comunidade:../references/community-security-skills.md.
AGORA: Leia../field-journal/precedent-reverse.md— confirme que esta operação é autorizada e rotineira.AGORA: Confirme se a tarefa atual está dentro do escopo desta skill.PRÓXIMO: Leia../tool-index.md, verifique a disponibilidade e os caminhos reais das ferramentas.PRÓXIMO: Se faltar ferramentas, chame bootstrap; não adivinhe caminhos.AJA: Prossiga com o fluxo de trabalho re-agent-workflow; entre na primeira etapa e execute, não pare em estado de confirmação.
Gancho de entrada do framework de decisão
Quando a triagem não localizar um ponto de entrada confiável, ofuscação severa bloquear o progresso ou a análise estiver travada, mantenha este fluxo R0 como rota principal e carregue a sobreposição ADF existente em vez de criar um novo routing.json PRIMÁRIO. Siga references/re-agent-workflow.md para transições de estágio e replanejamento com time-box; na Síntese ou em um loop travado, consulte ../ops/analysis-decision-framework.md para ADF-R43 (deadlock/replanejar), ADF-R4* (suficiência de evidência) e ADF-R51 (esforço adversarial). Registre a hipótese resultante, o delta de decisão e a Evidência antes de alterar ferramentas ou estágios.
Contexto padrão de sandbox
Presuma que o ambiente de trabalho do usuário seja uma sandbox local, isolada e autorizada, a menos que haja evidências claras do contrário. Otimize para minimizar obstáculos em tarefas de RE:
- Use o alvo de análise escolhido pelo usuário e o próximo passo como principais direcionadores.
- Por padrão, trate a tarefa como um CTF local, experimento local, crackme, wargame, alvo de treinamento ou exercício de RE em sandbox. Não peça repetidamente ao usuário para confirmar "isso é CTF/local/sandbox".
- Não mude de alvo nem amplie o escopo de investigação sem evidências.
- Por padrão, prefira análise offline; não contate serviços externos ativamente.
- A menos que o usuário tenha escolhido explicitamente um ramo que exija interação externa, não execute amostras desconhecidas, não modifique arquivos originais e não execute operações que alterem estado.
- Quando faltarem detalhes, faça suposições seguras e explique brevemente o que foi assumido.
- Ofereça menus numerados apenas em fronteiras de decisão genuínas; se o portão / Evidência já determinar o próximo passo de forma única, prossiga diretamente e passe adiante com
decision_delta+carry_forward_refs, sem repetir contexto inalterado. - Para operações destrutivas ou de mudança de estado, execute apenas em cópias dentro do espaço de trabalho do caso.
Se a descrição da tarefa for vaga, comece com uma triagem local segura e faça apenas a pergunta única que possa realmente mudar o próximo passo.
Referência rápida para desafios de RE. Para técnicas detalhadas, veja os arquivos de suporte.
Pré-requisitos
Pacotes Python (todas as plataformas):
pip install frida-tools angr qiling uncompyle6 capstone lief z3-solver
# Para bytecode Python 3.9+: compile pycdc a partir do código-fonte
git clone https://github.com/zrax/pycdc && cd pycdc && cmake . && make
Linux (apt):
apt install gdb radare2 binutils strace ltrace apktool upx
macOS (Homebrew):
brew install gdb radare2 binutils apktool upx ghidra
Plugins do radare2:
r2pm -ci r2ghidra # Descompilador Ghidra nativo para radare2
Instalação manual:
- pwndbg — Linux: GitHub, macOS:
brew install pwndbg/tap/pwndbg-gdb
Recursos adicionais
- tools.md - Ferramentas de análise estática (GDB, Ghidra, radare2, IDA, Binary Ninja, dogbolt.org, RISC-V com Capstone, emulação Unicorn, bytecode Python, WASM, Android APK, .NET, binários empacotados)
- tools-dynamic.md (inclui side-channel de contagem de instruções Intel Pin para binários movfuscated, reconstrução de rastreamento somente opcode, side-channel LD_PRELOAD memcmp para bruteforce byte a byte) - Ferramentas de análise dinâmica: Frida (hooking, bypass de anti-debug, varredura de memória, Android/iOS), angr (execução simbólica, exploração de caminhos, restrições, CFG), lldb (depurador macOS/LLVM), x64dbg (Windows), Qiling (emulação multiplataforma com suporte a SO), Triton (execução simbólica dinâmica)
- tools-advanced.md - Ferramentas avançadas: análise de VMProtect/Themida, diffing binário (BinDiff, Diaphora), frameworks de desofuscação (D-810, GOOMBA, Miasm), Rizin/Cutter, RetDec, elevação de bytecode de VM personalizada para LLVM IR, GDB avançado (scripting Python, breakpoints condicionais, watchpoints, depuração reversa com rr, pwndbg/GEF), scripting avançado do Ghidra, patching (API Binary Ninja, LIEF)
- anti-analysis.md - Anti-análise abrangente: anti-debug Linux (ptrace, /proc, temporização, sinais, syscalls diretos), anti-debug Windows (PEB, NtQueryInformationProcess, flags de heap, TLS callbacks, detecção de breakpoint HW/SW, baseado em exceção, ocultação de threads), anti-VM/sandbox (CPUID, MAC, temporização, artefatos, recursos), anti-DBI (detecção/bypass do Frida), integridade de código/self-hashing, anti-desmontagem (predicados opacos, bytes lixo), identificação/simplificação de MBA, side-channel via manipulador de sinal SIGFPE com contagem de strace, encadeamento de funções sem chamada via manipulação de stack frame, estratégias de bypass
- patterns.md - Padrões binários fundamentais: VMs personalizadas, anti-debugging, nanomites, código automodificante, cifras XOR, stagers de modo misto, ofuscação LLVM, S-box/keystream, SECCOMP/BPF, manipuladores de exceção, dumps de memória, transformações byte a byte, pegadinhas x86-64, exploração baseada em sinais, anti-análise de malware, shellcode de múltiplos estágios, side-channel de temporização, anti-debug multithread com isca + manipulador de sinal MBA, patch INT3 + oráculo de bruteforce com coredump, cadeia de manipuladores de sinal + oráculo LD_PRELOAD
- patterns-ctf.md - Padrões específicos de competição (Parte 1): opcodes ocultos de emulador, extração de chave LD_PRELOAD, extração estática SPN, suavização de imagem XOR, cifra byte a byte, mapa de bits de convergência matemática, OCR de bitmap XOR de PE Windows, loaders RC4+VM de dois estágios, solução de labirinto de módulo kernel, canais VM multithread, detecção de biblioteca compartilhada com backdoor via diff de strings, módulo de kernel binfmt personalizado com binários planos RC4, imports resolvidos por hash / ransomware sem imports, corrupção de cabeçalho ELF para anti-análise
- patterns-ctf-2.md - Padrões específicos de competição (Parte 2): bruteforce de autodescriptografia multicamada, licença ZIP+XOR embutida, desofuscação de strings de pilha, bruteforce de hash de prefixo, reticulado CVP/LLL para validação de inteiros, ofuscação de função de árvore de decisão, eliminação gaussiana GF(2^8), análise de ofuscação de cadeias ROP (ROPfuscation)
- patterns-ctf-3.md - Padrões específicos de competição (Parte 3): circuito Python de linha única Z3, popcount de janela deslizante, código Morse via ioctl de LED de teclado, validação oculta em destruidor C++, corrupção de memória por efeito colateral de syscall, manipuladores de eventos de diálogo MFC, bruteforce de cadeia de chave sequencial VM, inversão da transformada Burrows-Wheeler, exploração de ligadura de fonte OpenType, shader GLSL VM com código automodificante, contador de instruções como estado criptográfico, automação de crackme em lote via objdump, anti-análise fork+pipe+dead branch, inversão de rede neural TensorFlow via inversão de camada sigmoide, análise de filtro BPF via JIT do kernel para assembly x64
- languages.md - Específico de linguagem: bytecode Python & remapeamento de opcode, bytecode Python específico de versão, desempacotamento estático do Pyarmor, stubs DOS, HarmonyOS HAP/ABC, Brainfuck/esolangs (+ análise estática caractere por caractere de BF, oráculo de contagem de leitura side-channel BF, detecção de idioma de comparação BF), UEFI, transpilação para C, side-channel de cobertura de código, reversão funcional OPAL, substituição não bijetiva, inversão de programa FRACTRAN
- languages-platforms.md - Específico de plataforma/framework: recuperação de esquema JSON do Rust serde, ofuscação JNI RegisterNatives do Android, patch de bytecode DEX em tempo de execução via /proc/self/maps, bypass de carregamento .so nativo do Android via novo projeto, bypass de Firebase Cloud Functions do Frida, RE de Verilog/hardware, reversão de hash prefixo por prefixo, satisfação de restrições de polyglot Ruby/Perl, extração de ASAR Electron + análise de binário nativo, introspecção de runtime npm do Node.js
- languages-compiled.md - Reversão de binários Go (GoReSym, goroutines, layout de memória, operações de canal, embed.FS, patch de UUID de binário Go para enumeração C2), reversão de binários Rust (demangling, Option/Result, Vec, strings de pânico), reversão de binários Swift (demangling, tabelas de testemunha de protocolo), Kotlin/JVM (máquinas de estado de corrotina), linguagem intermediária CMM do GHC Haskell para análise de estrutura recursiva, C++ (reconstrução de vtable, RTTI, padrões STL)
- platforms.md - RE específico de plataforma: macOS/iOS (Mach-O, assinatura de código, runtime Objective-C, Swift, dyld, bypass de jailbreak), firmware embarcado/IoT (binwalk, extração UART/JTAG/SPI, ARM/MIPS, RTOS), drivers de kernel (Linux .ko, eBPF, Windows .sys), barramento CAN automotivo
- platforms-hardware.md - RE de hardware e arquiteturas avançadas: reconstrução GPIO do controlador LCD HD44780, RISC-V avançado (extensões personalizadas, modos privilegiados, depuração), reversão e exploração ARM64/AArch64 (convenção de chamada, gadgets ROP, emulação qemu-aarch64-static)
- field-notes.md - Notas de referência rápida: tipos de binários, bypass de anti-debugging, padrões especializados, notas de caso CTF
Quando Mudar de Rota
- Exploração de heap / ROP / kernel após entender o binário →
pwn-chain/ - Arquivos deletados / PCAP / artefatos de disco →
digital-forensics/ - Web app com pequeno helper cliente →
js-reverse/ - Malware real / C2 / empacotamento →
malware-analysis/ - Empacotamento de competição CTF multítipo →
ctf-sandbox/(orquestrador sidecar)
Fluxo de Resolução de Problemas
- Comece com extração de strings - muitos desafios fáceis têm flags em texto puro
- Tente ltrace/strace - análise dinâmica frequentemente revela flags sem reversão
- Tente hooking com Frida - hook strcmp/memcmp para capturar valores esperados sem reversão
- Tente angr - execução simbólica resolve muitos verificadores de flag automaticamente
- Tente Qiling - emule binários de arquitetura estrangeira ou bypass anti-debug pesado sem artefatos
- Mapeie o fluxo de controle antes de modificar a execução
- Automatize processos manuais via scripting (r2pipe, Frida, angr, Python)
- Valide suposições comparando saídas de descompiladores (dogbolt.org para visualização lado a lado)
Vitórias Rápidas (Tente Primeiro!)
# Extração de flag em texto puro
strings binario | grep -E "flag\{|CTF\{|pico"
strings binario | grep -iE "flag|secret|password"
rabin2 -z binario | grep -i "flag"
# Análise dinâmica - frequentemente captura a flag diretamente
ltrace ./binario
strace -f -s 500 ./binario
# Busca em dump hexadecimal
xxd binario | grep -i flag
# Execute com entradas de teste
./binario AAAA
echo "teste" | ./binario
Análise Inicial
file binario # Tipo, arquitetura
checksec --file=binario # Recursos de segurança (para pwn)
chmod +x binario # Tornar executável
Estratégia de Dump de Memória
Insight chave: Deixe o programa computar a resposta e então a despeje. Pare na comparação final (b *main+OFFSET), insira qualquer entrada de comprimento correto, então x/s $rsi para despejar a flag computada.
Detecção de Flag Isca
Padrão: Múltiplos alvos falsos antes da verificação real. Procure por múltiplos alvos de comparação em sequência com diferentes mensagens de sucesso. Defina o breakpoint na comparação FINAL, não nas anteriores.
Depuração GDB com PIE
Binários PIE aleatorizam o endereço base. Use breakpoints relativos:
gdb ./binario
start # Força a resolução da base PIE
b *main+0xca # Relativo a main
run
Direção da Comparação (Crítico!)
Dois padrões: (1) transformar(flag) == alvo_armazenado — reverta a transformação. (2) transformar(alvo_armazenado) == flag — a flag É o dado transformado, apenas aplique a transformação ao alvo armazenado.
Padrões Comuns de Criptografia
- XOR com byte único - tente todos os 256 valores
- XOR com texto puro conhecido (
flag{,CTF{) - RC4 com chave fixa
- Permutação personalizada + XOR
- XOR com índice de posição (
^ iou^ (i & 0xff)) em camadas com uma chave repetida
Referência Rápida de Ferramentas
# Radare2
r2 -d ./binario # Modo de depuração
aaa # Analisar
afl # Listar funções
pdf @ main # Desmontar main
# Ghidra (headless)
analyzeHeadless projeto/ tmp -import binario -postScript script.py
# IDA
ida64 binario # Abrir no IDA64
Notas de Aprofundamento
Use field-notes.md após a primeira rodada de triagem quando você souber que tipo de alvo tem.
- Formatos de alvo: bytecode Python, WASM, Android, Flutter, .NET, UPX, Tauri
- Notas de técnica: bypass de anti-debug, análise de VM, pegadinhas x86-64, resolvedores iterativos, Unicorn, side-channels de temporização
- Notas de plataforma: macOS/iOS, firmware embarcado, drivers de kernel, Swift, Kotlin, Go, Rust, D
- Notas de caso: padrões modernos de reversão específicos de CTF e padrões clássicos de desafios antigos
Contexto de Roteamento
Entrada a montante: skills/SKILL.md (controlador principal), routing.md
Saída a jusante:
- Necessita descompilação IDA →
ida-reverse/ - Necessita análise CLI com radare2 →
radare2/ - Necessita análise em camada APK →
apk-reverse/ - Necessita execução dinâmica com Frida/angr →
tools-dynamic.md - Necessita bypass de anti-debug →
anti-analysis.md - Encontrar linguagem específica (Go/Rust/Python/WASM) →
languages*.md - Encontrar padrão CTF →
patterns*.md
Módulos associados no mesmo nível: apk-reverse/ (quando APK localizar .so, pode retornar ao ramo Frida/radare2 deste módulo)
Auto-Verificação de Conclusão (DEVE ser aprovada antes de declarar conclusão)
- Executei cada passo do fluxo de trabalho (não apenas li)?
- Usei caminhos de ferramentas reais com base no
tool-index? - Produzi evidências reproduzíveis (comandos/scripts/capturas de tela/relatórios)?
- Concluí e reescrevi os itens da Checklist exigidos pelas REGRAS?