
Use angr dentro do GDB. Crie um estado angr a partir do estado atual do depurador.
Use angr dentro do GDB. Crie um estado angr a partir do estado atual do depurador.
pip install angrgdb
echo "python import angrgdb.commands" >> ~/.gdbinit
angrgdb implementa a API do angrdbg no GDB.
Você pode usá-lo em 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!
Você também pode usar comandos angrgdb diretamente no GDB para coisas simples:
angrgdb sim <register name> [size] Simbolizar um registradorangrgdb sim <address> [size] Simbolizar uma área de memóriaangrgdb list Listar todos os itens que você definiu como simbólicosangrgdb find <address0> <address1> ... <addressN> Definir a lista de alvos findangrgdb avoid <address0> <address1> ... <addressN> Definir a lista de alvos avoidangrgdb reset Redefinir o contexto (valores simbólicos e alvos)angrgdb run Gerar um estado a partir do estado do depurador e executar a exploraçãoangrgdb shell Abrir um shell com uma instância de StateManager criada a partir do estado atual do GDBangrgdb interactive Gerar um estado a partir do estado do depurador e explorar manualmente usando uma versão modificada do angr-cliUm exemplo de resolução de crackme usando angrgdb+GEF+idb2gdb:
Esta é uma dica se você não quiser usar angrgdb a partir da linha de comando, mas quiser usar um script python.
Para carregar um script no GDB use source script.py.
Tese PDF.
Bibtex:
@misc{fioraldi2020symbolic,
title={Symbolic Execution and Debugging Synchronization},
author={Andrea Fioraldi},
year={2020},
eprint={2006.16601},
archivePrefix={arXiv},
primaryClass={cs.CR}
}