
Usa angr all'interno di GDB. Crea uno stato di angr a partire dallo stato corrente del debugger.
Usa angr all'interno di GDB. Crea uno stato angr dallo stato corrente del debugger.
pip install angrgdb
echo "python import angrgdb.commands" >> ~/.gdbinit
angrgdb implementa l'API angrdbg in GDB.
Puoi usarlo in script come questo:
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!
Puoi anche usare i comandi di angrgdb direttamente in GDB per cose semplici:
angrgdb sim <nome registro> [dimensione] Simbolizza un registroangrgdb sim <indirizzo> [dimensione] Simbolizza un'area di memoriaangrgdb list Elenca tutti gli elementi che hai reso simboliciangrgdb find <indirizzo0> <indirizzo1> ... <indirizzoN> Imposta la lista dei target da trovareangrgdb avoid <indirizzo0> <indirizzo1> ... <indirizzoN> Imposta la lista dei target da evitareangrgdb reset Resetta il contesto (valori simbolici e target)angrgdb run Genera uno stato dallo stato del debugger ed esegue l'esplorazioneangrgdb shell Apre una shell con un'istanza di StateManager creata dallo stato corrente di GDBangrgdb interactive Genera uno stato dallo stato del debugger ed esplora manualmente usando una versione modificata di angr-cliUn esempio di risoluzione di crackme usando angrgdb+GEF+idb2gdb:
Questo è un consiglio se non vuoi usare angrgdb dalla riga di comando ma vuoi usare uno script python.
Per caricare uno script in GDB usa source script.py.
Tesi PDF.
Bibtex:
@misc{fioraldi2020symbolic,
title={Symbolic Execution and Debugging Synchronization},
author={Andrea Fioraldi},
year={2020},
eprint={2006.16601},
archivePrefix={arXiv},
primaryClass={cs.CR}
}