yaklang/exécution-symbolique-outils
Manuel d'exécution symbolique et de résolution de contraintes. À utiliser lors de la résolution de défis de rétro-ingénierie CTF, de la récupération de clés, du contournement de vérifications ou de l'automatisation de l'analyse binaire avec angr, Z3 ou Unicorn Engine.
Aperçu
Ce manuel vous guide à travers les concepts et les outils d'exécution symbolique. Il est conçu pour être utilisé avec des agents IA ou en tant que référence autonome.
Prérequis
- Python 3.8+
- Bibliothèques : angr, z3-solver, unicorn
- Connaissances de base en assembleur et en rétro-ingénierie
Utilisation
Exécution Symbolique avec angr
import angr
# Charger le binaire
proj = angr.Project('challenge.bin', auto_load_libs=False)
# Créer un état initial
state = proj.factory.entry_state()
# Créer un simulateur
simgr = proj.factory.simulation_manager(state)
# Explorer pour trouver un état qui imprime 'Good'
simgr.explore(find=lambda s: b'Good' in s.posix.dumps(1))
if simgr.found:
found_state = simgr.found[0]
print(f"Entrée correcte : {found_state.posix.dumps(0)}")
Résolution de Contraintes avec Z3
from z3 import *
# Créer des variables symboliques
x = BitVec('x', 32)
y = BitVec('y', 32)
# Ajouter des contraintes
solver = Solver()
solver.add(x + y == 100)
solver.add(x * 3 + y * 2 == 250)
if solver.check() == sat:
model = solver.model()
print(f"x = {model[x]}, y = {model[y]}")
Émulation avec Unicorn Engine
from unicorn import *
from unicorn.x86_const import *
# Code simple
CODE = b'\x89\xd0\x01\xc8' # mov eax, edx; add eax, ecx
mu = Uc(UC_ARCH_X86, UC_MODE_32)
# Mapper la mémoire
ADDRESS = 0x10000
mu.mem_map(ADDRESS, 4 * 1024 * 1024)
mu.mem_write(ADDRESS, CODE)
# Configurer les registres
mu.reg_write(UC_X86_REG_ECX, 10)
mu.reg_write(UC_X86_REG_EDX, 20)
# Émuler
mu.emu_start(ADDRESS, ADDRESS + len(CODE))
result = mu.reg_read(UC_X86_REG_EAX)
print(f"Résultat : {result}") # Devrait être 30
Ressources Supplémentaires
Dépannage
- Erreur de mémoire : Augmentez la taille de la pile avec
-m 512pour Python. - Problèmes de version : Assurez-vous d'utiliser angr 9.0+ et Z3 4.8+.
- Dépendances manquantes : Installez avec
pip install angr z3-solver unicorn.