Apuntes y código derivados del libro Hacking: The Art of Exploitation de Jon Erickson (2ª edición, No Starch Press).
Repositorio de estudio personal. El contenido se escribe leyendo el libro, reproduciendo los ejemplos en una máquina propia y anotando lo aprendido.
.
├── capitulos/ # apuntes en Markdown, uno por capítulo
├── codigo/ # código C de los ejemplos, agrupado por sección
├── Makefile # compila todos los ejemplos
└── README.md # este archivo
Cada subdirectorio en codigo/ corresponde a una sección del libro. Los archivos siguen el patrón <seccion>_<nombre>.c (por ejemplo codigo/0x260/0x261_char_array.c).
make # compila todo
make 0x320 # compila solo una sección
make run-0x320 # compila y ejecuta los binarios de esa sección
make clean # borra binarios
make help # lista targets disponiblesAlgunos ejemplos (overflows, shellcode) requieren desactivar protecciones modernas (-fno-stack-protector -z execstack -no-pie). El Makefile lo hace automáticamente para esas secciones. Para reproducir fielmente los ejemplos del libro también conviene desactivar ASLR temporalmente:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # desactiva ASLR
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space # restaura (default)| Capítulo | Título | Apuntes |
|---|---|---|
| 0x100 | Introducción | capitulos/0x100_introduccion.md |
| 0x200 | Programación | capitulos/0x200_programacion.md |
| 0x300 | Exploitation | capitulos/0x300_exploitation.md |
| 0x400 | Networking | capitulos/0x400_networking.md |
| 0x500 | Shellcode | capitulos/0x500_shellcode.md |
| 0x600 | Countermeasures | capitulos/0x600_countermeasures.md |
| 0x700 | Cryptology | capitulos/0x700_cryptology.md |
| 0x800 | Conclusión | capitulos/0x800_conclusion.md |
Los ejemplos se prueban en:
- Linux x86-64 (Kali / Debian)
gcc12+gdb13+ con sintaxis Intel (echo "set disassembly intel" > ~/.gdbinit)
El libro original usa x86 32-bit. Los apuntes adaptan los ejemplos a x86-64, indicando las diferencias relevantes (registros rXX en vez de eXX, calling convention System V AMD64, etc.).
- Todo el código se ejecuta en máquinas propias o entornos de laboratorio aislados.
- Algunos ejemplos abren puertos o crean shellcode; nunca se prueban contra sistemas que no sean propios.
- El binario compilado con flags inseguros (
-z execstack) no debe distribuirse ni ejecutarse en sistemas en producción.
Ver LICENSE.