A engenharia reversa é o processo de desconstruir software ou hardware para entender como ele funciona sem ter acesso ao código-fonte nem aos documentos de projeto originais. Em cibersegurança, os pentesters a usam para analisar malware, descobrir vulnerabilidades ocultas e verificar se um sistema se comporta como a documentação afirma. O time da Fluid Attacks ficou em 9º lugar mundial no Hack The Box Business CTF 2025 aplicando exatamente essas técnicas.
O que é engenharia reversa?
Por pura curiosidade, uma criança pode pegar um aparelho e desmontá-lo, se perguntando quais elementos existem lá dentro e como eles se encaixam para funcionar. Algo parecido pode ser feito por um adulto em uma oficina, mas com a intenção de consertar um motor que, por alguma razão desconhecida, parou de funcionar. Também há a mulher que, no trabalho, tem a missão de desconstruir o programa em que outros trabalharam antes, apenas para renovar e melhorar algumas de suas características de desempenho. Todos eles aplicaram o que se conhece como engenharia reversa.
A engenharia reversa é um processo de desconstrução. Trata-se de reverter as etapas do desenvolvimento para analisar e obter conhecimento sobre qualquer coisa projetada e elaborada, principalmente, por seres humanos. Essa coisa pode ser uma substância química, uma máquina, um código de software ou outro tipo de objeto. A engenharia reversa busca revelar e determinar os detalhes mais internos, os componentes e suas relações, e por fim descobrir como o objeto em questão foi projetado e produzido.
Estas são algumas das razões pelas quais a engenharia reversa é empregada:
Informação sobre um produto: a documentação se perdeu, está inacessível ou simplesmente nunca existiu, e não há contato com o fabricante.
Análise de um produto: saber como funciona, quais componentes tem, definir custos e identificar possíveis violações de direitos autorais.
Atualização ou correção do funcionamento do produto.
Auditoria ou avaliação de segurança de um produto.
Criação de duplicatas de um produto sem licença.
Questão de concorrência: entender o que os concorrentes fazem e o que caracteriza seus produtos.
Simples curiosidade e aprendizado sobre a estrutura de um produto.
No contexto da tecnologia da informação, podemos aplicar engenharia reversa a hardware ou software. Aqui o foco é a engenharia reversa de software. Basicamente, essa engenharia pega um produto de software "final" — muitas vezes um binário compilado ou um arquivo executável — e trabalha de trás para frente para descobrir sua lógica, estrutura e funcionalidade subjacentes — especialmente quando falta a documentação de projeto original ou o código-fonte, ou quando não é possível acessá-los —, normalmente com o objetivo de consertá-lo ou melhorá-lo. Diz-se que esse processo surgiu da manutenção e do suporte de software, em boa parte da análise de malware.
Por que a engenharia reversa é essencial em cibersegurança?
Embora a engenharia reversa tenha aplicações mais amplas (duplicação de produtos, interoperabilidade, modernização de sistemas legados), seu papel em cibersegurança é inequivocamente preventivo e defensivo. Ela funciona sobretudo como um mecanismo fundamental para a descoberta de vulnerabilidades e a análise de malware. Em outras palavras: no campo da segurança, a engenharia reversa de software deixa de ser uma ferramenta analítica geral e passa a ser uma técnica necessária para proteger ativos digitais.
Análise de malware e inteligência de ameaças
A aplicação mais comum da engenharia reversa em cibersegurança é a dissecação de software malicioso. Os agentes de ameaça usam com frequência técnicas de ofuscação e criptografia para esconder a verdadeira natureza do seu código, o que torna a análise de segurança tradicional ineficaz. Quem faz engenharia reversa consegue desmascarar essas ameaças.
Ao desmontar binários de malware, os analistas conseguem determinar com precisão:
Payload e objetivos: o que o malware foi projetado para fazer (por exemplo, roubar dados, criptografar arquivos, instalar um backdoor).
Técnicas de evasão: como o código malicioso se esconde do antivírus ou opera discretamente dentro de um sistema comprometido.
Estrutura de comando e controle (C2): como ele se comunica com seus operadores para receber novas instruções ou exfiltrar dados.
Indicadores de comprometimento (IOCs): dados críticos (nomes de arquivo, chaves de registro, endereços de rede) que reforçam a resposta a incidentes de uma organização e ajudam a desenvolver assinaturas e correções definitivas.
Esse entendimento detalhado e de baixo nível é vital para criar contramedidas eficazes, como novas assinaturas de antivírus, regras de firewall e correções de sistema.
Descoberta e auditoria de vulnerabilidades
A engenharia reversa é essencial na pesquisa de vulnerabilidades, em que os especialistas em segurança caçam de forma proativa falhas que os atacantes poderiam explorar. Ao examinar aplicações — principalmente as que lidam com dados sensíveis ou estão expostas à internet — no nível de assembly ou de código-fonte, os profissionais descobrem fraquezas que costumam ser invisíveis para testes externos de caixa-preta. Isso inclui identificar:
Práticas de codificação inseguras
Falhas em algoritmos de criptografia proprietários
Estouros de buffer e outros problemas de corrupção de memória
Identificar essas brechas antes dos agentes maliciosos permite o desenvolvimento oportuno de correções e patches, o que melhora bastante a postura de segurança do software.
Perícia forense digital e resposta a incidentes
Depois de um incidente de segurança ou de um vazamento de dados, a engenharia reversa tem papel central na perícia forense digital. Os especialistas usam a técnica para entender o alcance completo de um ataque por meio de:
dissecação de artefatos de software ou arquivos de sistema modificados deixados pelo atacante;
reconstrução das ações e dos métodos do atacante para rastrear a origem do ataque;
coleta de evidências legalmente admissíveis relacionadas ao vazamento.
Com base nessas análises, as organizações afetadas e as partes interessadas podem receber recomendações e implementar medidas preventivas e reativas diante de possíveis incidentes futuros, para garantir a própria segurança e a de seus clientes ou usuários.
Engenharia reversa na Fluid Attacks
Para o nosso time, engenharia reversa não é teoria, e ela sempre acontece dentro do mesmo framework de hacking ético que aplicamos em cada projeto: nossos pentesters só analisam os sistemas, binários ou componentes que o cliente nos autorizou explicitamente a testar, e sempre no interesse dele. Dentro do nosso serviço, a engenharia reversa é uma das três técnicas manuais de detecção de vulnerabilidades em que nos apoiamos, ao lado dos testes de penetração como serviço (PTaaS) e da revisão de código seguro (SCR), justamente para pegar a lógica oculta e os segredos que a varredura automatizada sozinha deixaria passar.
Essa capacidade também aparece fora do trabalho com clientes. No Hack The Box Business CTF 2025, os pentesters da Fluid Attacks ficaram em 9º lugar mundial e em 1º na América Latina, resolvendo desafios da categoria Reversing que incluíam desofuscação de firmware e engenharia reversa de máquinas virtuais — uma subida em relação ao 35º lugar em 2024 e ao 80º em 2021. A escalada segue um processo consistente: análise estática para mapear a estrutura de cada binário, análise dinâmica para observar como ele de fato se comporta, e documentação disciplinada o bastante para se sustentar sob a pressão de tempo de uma competição — a mesma abordagem de três fases descrita mais adiante neste artigo, executada aqui por um time de 14 pessoas que soma 41 certificações profissionais.
Essa diferença entre detecção manual e automatizada não é anedótica: medimos o que a engenharia reversa manual encontra e a varredura automatizada SAST/SCA não vê:
Fonte | O que mediu | Resultado manual (pentester) | Resultado da ferramenta automatizada |
|---|---|---|---|
Benchmark de ferramentas de AppSec da Fluid Attacks (36 ferramentas SAST/DAST/SCA, 1.201 vulnerabilidades) | Precisão e recall de detecção | 100 % de precisão, 89,6 % de recall | Scanner com melhor desempenho: 22,7 % de abrangência, 8,8 % da exposição ao risco |
Relatório State of Attacks 2026 da Fluid Attacks | Percentual detectado da exposição ao risco por vulnerabilidades críticas | 90 % da exposição ao risco crítico | — |
Relatório State of Attacks 2026 da Fluid Attacks | Exposição total ao risco detectada em relação a testes automatizados apenas | ~5x mais risco detectado | Linha de base |
A engenharia reversa, junto com a revisão manual de código, é uma das técnicas por trás dessa diferença: ela pega lógica oculta, backdoors e comportamento ofuscado que um scanner não foi construído para interpretar, porque não existe um padrão de código-fonte com o qual comparar.
Veja em detalhe como fizemos: How to get into the top 10 at HTB Business CTF conta como o time se preparou, as categorias além de reversing e o que estamos melhorando para o ano que vem.
As fases da engenharia reversa de software
Podemos separar a engenharia reversa de software em duas etapas principais. A primeira pode ser vista como uma observação em larga escala, um panorama de alto nível para determinar a estrutura geral do software analisado e, às vezes, suas áreas de interesse especial. Essa etapa envolve o uso de várias ferramentas e de diversos serviços do sistema operacional, que permitem adquirir informação, rastrear entradas e saídas e inspecionar executáveis, entre outras coisas. A segunda etapa é mais profunda e granular, voltada a trechos de código para entendê-los em sua estrutura e funcionalidade.
Este é o processo de três passos, mais detalhado e comumente reconhecido, aplicado na maioria dos trabalhos de engenharia reversa:
1. Extração de informação e análise estática
Esta fase inicial se concentra em reunir todos os dados possíveis sobre o software sem executá-lo (análise estática).
Descoberta de ativos: identificar o tipo de arquivo, as ferramentas de compilação, os recursos embutidos e os metadados relevantes (por exemplo, carimbos de data/hora, verificações de integridade).
Desmontagem: o executável é processado em um desmontador (disassembler) para converter o código de máquina bruto (binário ou hexadecimal) em linguagem assembly, uma representação de baixo nível e legível por humanos das instruções do processador.
Descompilação: o analista usa um descompilador para transformar o código compilado (binário ou assembly) em uma linguagem de nível mais alto e mais compreensível, muitas vezes pseudocódigo C ou C++. Embora esse código não seja o fonte original, ele dá uma visão bem mais clara da lógica, do fluxo de controle e das estruturas de dados do programa.
Esta fase busca criar um modelo conceitual do software, muitas vezes por meio de diagramas de fluxo de dados ou diagramas de estrutura, que mapeiam como as diferentes partes do programa interagem.
2. Análise dinâmica e observação
Esta fase envolve executar o programa em um ambiente controlado e isolado (um sandbox ou uma máquina virtual) para observar seu comportamento em tempo real.
Depuração: usa-se um depurador para executar o código linha a linha, definir breakpoints em pontos críticos e inspecionar o estado do programa — incluindo o conteúdo de registradores de memória e variáveis — em diferentes etapas. Isso é essencial para entender como o código lida com dados, manipula o sistema e interage com serviços externos.
Monitoramento de rede: usam-se ferramentas para capturar e analisar o tráfego de rede gerado pela aplicação, algo essencial para entender protocolos de comunicação, canais de comando e controle e tentativas de exfiltração de dados.
Esta fase acrescenta contexto de execução aos achados estáticos e verifica se as possíveis vulnerabilidades no nível do código são de fato exploráveis em um ambiente vivo.
3. Reconstrução, documentação e mitigação
A fase final consolida toda a informação para alcançar os objetivos de segurança esperados.
Reconstrução: os dados analisados são usados para reconstruir por completo a lógica e o projeto do software, o que dá um entendimento detalhado de sua postura de segurança.
Documentação: todos os achados — vulnerabilidades, mecanismos do malware e possíveis caminhos de ataque — são documentados com detalhe.
Mitigação: esse conhecimento é traduzido em medidas de segurança acionáveis, como desenvolver correções, criar assinaturas de detecção ou implementar novas práticas de codificação defensiva.
Conjunto essencial de ferramentas para engenharia reversa
Quem faz engenharia reversa se apoia em um conjunto específico de ferramentas — muitas não projetadas diretamente para essa disciplina — que ajudam a traduzir instruções de máquina em lógica compreensível para humanos e a observar o comportamento do programa em um ambiente controlado e vivo para a análise dinâmica. As categorias abaixo não são uma lista genérica: elas também são o kit real que os pentesters da Fluid Attacks usam no dia a dia, que inclui várias das mesmas ferramentas citadas aqui.
Desmontadores
Uma das principais ferramentas da engenharia reversa de software é o desmontador, que realiza um processo contrário ao do montador e que será diferente conforme a plataforma em que for usado. O desmontador traduz linguagem de máquina (entrada) para linguagem assembly (saída), para o programa inteiro ou para partes dele. Exemplos:
IDA Pro (interactive disassembler): amplamente considerado o padrão da indústria, o IDA oferece análise estática robusta e suporta uma enorme variedade de processadores e formatos de executável, muitas vezes estendido com o Hex-Rays Decompiler.
Ghidra: desenvolvido pela NSA (Agência de Segurança Nacional) e liberado ao público, o Ghidra é uma ferramenta gratuita e de código aberto que oferece um conjunto completo de capacidades de engenharia reversa, incluindo desmontador e descompilador, o que a torna muito popular entre pesquisadores de segurança.
Radare2 (r2): um framework potente, orientado a linha de comando, conhecido pela portabilidade e pela capacidade de lidar com binários grandes e explorar possíveis caminhos de execução dentro do código estático.
Depuradores
Como expansão do trabalho do desmontador — e, em algumas tarefas de engenharia reversa, como única ferramenta necessária —, temos o depurador. Com esse tipo de ferramenta, sobre o código desmontado, podemos definir breakpoints em locais de interesse (e checar o estado atual do programa neles), percorrer o código executando linha a linha e até fazer edições em tempo de execução. Ou seja: diferente do desmontador, o depurador não trabalha sobre o código estático do programa, mas permite observar seu comportamento enquanto ele roda, em um ritmo adequado à percepção humana e com as pausas que forem necessárias. Exemplos:
x64dbg/OllyDbg: depuradores de código aberto populares para análise dinâmica no Windows, usados com frequência para examinar chamadas de sistema e comportamento de malware em tempo real.
WinDbg: o potente depurador da Microsoft, essencial para a análise de baixo nível do kernel e das aplicações Windows.
Frida/Xposed: kits de instrumentação dinâmica usados para manipular e depurar aplicações móveis (Android/iOS) em tempo de execução.
Descompiladores
Um descompilador tenta recriar o código-fonte original em uma linguagem de alto nível a partir da análise do código binário ou, às vezes, da linguagem assembly. Ainda assim, a informação obtida é complexa de entender. Conceitos de alto nível como classes, arrays, conjuntos e listas podem não ser recriados com facilidade. E comentários e nomes de variáveis podem ter se perdido por completo (são omitidos durante a compilação), inclusive o nome da linguagem de alto nível usada. Mesmo assim, o descompilador é valioso e útil porque revela toda a informação básica sobre o funcionamento do programa. Exemplos:
Hex-Rays decompiler: o componente descompilador do IDA Pro.
JADX/JEB decompiler: ferramentas especializadas em descompilar arquivos Dalvik Executable (DEX) do Android de volta para código Java legível.
Outras ferramentas úteis
Editores hexadecimais (por exemplo, WinHex, Hiew): usados para visualizar e editar manualmente dados binários brutos no nível do byte.
Sandboxes (por exemplo, Cuckoo, Any.Run): ambientes automatizados projetados para executar software malicioso com segurança e analisar e reportar seu comportamento.
Analisadores de rede (por exemplo, Wireshark): essenciais para capturar e inspecionar tráfego de rede e entender comunicações C2 ou falhas de protocolo.
Desempacotadores: ferramentas usadas para descomprimir ou descriptografar arquivos empacotados ou ofuscados, uma tática comum do malware.
Conhecimento necessário para se tornar engenheiro reverso
A engenharia reversa de software é uma habilidade altamente especializada que exige um entendimento profundo e multifacetado dos fundamentos da ciência da computação, muito além do desenvolvimento de aplicações comum. Quem a exerce com sucesso precisa dominar:
Linguagens de programação de baixo nível
Um entendimento amplo de linguagem assembly não é negociável. Como os desmontadores traduzem binários para código assembly, o analista precisa conseguir ler e interpretar o que o processador está fazendo no nível mais fundamental: como ele lida com memória, registradores e fluxo de execução. Isso também exige um bom conhecimento de linguagens de alto nível como C e C++, já que muitos sistemas operacionais e aplicações críticas são escritos nelas.
Arquitetura de sistemas operacionais e hardware
A engenharia reversa exige conhecimento íntimo de como os diferentes sistemas operacionais (Windows, Linux, macOS) funcionam e de como o software interage com o kernel e o hardware. Os analistas precisam entender chamadas de sistema, gerenciamento de memória, criação de processos e comunicação entre processos para rastrear com precisão o comportamento de um programa e identificar como o malware pode estar explorando vulnerabilidades do sistema.
Ofuscação, antidepuração e criptografia
Os agentes de ameaça trabalham sem parar para dificultar a engenharia reversa. Por isso, quem a pratica precisa saber identificar e contornar essas contramedidas:
Ofuscação de código: técnicas como empacotamento, criptografia e fluxo de controle confuso, criadas de propósito para tornar o código difícil de ler e entender durante a análise estática.
Antidepuração: código que detecta ativamente se está rodando dentro de um depurador ou sandbox e então altera sua execução ou se encerra, para esconder seu verdadeiro propósito e impedir a análise dinâmica.
Criptografia: o uso de algoritmos criptográficos fortes ou proprietários para proteger os dados mais sensíveis do malware (payloads) e criptografar seus fluxos de comunicação C2, deixando-os ilegíveis sem a chave correta ou sem uma engenharia reversa bem-sucedida.
Scripting e automação
Embora a análise central seja manual, linguagens de scripting como Python são essenciais para automatizar tarefas repetitivas, analisar arquivos de log grandes e estender a funcionalidade de ferramentas como Ghidra ou IDA Pro com plugins e scripts próprios.
Implicações éticas, legais e de negócio da engenharia reversa
A engenharia reversa é uma faca de dois gumes: é uma técnica usada para proteger sistemas, mas também pode ser aproveitada para fins maliciosos ou eticamente questionáveis.
A natureza dupla da engenharia reversa
A engenharia reversa de software pode servir para modificar estruturas de aplicações, alterar código, adicionar ou remover comandos e mudar funções, afetando assim seu fluxo lógico. Do lado da segurança, a engenharia reversa de software fornece técnicas para o hacking, seja ele malicioso ou ético. Ou seja: serve tanto para causar dano quanto para gerar proteção e preveni-lo.
Do lado positivo, a engenharia reversa tornou possível detectar falhas e vulnerabilidades em, por exemplo, algoritmos de criptografia. Também analisar o comportamento e as propriedades do malware em sistemas de teste ou em sistemas de terceiros já infectados (daí o desenvolvimento do software antivírus). Além disso, permitiu prevenir a pirataria de programas e da informação neles contida, protegendo assim os direitos digitais.
Do lado negativo, por meio da engenharia reversa de software, criminosos podem encontrar vulnerabilidades em sistemas e, bem… tirar proveito delas. Agentes maliciosos a usam para burlar verificações de licença, obter vantagem competitiva injusta roubando algoritmos proprietários ou desenvolver exploits de dia zero.
Considerações legais e éticas
A linha entre engenharia reversa ética e não ética costuma ser definida pela intenção e pela lei local.
Propriedade intelectual: muitos acordos de licença de software comercial (EULAs) proíbem explicitamente a engenharia reversa. A principal preocupação é proteger algoritmos e código-fonte proprietários. No entanto, muitos sistemas jurídicos, como o Digital Millennium Copyright Act (DMCA) dos Estados Unidos, contêm exceções que permitem a engenharia reversa para objetivos legítimos como:
Interoperabilidade: tornar um produto compatível com outro sistema
Pesquisa de segurança: encontrar e reportar vulnerabilidades (hacking ético ou pentesting)
Uso justo: pesquisa acadêmica e educação
Ética: a ética da engenharia reversa gira em torno do princípio de respeitar a propriedade intelectual do criador original diante do bem maior da segurança pública. A engenharia reversa ética é sempre conduzida com permissão explícita do dono do sistema analisado, ou se concentra apenas na avaliação de malware de acesso público para fins defensivos.
Conclusões
A engenharia reversa, quando aplicada de forma ética, é uma das ferramentas analíticas mais potentes à disposição da comunidade de cibersegurança. Ela leva a segurança além das checagens superficiais e permite um entendimento profundo, do código ao metal, de como os sistemas digitais realmente funcionam.
Ao dissecar ameaças e desconstruir aplicações no nível binário, quem faz engenharia reversa transforma código fragmentado em inteligência acionável, o que permite às organizações desenvolver defesas bem precisas contra as ameaças mais sofisticadas. Para qualquer organização comprometida em construir software sólido e resiliente, investir na experiência e nas ferramentas necessárias para a engenharia reversa não é opcional: é uma necessidade estratégica para dominar o cenário de ameaças digitais.
Perguntas frequentes
A engenharia reversa é legal?
Depende da jurisdição e da intenção. Analisar seus próprios sistemas ou código que você está autorizado a testar (como em um pentest) é legal; fazer engenharia reversa do software proprietário de outra pessoa sem permissão, normalmente não.
Que ferramentas os profissionais usam para engenharia reversa?
Desmontadores (IDA Pro, Ghidra), depuradores (x64dbg, WinDbg) e descompiladores, combinados com scripting para automatizar.
Qual é a diferença entre engenharia reversa e descompilação?
A descompilação é uma técnica dentro da engenharia reversa: ela converte código binário compilado em código legível parecido com o fonte. A engenharia reversa inclui ainda análise dinâmica, depuração e observação de comportamento.
A engenharia reversa encontra vulnerabilidades que os scanners automatizados não veem?
Sim. Ela pode revelar lógica oculta, backdoors e comportamento ofuscado de malware que os scanners estáticos ou dinâmicos não foram construídos para interpretar.
A Fluid Attacks usa engenharia reversa em testes de penetração?
Sim, como parte dos testes manuais quando não há código-fonte disponível ou quando se analisam componentes compilados e binários de terceiros.
Quanto mais risco a engenharia reversa manual encontra em relação às ferramentas automatizadas?
No benchmark da Fluid Attacks de 36 ferramentas de terceiros contra uma aplicação web com 1.201 vulnerabilidades, um pentester alcançou 100 % de precisão e 89,6 % de recall, enquanto o scanner com melhor desempenho chegou a 22,7 % de recall a apenas 8,8 % da exposição total ao risco.
Olhe dentro do binário
Quando não há código-fonte disponível, nossos pentesters aplicam engenharia reversa aos componentes compilados que seus scanners não conseguem ler. Teste gratuito · Fale conosco.















