-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
104 lines (91 loc) · 3.61 KB
/
Copy pathMakefile
File metadata and controls
104 lines (91 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# Makefile maestro — compila todos los ejemplos del libro
#
# Uso:
# make # compila todo
# make clean # borra binarios
# make 0x250 # compila solo la sección 0x250
# make run-0x250 # compila y ejecuta la sección
#
# Notas:
# - Algunos ejemplos requieren flags inseguros (sin canary, stack ejecutable,
# sin ASLR). Esto está documentado en cada subdirectorio cuando aplica.
# - Los binarios resultantes tienen el mismo nombre que el .c sin extensión.
CC ?= gcc
CFLAGS ?= -g -Wall -Wno-format-security -Wno-unused-result
LDFLAGS ?=
# Flags por sección que necesitan compilación insegura (overflows, shellcode)
INSECURE_CFLAGS = -g -fno-stack-protector -z execstack -no-pie -Wno-format-security
SECCIONES_SEGURAS := 0x250 0x260 0x270 0x280 0x420 0x440 0x460 0x470 0x720
SECCIONES_INSEGURAS := 0x320 0x340 0x350 0x360 0x520 0x530 0x540 0x550 0x680 0x6b0 0x6c0
# Secciones que necesitan -lcrypto (libssl-dev). Compilan aparte.
SECCIONES_CRIPTO := 0x730 0x740 0x760
TODAS := $(SECCIONES_SEGURAS) $(SECCIONES_INSEGURAS) $(SECCIONES_CRIPTO)
.PHONY: all clean help $(TODAS) $(addprefix run-,$(TODAS))
all: $(SECCIONES_SEGURAS) $(SECCIONES_INSEGURAS)
@echo ""
@echo "==> Para compilar las secciones de cripto (0x730-0x760):"
@echo " sudo apt install libssl-dev"
@echo " make cripto"
cripto: $(SECCIONES_CRIPTO)
help:
@echo "Targets disponibles:"
@echo " make - compila todas las secciones"
@echo " make <0xNNN> - compila una sección concreta"
@echo " make run-<0xNNN> - compila y ejecuta los binarios de una sección"
@echo " make clean - borra binarios"
@echo ""
@echo "Secciones seguras : $(SECCIONES_SEGURAS)"
@echo "Secciones inseguras : $(SECCIONES_INSEGURAS)"
# Compilación segura (warnings + debug)
$(SECCIONES_SEGURAS):
@echo "==> Compilando $@ (modo seguro)"
@for src in codigo/$@/*.c; do \
[ -f "$$src" ] || continue; \
out=$${src%.c}; \
echo " $(CC) $(CFLAGS) $$src -o $$out"; \
$(CC) $(CFLAGS) "$$src" -o "$$out" 2>&1 | sed 's/^/ /' || true; \
done
# Compilación insegura (sin protecciones, para reproducir overflows del libro)
$(SECCIONES_INSEGURAS):
@echo "==> Compilando $@ (modo INSEGURO — overflows/shellcode)"
@for src in codigo/$@/*.c; do \
[ -f "$$src" ] || continue; \
out=$${src%.c}; \
echo " $(CC) $(INSECURE_CFLAGS) $$src -o $$out"; \
$(CC) $(INSECURE_CFLAGS) "$$src" -o "$$out" 2>&1 | sed 's/^/ /' || true; \
done
# Compilación con libcrypto (OpenSSL) — necesita libssl-dev
$(SECCIONES_CRIPTO):
@echo "==> Compilando $@ (necesita libssl-dev)"
@for src in codigo/$@/*.c; do \
[ -f "$$src" ] || continue; \
out=$${src%.c}; \
echo " $(CC) $(CFLAGS) $$src -o $$out -lcrypto"; \
$(CC) $(CFLAGS) "$$src" -o "$$out" -lcrypto 2>&1 | sed 's/^/ /' || true; \
done
# Targets de ejecución
$(addprefix run-,$(TODAS)): run-%: %
@echo "==> Ejecutando binarios de $*"
@for bin in codigo/$*/*; do \
[ -x "$$bin" ] && [ ! -d "$$bin" ] || continue; \
case "$$bin" in *.c|*.h|*.s|*.asm|*.md|*.txt|Makefile) continue;; esac; \
echo " --- $$bin ---"; \
"$$bin" 2>&1 | head -20 | sed 's/^/ /' || true; \
done
clean:
@echo "==> Limpiando binarios"
@find codigo -type f \
-not -name "*.c" \
-not -name "*.h" \
-not -name "*.s" \
-not -name "*.asm" \
-not -name "*.py" \
-not -name "*.md" \
-not -name "*.txt" \
-not -name "Makefile" \
-not -name ".*" \
-delete 2>/dev/null || true
@find . -name "*.o" -delete
@find . -name "core" -delete
@find . -name "core.*" -delete
@echo " Hecho."