
Usa angr dentro de GDB. Crea un estado de angr a partir del estado actual del depurador.
Usa angr dentro de GDB. Crea un estado de angr a partir del estado actual del depurador.
pip install angrgdb
echo "python import angrgdb.commands" >> ~/.gdbinit
angrgdb implementa la API de angrdbg en GDB.
Puedes usarlo en scripts como este:
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!
También puedes usar los comandos de angrgdb directamente en GDB para tareas simples:
angrgdb sim <register name> [size] Simbolizar un registroangrgdb sim <address> [size] Simbolizar un área de memoriaangrgdb list Listar todos los elementos que has establecido como simbólicosangrgdb find <address0> <address1> ... <addressN> Establecer la lista de objetivos a encontrarangrgdb avoid <address0> <address1> ... <addressN> Establecer la lista de objetivos a evitarangrgdb reset Reiniciar el contexto (valores simbólicos y objetivos)angrgdb run Generar un estado a partir del estado del depurador y ejecutar la exploraciónangrgdb shell Abrir un shell con una instancia de StateManager creada a partir del estado actual de GDBangrgdb interactive Generar un estado a partir del estado del depurador y explorar manualmente usando una versión modificada de angr-cliUn ejemplo de resolución de crackme usando angrgdb+GEF+idb2gdb:
Este es un consejo si no quieres usar angrgdb desde la línea de comandos sino que quieres usar un script de Python.
Para cargar un script en GDB usa source script.py.
Tesis PDF.
Bibtex:
@misc{fioraldi2020symbolic,
title={Symbolic Execution and Debugging Synchronization},
author={Andrea Fioraldi},
year={2020},
eprint={2006.16601},
archivePrefix={arXiv},
primaryClass={cs.CR}
}