Um resumo pessoal do livro "Hacking – The Art of Exploitation (2ª edição)", de Jon Erickson
- 28 de fev.
- 8 min de leitura

Antes de mais nada, confesso que foi um dos melhores livros que já li sobre hacking. Sem dúvida nenhuma, este é um livro mais do que obrigatório na sua biblioteca pessoal. Mas vamos lá…
No livro, Jon Erickson escreve de forma didática e prática, sempre com exemplos em C, e Linux. Ele evita uma abordagem puramente teórica, e conduz o leitor como se estivesse em um laboratório, mostrando passo a passo como vulnerabilidades surgem e podem ser exploradas. Muito interessante que na minha percepção o tom é instrucional e pragmático, voltado para formar a mentalidade hacker: entender como sistemas funcionam por dentro e como falham.
Vou tentar fazer um resumo de cada capítulo…
Capitulo 1 - Introduction
Neste capítulo o Jon Erickson apresenta a essência do hacking como uma forma criativa de explorar sistemas e resolver problemas, destacando que não se trata apenas de atividades ilegais, mas sim de compreender profundamente as regras e limitações para encontrar usos inesperados e engenhosos. O termo “hacking” é frequentemente associado a crime, vandalismo eletrônico ou espionagem, mas Erickson esclarece que essa visão é limitada. Hacking não é sobre quebrar a lei, mas sim sobre entender sistemas e explorar suas propriedades de maneiras criativas. De acordo com o autor a essência do hacking está em descobrir usos não previstos para regras e estruturas já existentes, aplicando-os para resolver problemas.
No livro o hacking é apresentado como uma arte de exploração, onde o objetivo é aprender e criar, e enfatiza que o hacking é uma prática que exige disciplina, estudo e experimentação constante.
Capítulo 2 – Programming
O capítulo 2 estabelece a base técnica da programação em C e da arquitetura de computadores, preparando o leitor para compreender como falhas surgem e podem ser exploradas. Erickson reforça que dominar esses conceitos é essencial para qualquer hacker, pois só assim é possível enxergar além do uso comum das ferramentas e descobrir formas criativas de manipular sistemas.
Programação e Hacking
- Erickson explica que hackers podem ser tanto programadores quanto exploradores de código
- Embora tenham objetivos diferentes, ambos compartilham técnicas de resolução de problemas e criatividade.
- O capítulo reforça que entender programação ajuda na exploração e vice-versa: quem explora precisa compreender como o código funciona, e quem programa precisa conhecer possíveis falhas
O capítulo introduz os principais elementos da programação em C, que servirão de base para os exemplos práticos de exploração:
- Pseudo-código: usado para planejar soluções antes de escrever em linguagem formal
- Estruturas de controle: if-else, while, for, que permitem criar lógica condicional e repetição
- Variáveis e operadores: manipulação de dados com operadores aritméticos e comparativos
- Funções: blocos reutilizáveis de código que organizam e simplificam programas
Conceitos Avançados
O capítulo aprofunda em tópicos que são cruciais para entender vulnerabilidades:
- Strings: manipulação de texto e como erros podem levar a falhas de segurança
- Tipos de dados: diferenças entre signed, unsigned, long, short e implicações em cálculos
- Ponteiros: acesso direto à memória, base para compreender buffer overflows
- Format strings: uso e abuso de funções como printf, que podem ser exploradas
- Typecasting e escopo de variáveis: como o compilador interpreta dados e limitações de acesso
- Argumentos de linha de comando: interação entre programas e o sistema operacional
Arquitetura e Memória
- Introdução ao processador x86 e à linguagem Assembly, mostrando como o código em C se traduz em instruções de máquina
- Segmentação de memória: explicação sobre pilha (stack), heap e áreas de dados, fundamentais para entender ataques como buffer overflow
Capítulo 3 – Exploitation
Eu particularmente entendo que este capítulo é o coração do livro, pois mostra como vulnerabilidades de softwares podem ser exploradas na prática. Ele conecta os conceitos de programação e arquitetura de computadores (vistos nos capítulos anteriores) com técnicas reais de ataque.
Sobre exploitation
- Exploitation significa tirar proveito de falhas em programas ou sistemas para alterar seu funcionamento normal
- Erickson explica que não se trata apenas de “invadir computadores”, mas de entender profundamente como erros de programação podem ser usados de forma criativa
Buffer Overflows
- Um dos principais tópicos é o buffer overflow, quando dados ultrapassam os limites de uma área de memória
- O autor mostra como isso pode permitir que o atacante sobrescreva endereços de retorno e faça o programa executar código arbitrário
- Exemplos práticos em C demonstram como explorar essa vulnerabilidade
Técnicas de Exploração
- Manipulação da pilha (stack): entender como funções armazenam variáveis locais e endereços de retorno
- Shellcode: pequenos trechos de código em Assembly que fornecem ao atacante controle sobre o sistema (por exemplo, abrir um shell)
- Format string vulnerabilities: abusar de funções como printf para ler ou escrever em áreas da memória
- Heap exploitation: explorar falhas na alocação dinâmica de memória
Em resumo o capítulo 3 demonstra que exploração de vulnerabilidades é uma consequência direta de erros de programação e do funcionamento interno da memória. Erickson guia o leitor passo a passo, mostrando que hacking não é mágica, mas sim ciência aplicada com engenhosidade
Capítulo 4 – Networking
Neste capítulo Erickson aborda como computadores se comunicam em rede, e como essa comunicação pode ser explorada. Ele conecta os conceitos de programação e exploração de memória com o mundo real das conexões entre máquinas.
Fundamentos de Redes
- Explica os protocolos básicos de comunicação (TCP/IP, UDP, ICMP), mostrando como dados são transmitidos entre computadores
- Introduz conceitos como endereços IP, portas e sockets, que são os pontos de entrada e saída para programas em rede
- Mostra como a comunicação é estruturada em camadas (aplicação, transporte, rede, enlace), cada uma com funções específicas
Programação de Rede
- Ensina como criar programas em C que utilizam sockets para enviar e receber dados
- Exemplos práticos incluem clientes e servidores simples, demonstrando como ocorre a troca de mensagens
- O leitor aprende a manipular conexões, entender pacotes e lidar com erros de comunicação
Exploração em Redes
- Erickson mostra que vulnerabilidades não estão apenas na memória local, mas também em serviços de rede
- Explorações podem envolver: Buffer overflows em servidores que recebem dados maliciosos / Ataques de negação de serviço (DoS), sobrecarregando sistemas com tráfego / Interceptação de pacotes (sniffing) para capturar informações sensíveis / Spoofing (falsificação de identidade) para enganar sistemas.
Ferramentas e Técnicas
- Introdução a ferramentas de análise de rede, como sniffers e scanners de portas
- Demonstra como hackers usam essas ferramentas para mapear sistemas e encontrar pontos vulneráveis
- Explica também como firewalls e criptografia podem proteger contra ataques, mas não são infalíveis
O capítulo 4 estabelece que redes são o campo de batalha do hacking moderno. Erickson guia o leitor para entender desde os fundamentos da comunicação até as técnicas de exploração, reforçando que dominar redes é tão importante quanto dominar programação e memória.
Capítulo 5 – Shellcode
Neste capítulo Erickson explica que o shellcode é a ponte entre a vulnerabilidade e o controle efetivo do sistema. Alguns insights sobre shellcode:
- Shellcode é um código em Assembly, geralmente inserido em áreas de memória exploradas (como em um buffer overflow)
- Seu nome vem do objetivo clássico: abrir um shell interativo para o atacante
Construção do Shellcode
- O capítulo ensina como escrever shellcode em Assembly x86, passo a passo
- Mostra como transformar instruções simples (como chamar execve() para abrir um shell) em código binário que pode ser injetado na memória
- Explica técnicas para manter o shellcode curto, eficiente e livre de caracteres nulos, que poderiam interromper sua execução
Técnicas e Considerações
- Syscalls (chamadas de sistema): o shellcode depende de chamadas diretas ao kernel para executar ações como abrir arquivos, criar processos ou estabelecer conexões
- Codificação e compactação: métodos para esconder ou reduzir o tamanho do shellcode
- Execução controlada: como garantir que o shellcode seja executado corretamente após a exploração de uma falha
O capítulo 5 mostra que o shellcode é a essência prática da exploração: transformar uma falha em execução de código arbitrário. O autor vai te guiar na criação de shellcode real, reforçando que dominar Assembly e chamadas de sistema é indispensável para qualquer hacker que queira compreender profundamente como ataques funcionam.
Capítulo 6 – Countermeasures
Este capítulo trata das técnicas e mecanismos de defesa que buscam impedir ou dificultar a exploração de vulnerabilidades. Depois de mostrar como ataques funcionam nos capítulos anteriores, Erickson apresenta as barreiras que sistemas modernos utilizam para se proteger.
Objetivo das Contramedidas
- Proteger sistemas contra buffer overflows, shellcode e outras formas de exploração
- Tornar ataques mais difíceis ou inviáveis, aumentando a complexidade para o invasor
- Mostrar que segurança é um processo contínuo: cada defesa gera novas técnicas de ataque e vice-versa
Principais Técnicas de Defesa
- Stack Canaries: valores especiais inseridos na pilha para detectar alterações indevidas (como sobrescrita de endereços de retorno)
- Non-Executable Stack (NX bit): impede que código seja executado diretamente da pilha, bloqueando shellcode injetado
- Address Space Layout Randomization (ASLR): randomiza os endereços de memória, dificultando que o atacante saiba onde injetar ou executar código
- Safe Libraries e funções seguras: substituição de funções vulneráveis (strcpy, sprintf) por versões que verificam limites
- Filtros e firewalls: bloqueio de tráfego suspeito e monitoramento de atividades maliciosas em rede
Limitações das Defesas
- Nenhuma contramedida é perfeita: hackers podem desenvolver técnicas para burlar ou contornar essas proteções
- Muitas vezes, a segurança depende da combinação de várias medidas e da atualização constante de sistemas
- Erickson enfatiza que conhecimento profundo das defesas é tão importante quanto conhecer os ataques, pois só assim é possível avaliar riscos reais
O capítulo 6 reforça que contramedidas são essenciais para reduzir riscos, mas não eliminam completamente a possibilidade de exploração. Erickson mostra que o verdadeiro hacker deve compreender tanto os ataques quanto as defesas, adotando uma visão crítica e completa sobre segurança.
Capítulo 7 – Cryptology
Este capítulo aborda os fundamentos da criptografia e da criptoanálise, mostrando como a proteção da informação funciona e como pode ser quebrada. É o último grande bloco técnico do livro, conectando segurança de sistemas, redes e exploração com a ciência da informação.
Conceito de Criptologia
- Criptologia é o estudo da criptografia (proteção da informação) e da criptoanálise (quebra de códigos)
- Erickson mostra que, assim como em hacking, o objetivo é entender regras e limitações para explorar ou proteger sistemas
Fundamentos da Criptografia
- Cifras clássicas: exemplos como cifra de César e cifras de substituição, para ilustrar conceitos básicos
- Criptografia moderna: introdução a algoritmos como DES, AES e RSA
- Funções hash: usadas para integridade e autenticação (MD5, SHA)
- Chaves simétricas e assimétricas: diferenças entre compartilhar uma chave única (simétrica) e usar pares de chaves pública/privada (assimétrica)
Criptoanálise
- Técnicas de ataque contra sistemas criptográficos: Força bruta (testar todas as combinações possíveis), Ataques estatísticos (explorar padrões em cifras simples), Ataques de tempo e implementação (explorar falhas práticas em algoritmos)
- Mostra que a segurança não depende apenas da matemática, mas também da implementação correta
Neste capítulo o autor reforça que criptologia é o campo onde matemática e hacking se encontram. Erickson apresenta os fundamentos da criptografia e da criptoanálise, destacando que a segurança depende não apenas da teoria, mas também da prática correta. Para o hacker, entender criptologia significa saber tanto proteger quanto quebrar sistemas de informação.
Capítulo 8 – Conclusion
- Erickson destaca que hacking não é apenas sobre invadir sistemas, mas sim sobre curiosidade, criatividade e compreensão profunda de como as coisas funcionam
- O hacker é visto como alguém que questiona regras, experimenta e encontra soluções inesperadas
- O livro reforça que hacking é um processo contínuo de aprendizado
- Não há fim definitivo: cada nova tecnologia traz novas vulnerabilidades e novas oportunidades de exploração
- O verdadeiro hacker deve manter uma postura de estudo constante e experimentação prática
- Erickson conclui que hacking é uma forma de arte, onde o valor está em explorar, compreender e criar
- O conhecimento adquirido deve ser usado com responsabilidade e ética, pois o poder de explorar sistemas também implica responsabilidade sobre seus impactos
A segunda edição de "Hacking – The Art of Exploitation" reforça que hacking não é apenas usar ferramentas prontas, mas compreender profundamente como sistemas funcionam e como falham. Erickson vai te guiar desde fundamentos de programação até técnicas avançadas de exploração, sempre com exemplos práticos e código comentado. O livro é estruturado para formar a mentalidade hacker: curiosidade, experimentação e domínio técnico.
Para executivos e líderes de segurança, a mensagem central é clara: hackers exploram falhas de lógica e programação, não apenas brechas óbvias. Investir em conhecimento técnico profundo e treinamento prático é essencial para construir defesas robustas. O livro mostra que compreender ataques na raiz é o caminho para antecipar riscos e fortalecer a segurança corporativa.

Comentários