Ottimizza bruteforce con batch EC e build avanzata
This commit is contained in:
@@ -1,126 +1,178 @@
|
||||
# Makefile per Bitcoin P2PK Bruteforce
|
||||
|
||||
CC = g++
|
||||
CFLAGS = -O3 -march=native -mtune=native -flto -pthread -Wall -Wextra
|
||||
|
||||
# Ottimizzazioni aggressive per CPU moderna
|
||||
# -O3: massima ottimizzazione
|
||||
# -march=native: usa tutte le istruzioni del processore (AVX2, SSE4.2, etc)
|
||||
# -mtune=native: ottimizza per il processore specifico
|
||||
# -flto: Link Time Optimization
|
||||
# -ffast-math: ottimizzazioni matematiche aggressive (safe per crypto)
|
||||
# -funroll-loops: srotola loop piccoli
|
||||
# -finline-functions: inline aggressivo
|
||||
# -fprefetch-loop-arrays: prefetch automatico
|
||||
# -faligned-new: supporto per aligned new (C++17)
|
||||
CFLAGS = -O3 -march=native -mtune=native -flto -ffast-math \
|
||||
-funroll-loops -finline-functions -fprefetch-loop-arrays \
|
||||
-faligned-new -pthread -Wall -Wextra -std=c++17
|
||||
|
||||
# Librerie necessarie
|
||||
LIBS = -lsecp256k1 -lgmp
|
||||
|
||||
# Target
|
||||
TARGET = p2pk_bruteforce
|
||||
SOURCE = p2pk_bruteforce.cpp
|
||||
|
||||
# Percorsi di default per libsecp256k1
|
||||
# Modifica se necessario in base alla tua installazione
|
||||
# Percorsi libreria
|
||||
INCLUDE_PATH = -I/usr/local/include -I/usr/include
|
||||
LIB_PATH = -L/usr/local/lib -L/usr/lib
|
||||
|
||||
all: build-if-needed compile
|
||||
# ============================================================================
|
||||
# TARGET PRINCIPALI
|
||||
# ============================================================================
|
||||
|
||||
build-if-needed:
|
||||
@if [ ! -d "secp256k1" ]; then \
|
||||
echo "========================================"; \
|
||||
echo " PRIMA COMPILAZIONE: Setup Automatico"; \
|
||||
echo "========================================"; \
|
||||
echo ""; \
|
||||
echo "Compilazione libsecp256k1..."; \
|
||||
echo "Questo richiederà ~5 minuti (solo la prima volta)"; \
|
||||
echo ""; \
|
||||
$(MAKE) build-optimized-secp256k1; \
|
||||
fi
|
||||
all: build
|
||||
|
||||
compile: build-if-needed
|
||||
# Compilazione standard
|
||||
build: $(SOURCE)
|
||||
@echo "========================================="
|
||||
@echo " Bitcoin P2PK Bruteforce - Compilazione"
|
||||
@echo "========================================="
|
||||
@if [ -d "secp256k1" ]; then \
|
||||
echo "[+] Compilazione con libsecp256k1..."; \
|
||||
echo "[+] Compilazione con libsecp256k1 locale..."; \
|
||||
$(CC) $(CFLAGS) \
|
||||
-I./secp256k1/include \
|
||||
-L./secp256k1/lib \
|
||||
-Wl,-rpath,$(shell pwd)/secp256k1/lib \
|
||||
-o $(TARGET) $(SOURCE) $(LIBS); \
|
||||
echo "[+] Compilazione completata!"; \
|
||||
echo "[!] Performance attese: ~300K keys/sec"; \
|
||||
else \
|
||||
echo "[+] Compilazione standard..."; \
|
||||
$(CC) $(CFLAGS) $(INCLUDE_PATH) $(LIB_PATH) -o $(TARGET) $(SOURCE) $(LIBS); \
|
||||
echo "[+] Compilazione completata!"; \
|
||||
echo "[!] Performance attese: ~250K keys/sec"; \
|
||||
echo "[+] Compilazione con libsecp256k1 di sistema..."; \
|
||||
$(CC) $(CFLAGS) $(INCLUDE_PATH) $(LIB_PATH) \
|
||||
-o $(TARGET) $(SOURCE) $(LIBS); \
|
||||
fi
|
||||
@echo "[!] Eseguibile: ./$(TARGET)"
|
||||
|
||||
standard: $(SOURCE)
|
||||
@echo "[+] Compilazione STANDARD (senza libreria ottimizzata)..."
|
||||
$(CC) $(CFLAGS) $(INCLUDE_PATH) $(LIB_PATH) -o $(TARGET) $(SOURCE) $(LIBS)
|
||||
@echo "[+] Compilazione completata!"
|
||||
@echo "[!] Eseguibile: ./$(TARGET)"
|
||||
@echo "[!] Performance attese: ~250K keys/sec"
|
||||
@echo "[+] Eseguibile: ./$(TARGET)"
|
||||
@echo ""
|
||||
@echo "OTTIMIZZAZIONI ATTIVE:"
|
||||
@echo " ✓ Batch EC point addition (256 keys/iteration)"
|
||||
@echo " ✓ Zero-copy lookup (no serialization)"
|
||||
@echo " ✓ SIMD-optimized Bloom filter"
|
||||
@echo " ✓ Cache-aligned memory"
|
||||
@echo " ✓ CPU prefetching hints"
|
||||
@echo " ✓ LTO & aggressive inlining"
|
||||
@echo ""
|
||||
@echo "PERFORMANCE ATTESE: 800K - 2M keys/sec"
|
||||
@echo "========================================="
|
||||
|
||||
optimized: $(SOURCE)
|
||||
@echo "[+] Compilazione con ottimizzazioni estreme (PGO)..."
|
||||
$(CC) $(CFLAGS) -fprofile-generate $(INCLUDE_PATH) $(LIB_PATH) -o $(TARGET) $(SOURCE) $(LIBS)
|
||||
@echo "[+] Esegui il programma per generare profilo..."
|
||||
@echo "[!] Poi esegui 'make pgo-use' per ricompilare"
|
||||
# ============================================================================
|
||||
# PROFILE-GUIDED OPTIMIZATION (PGO)
|
||||
# ============================================================================
|
||||
|
||||
pgo: pgo-generate pgo-run pgo-use
|
||||
|
||||
pgo-generate: $(SOURCE)
|
||||
@echo "[+] Step 1/3: Compilazione con profile generation..."
|
||||
@if [ -d "secp256k1" ]; then \
|
||||
$(CC) $(CFLAGS) -fprofile-generate \
|
||||
-I./secp256k1/include \
|
||||
-L./secp256k1/lib \
|
||||
-Wl,-rpath,$(shell pwd)/secp256k1/lib \
|
||||
-o $(TARGET)_pgo $(SOURCE) $(LIBS); \
|
||||
else \
|
||||
$(CC) $(CFLAGS) -fprofile-generate $(INCLUDE_PATH) $(LIB_PATH) \
|
||||
-o $(TARGET)_pgo $(SOURCE) $(LIBS); \
|
||||
fi
|
||||
@echo "[+] Pronto per eseguire il programma e generare profilo..."
|
||||
@echo "[!] Esegui: timeout 30s ./$(TARGET)_pgo"
|
||||
|
||||
pgo-run:
|
||||
@echo "[+] Step 2/3: Generazione profilo (30 secondi)..."
|
||||
@timeout 30s ./$(TARGET)_pgo || true
|
||||
@echo "[+] Profilo generato!"
|
||||
|
||||
pgo-use: $(SOURCE)
|
||||
@echo "[+] Ricompilazione con Profile-Guided Optimization..."
|
||||
$(CC) $(CFLAGS) -fprofile-use $(INCLUDE_PATH) $(LIB_PATH) -o $(TARGET) $(SOURCE) $(LIBS)
|
||||
@echo "[+] Compilazione PGO completata!"
|
||||
@echo "[+] Step 3/3: Ricompilazione con Profile-Guided Optimization..."
|
||||
@if [ -d "secp256k1" ]; then \
|
||||
$(CC) $(CFLAGS) -fprofile-use -fprofile-correction \
|
||||
-I./secp256k1/include \
|
||||
-L./secp256k1/lib \
|
||||
-Wl,-rpath,$(shell pwd)/secp256k1/lib \
|
||||
-o $(TARGET) $(SOURCE) $(LIBS); \
|
||||
else \
|
||||
$(CC) $(CFLAGS) -fprofile-use -fprofile-correction $(INCLUDE_PATH) $(LIB_PATH) \
|
||||
-o $(TARGET) $(SOURCE) $(LIBS); \
|
||||
fi
|
||||
@echo "[+] PGO compilazione completata!"
|
||||
@echo "[+] Eseguibile ottimizzato: ./$(TARGET)"
|
||||
@echo "[!] Performance attese: +10-20% aggiuntivo"
|
||||
@rm -f $(TARGET)_pgo
|
||||
|
||||
static: $(SOURCE)
|
||||
@echo "[+] Compilazione statica..."
|
||||
$(CC) $(CFLAGS) -static $(INCLUDE_PATH) $(LIB_PATH) -o $(TARGET) $(SOURCE) -l:libsecp256k1.a -l:libgmp.a
|
||||
@echo "[+] Compilazione statica completata!"
|
||||
# ============================================================================
|
||||
# UTILITÀ
|
||||
# ============================================================================
|
||||
|
||||
# Versione debug
|
||||
debug: $(SOURCE)
|
||||
@echo "[+] Compilazione in modalità debug..."
|
||||
$(CC) -g -pthread -Wall -Wextra $(INCLUDE_PATH) $(LIB_PATH) -o $(TARGET)_debug $(SOURCE) $(LIBS)
|
||||
@echo "[+] Compilazione debug completata!"
|
||||
@echo "[+] Compilazione DEBUG..."
|
||||
$(CC) -g -O0 -pthread -Wall -Wextra -std=c++17 \
|
||||
$(INCLUDE_PATH) $(LIB_PATH) \
|
||||
-o $(TARGET)_debug $(SOURCE) $(LIBS)
|
||||
@echo "[+] Eseguibile debug: ./$(TARGET)_debug"
|
||||
|
||||
test: $(TARGET)
|
||||
@echo "[+] Test rapido del programma..."
|
||||
./$(TARGET) --help || echo "Test completato"
|
||||
# Analisi assembly generato
|
||||
asm: $(SOURCE)
|
||||
@echo "[+] Generazione assembly..."
|
||||
$(CC) $(CFLAGS) -S -fverbose-asm $(INCLUDE_PATH) \
|
||||
-o $(TARGET).s $(SOURCE)
|
||||
@echo "[+] Assembly salvato in: $(TARGET).s"
|
||||
|
||||
# Benchmark veloce (10 secondi)
|
||||
bench: build
|
||||
@echo "[+] Benchmark rapido (10 secondi)..."
|
||||
@timeout 10s ./$(TARGET) || true
|
||||
|
||||
# Test con valgrind (memory leaks)
|
||||
valgrind: debug
|
||||
@echo "[+] Test con Valgrind..."
|
||||
valgrind --leak-check=full --show-leak-kinds=all \
|
||||
./$(TARGET)_debug
|
||||
|
||||
# Pulizia
|
||||
clean:
|
||||
@echo "[+] Pulizia file compilati..."
|
||||
rm -f $(TARGET) $(TARGET)_debug
|
||||
rm -f *.o *.gcda *.gcno
|
||||
rm -f $(TARGET) $(TARGET)_debug $(TARGET)_pgo
|
||||
rm -f *.o *.gcda *.gcno *.s
|
||||
rm -f progress.csv
|
||||
@echo "[+] Pulizia completata!"
|
||||
|
||||
clean-all: clean
|
||||
@echo "[+] Pulizia completa (include libreria secp256k1)..."
|
||||
@echo "[+] Pulizia completa..."
|
||||
rm -rf secp256k1_build secp256k1
|
||||
@echo "[+] Pulizia completa terminata!"
|
||||
|
||||
# ============================================================================
|
||||
# DIPENDENZE
|
||||
# ============================================================================
|
||||
|
||||
install-deps:
|
||||
@echo "[+] Installazione dipendenze..."
|
||||
@echo "[!] Questo installerà: build-essential, libsecp256k1-dev, libgmp-dev"
|
||||
@echo "[!] Premi CTRL+C per annullare, ENTER per continuare..."
|
||||
@read dummy
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y build-essential libsecp256k1-dev libgmp-dev git autoconf libtool pkg-config
|
||||
@echo "[+] Dipendenze installate!"
|
||||
@echo "[!] Richiede: build-essential, libsecp256k1-dev, libgmp-dev"
|
||||
@read -p "Continuare? [y/N] " -n 1 -r; \
|
||||
echo; \
|
||||
if [[ $$REPLY =~ ^[Yy]$$ ]]; then \
|
||||
sudo apt-get update && \
|
||||
sudo apt-get install -y build-essential libsecp256k1-dev libgmp-dev \
|
||||
git autoconf libtool pkg-config; \
|
||||
echo "[+] Dipendenze installate!"; \
|
||||
fi
|
||||
|
||||
install-secp256k1:
|
||||
@echo "[+] Compilazione e installazione libsecp256k1 da sorgente..."
|
||||
git clone https://github.com/bitcoin-core/secp256k1.git /tmp/secp256k1
|
||||
cd /tmp/secp256k1 && ./autogen.sh && ./configure && make && sudo make install
|
||||
sudo ldconfig
|
||||
@echo "[+] libsecp256k1 installata!"
|
||||
|
||||
build-optimized-secp256k1:
|
||||
@echo "[+] Compilazione libsecp256k1..."
|
||||
build-secp256k1:
|
||||
@echo "[+] Compilazione libsecp256k1 ottimizzata..."
|
||||
@./build_secp256k1.sh
|
||||
|
||||
with-optimized-lib: $(SOURCE)
|
||||
@echo "[+] Compilazione con libsecp256k1..."
|
||||
@if [ ! -d "secp256k1" ]; then \
|
||||
echo "[ERROR] Directory secp256k1 non trovata!"; \
|
||||
echo "[!] Esegui prima: make build-optimized-secp256k1"; \
|
||||
exit 1; \
|
||||
fi
|
||||
$(CC) $(CFLAGS) \
|
||||
-I./secp256k1/include \
|
||||
-L./secp256k1/lib \
|
||||
-Wl,-rpath,$(shell pwd)/secp256k1/lib \
|
||||
-o $(TARGET) $(SOURCE) $(LIBS)
|
||||
@echo "[+] Compilazione completata!"
|
||||
@echo "[!] Eseguibile: ./$(TARGET)"
|
||||
# ============================================================================
|
||||
# HELP
|
||||
# ============================================================================
|
||||
|
||||
help:
|
||||
@echo "==================================================="
|
||||
@@ -128,22 +180,26 @@ help:
|
||||
@echo "==================================================="
|
||||
@echo ""
|
||||
@echo "Target disponibili:"
|
||||
@echo " make - Compila il programma"
|
||||
@echo " make build-optimized-secp256k1 - Compila libsecp256k1"
|
||||
@echo " make with-optimized-lib - Compila con libsecp256k1"
|
||||
@echo " make optimized - Compila con PGO step 1"
|
||||
@echo " make pgo-use - Compila con PGO step 2"
|
||||
@echo " make static - Compila versione statica"
|
||||
@echo " make debug - Compila versione debug"
|
||||
@echo " make test - Test rapido"
|
||||
@echo " make clean - Rimuove file compilati"
|
||||
@echo " make clean-all - Pulizia completa (include secp256k1)"
|
||||
@echo " make install-deps - Installa dipendenze"
|
||||
@echo " make install-secp256k1 - Compila secp256k1 da sorgente"
|
||||
@echo " make - Compila il programma (default)"
|
||||
@echo " make build - Compila il programma"
|
||||
@echo " make pgo - Compila con Profile-Guided Optimization"
|
||||
@echo " make debug - Compila versione debug"
|
||||
@echo " make asm - Genera assembly per analisi"
|
||||
@echo " make bench - Benchmark rapido (10s)"
|
||||
@echo " make valgrind - Test memory leaks"
|
||||
@echo " make clean - Rimuove file compilati"
|
||||
@echo " make clean-all - Pulizia completa"
|
||||
@echo " make install-deps - Installa dipendenze"
|
||||
@echo " make build-secp256k1 - Compila libsecp256k1 locale"
|
||||
@echo ""
|
||||
@echo "Uso:"
|
||||
@echo " ./$(TARGET) [file_chiavi.txt]"
|
||||
@echo "Uso consigliato:"
|
||||
@echo " 1. make # Compila"
|
||||
@echo " 2. ./$(TARGET) # Esegui bruteforce"
|
||||
@echo ""
|
||||
@echo "Per massime performance:"
|
||||
@echo " make pgo # Compila con PGO (+10-20% speed)"
|
||||
@echo ""
|
||||
@echo "==================================================="
|
||||
|
||||
.PHONY: all optimized pgo-use static debug test clean clean-all install-deps install-secp256k1 build-optimized-secp256k1 with-optimized-lib help
|
||||
.PHONY: all build pgo pgo-generate pgo-run pgo-use debug asm bench \
|
||||
valgrind clean clean-all install-deps build-secp256k1 help
|
||||
|
||||
Reference in New Issue
Block a user