Fundamentos de engenharia reversa e exploração de binários
Introdução à engenharia reversa e à exploração de binários.
Fundamentos de engenharia reversa e exploração de binários é uma aula grátis de Cyber Security Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cyber Security Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cyber Security Academy inclui 4 aulas no total.
Engenharia reversa e exploração binária em resumo
Duas categorias de CTF estreitamente relacionadas lidam com programas compilados:
- Engenharia reversa (rev) — você analisa um binário para entender o que ele faz, geralmente para recuperar uma verificação de senha ou uma lógica oculta que exibe a bandeira.
- Exploração binária — você encontra um erro de segurança de memória em um binário em execução e o explora para sequestrar a execução, frequentemente para iniciar um interpretador de comandos em um serviço remoto que armazena a bandeira.
Engenharia reversa trata de entender; exploração binária trata de quebrar. Ambas exigem familiaridade com conceitos de baixo nível.
Primeira análise de um binário
Nunca abra um binário às cegas em um desmontador. Faça primeiro uma triagem com ferramentas rápidas de linha de comando para descobrir seu tipo, sua arquitetura e quaisquer cadeias de caracteres óbvias.
# Identify file type and architecture
file ./challenge
# Pull human-readable strings (flags are sometimes left in plaintext)
strings ./challenge
# Check which security mitigations are enabled
checksec --file=./challengeAnálise estática e dinâmica
Você analisa binários de duas formas complementares:
- Análise estática — leia o código sem executá-lo, usando um desmontador ou descompilador como o Ghidra ou uma visualização de desmontagem. Você vê todo o fluxo de controle, mas precisa inferir os valores em tempo de execução.
- Análise dinâmica — execute o programa sob um depurador como o GDB e observe os valores reais nos registradores e na memória. Você vê exatamente o que acontece, mas apenas ao longo do caminho que executa.
Participantes experientes alternam entre as duas: leem estaticamente para formular uma teoria e confirmam dinamicamente avançando passo a passo.
Lendo código de montagem
Para fazer engenharia reversa, você lê código de montagem. Não é necessário escrevê-lo com fluência, mas você precisa reconhecer padrões:
- cmp / test seguidos de um salto (
je,jne) formam uma comparação e um desvio — geralmente a verificação da senha. - call invoca uma função; os argumentos foram colocados nos registradores ou na pilha imediatamente antes.
- mov move dados entre registradores, memória e constantes.
Quando encontrar um cmp comparando sua entrada, seguido de um desvio para uma mensagem de sucesso, você terá encontrado a verificação. Agora recupere ou contorne o valor esperado.
Descompiladores aceleram seu trabalho
Descompiladores modernos transformam o código de montagem novamente em C aproximado, que é muito mais rápido de ler do que as instruções brutas. Uma verificação de senha descompilada poderia ter esta aparência:
// Decompiler output (approximate)
if (strcmp(user_input, "s3cr3t_p4ss") == 0) {
puts("Correct! Here is your flag:");
print_flag();
} else {
puts("Wrong.");
}Como começa a corrupção de memória
Desafios de exploração binária exploram programas que leem a entrada em uma área de memória de tamanho fixo sem verificar seu comprimento. A pilha armazena variáveis locais e o endereço de retorno salvo, que informa à CPU para onde ir quando uma função termina.
Se a entrada exceder uma área de memória local, ela poderá sobrescrever esse endereço de retorno salvo. Quem controla o endereço de retorno controla para onde a execução seguirá.
// Vulnerable: no bound on how much is read into buf
void vuln() {
char buf[64];
gets(buf); // reads until newline, ignores buf size
}O estouro clássico de uma área de memória da pilha
A exploração mais simples consiste em sobrescrever o endereço de retorno para saltar para uma função que o programa nunca pretendeu chamar — uma função win() oculta que exibe a bandeira.
As etapas:
- Encontre o deslocamento exato do início da área de memória até o endereço de retorno; uma ferramenta de padrão cíclico faz isso rapidamente.
- Encontre o endereço da função-alvo.
- Envie preenchimento até o deslocamento e depois sobrescreva o endereço de retorno com o alvo.
# Build the input with a Python exploit library
from pwn import *
p = process('./challenge')
offset = 72 # bytes to reach the return address
win_addr = 0x401176 # address of the win() function
p.sendline(b'A' * offset + p64(win_addr))
p.interactive()Proteções modernas
Binários reais ativam defesas que bloqueiam estouros ingênuos. Você precisa reconhecê-las com checksec:
- Canários da pilha — um valor secreto colocado antes do endereço de retorno; se ele mudar, o programa é encerrado. Primeiro, você precisa obtê-lo.
- NX (Não-eXecute) — a pilha não é executável, portanto você não pode executar código de shell colocado nela.
- ASLR / PIE — os endereços são aleatorizados a cada execução, então você precisa obter um vazamento de endereço antes de poder apontar para ele.
- RELRO — protege a tabela de deslocamentos globais contra sobrescritas.
Cada proteção direciona você para técnicas mais avançadas.
Programação orientada a retornos (ROP)
Quando o NX impede que você execute seu próprio código, a programação orientada a retornos reutiliza código que já está no binário.
Você encadeia pequenas sequências de instruções chamadas trechos, cada uma terminando em ret, para realizar ações passo a passo — por exemplo, carregar um registrador e chamar uma função de biblioteca para iniciar um interpretador de comandos. Você constrói a cadeia na pilha para que cada ret salte para o próximo trecho.
ROP é a ponte entre os estouros para iniciantes e a exploração real, na qual o código do invasor raramente pode ser executado diretamente.
Falhas em cadeias de formato
Outra primitiva clássica de exploração é a vulnerabilidade em cadeia de formato, na qual a entrada do usuário é passada diretamente como argumento de formato para uma função de impressão.
// Vulnerable: user controls the format string
printf(user_input); // dangerous
// Safe: user input is data, not format
printf("%s", user_input); // correctPor que profissionais de defesa aprendem isso
Você aprende a explorar erros de memória com precisão justamente para poder evitá-los. As conclusões defensivas são concretas:
- Nunca use funções de entrada sem limite, como
getsoustrcpy; use equivalentes que verifiquem o comprimento. - Mantenha as proteções ativadas: canários, NX, ASLR/PIE completo e RELRO completo por padrão.
- Prefira linguagens seguras para a memória quando o modelo de ameaça permitir.
- Trate qualquer valor controlado pelo usuário que alcance uma cadeia de formato ou uma cópia de área de memória como uma descoberta grave na revisão de código.
Verificação rápida
Teste sua compreensão dos fundamentos de engenharia reversa e exploração binária.
Recapitulação
Agora você tem um mapa da engenharia reversa e da exploração binária:
- Faça a triagem de todo binário com
file,stringsechecksecantes da análise aprofundada. - Combine a análise estática (desmontador/descompilador) e dinâmica (depurador) para entender a lógica.
- A exploração binária começa com o estouro de uma área de memória da pilha, sobrescrevendo um endereço de retorno; as proteções (canários, NX, ASLR/PIE, RELRO) elevam o nível de dificuldade.
- ROP contorna o NX reutilizando trechos existentes; falhas em cadeias de formato surgem de argumentos de formato não confiáveis.
- Cada técnica também serve como lição defensiva para escrever e revisar códigos mais seguros.
Em seguida, você montará um conjunto de ferramentas e aprenderá a documentar suas soluções.
Aprenda Cyber Security Academy com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 76
- Aulas
- 303
Perguntas Frequentes
A aula “Fundamentos de engenharia reversa e exploração de binários” é grátis?
Sim — o texto completo de “Fundamentos de engenharia reversa e exploração de binários” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cyber Security Academy, atualize para CoddyKit PRO. O curso de Cyber Security Academy inclui 4 aulas no total.
O que vou aprender em “Fundamentos de engenharia reversa e exploração de binários”?
Introdução à engenharia reversa e à exploração de binários. Você pratica Cyber Security Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Cyber Security Academy?
Nenhuma experiência prévia é necessária. Cyber Security Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Fundamentos de engenharia reversa e exploração de binários”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Cyber Security Academy?
Sim. Cada aula de Cyber Security Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Categorias e mentalidade de CTF
- Desafios de web e criptografia
- Fundamentos de engenharia reversa e exploração de binários
- Ferramentas e relatos técnicos