
Utilisez angr dans GDB. Créez un état angr à partir de l'état actuel du débogueur.
Utilisez angr dans GDB. Créez un état angr à partir de l'état actuel du débogueur.
pip install angrgdb
echo "python import angrgdb.commands" >> ~/.gdbinit
angrgdb implémente l'API angrdbg dans GDB.
Vous pouvez l'utiliser dans des scripts comme ceci :
from angrgdb import *
gdb.execute("b *0x004005f9")
gdb.execute("r aaaaaaaa")
sm = StateManager()
sm.sim(sm["rax"], 100)
m = sm.simulation_manager()
m.explore(find=0x00400607, avoid=0x00400613)
sm.to_dbg(m.found[0]) #write input to GDB
gdb.execute("x/s $rax")
#0x7fffffffe768: "ais3{I_tak3_g00d_n0t3s}"
gdb.execute("c")
#Correct! that is the secret key!
Vous pouvez également utiliser les commandes angrgdb directement dans GDB pour des tâches simples :
angrgdb sim <nom du registre> [taille] Symbolise un registreangrgdb sim <adresse> [taille] Symbolise une zone mémoireangrgdb list Liste tous les éléments que vous avez définis comme symboliquesangrgdb find <adresse0> <adresse1> ... <adresseN> Définit la liste des cibles de rechercheangrgdb avoid <adresse0> <adresse1> ... <adresseN> Définit la liste des cibles à éviterangrgdb reset Réinitialise le contexte (valeurs symboliques et cibles)angrgdb run Génère un état à partir de l'état du débogueur et lance l'explorationangrgdb shell Ouvre un shell avec une instance StateManager créée à partir de l'état GDB actuelangrgdb interactive Génère un état à partir de l'état du débogueur et explore manuellement en utilisant une version modifiée de angr-cliUn exemple de résolution de crackme utilisant angrgdb+GEF+idb2gdb :
Ceci est un conseil si vous ne voulez pas utiliser angrgdb depuis la ligne de commande mais que vous voulez utiliser un script Python. Pour charger un script dans GDB, utilisez source script.py.
Thèse PDF.
Bibtex :
@misc{fioraldi2020symbolic,
title={Symbolic Execution and Debugging Synchronization},
author={Andrea Fioraldi},
year={2020},
eprint={2006.16601},
archivePrefix={arXiv},
primaryClass={cs.CR}
}