
Verwende angr innerhalb von GDB. Erstelle einen angr-Zustand aus dem aktuellen Debugger-Zustand.
angr innerhalb von GDB verwenden. Erstelle einen angr-Zustand aus dem aktuellen Debugger-Zustand.
pip install angrgdb
echo "python import angrgdb.commands" >> ~/.gdbinit
angrgdb implementiert die angrdbg API in GDB.
Du kannst es in Skripten wie folgt verwenden:
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!
Du kannst angrgdb-Befehle auch direkt in GDB für einfache Aufgaben verwenden:
angrgdb sim <register name> [size] Symbolisiere ein Registerangrgdb sim <address> [size] Symbolisiere einen Speicherbereichangrgdb list Liste alle Elemente auf, die du als symbolisch festgelegt hastangrgdb find <address0> <address1> ... <addressN> Setze die Liste der Find-Zieleangrgdb avoid <address0> <address1> ... <addressN> Setze die Liste der Avoid-Zieleangrgdb reset Setze den Kontext zurück (symbolische Werte und Ziele)angrgdb run Erzeuge einen Zustand aus dem Debugger-Zustand und führe die Erkundung durchangrgdb shell Öffne eine Shell mit einer StateManager-Instanz, die aus dem aktuellen GDB-Zustand erstellt wurdeangrgdb interactive Erzeuge einen Zustand aus dem Debugger-Zustand und erkunde manuell mit einer modifizierten Version von angr-cliEin Beispiel-Crackme-Lösung mit angrgdb+GEF+idb2gdb:
Dies ist ein Tipp, falls du angrgdb nicht über die CLI verwenden, sondern ein Python-Skript nutzen möchtest.
Um ein Skript in GDB zu laden, verwende source script.py.
Thesis PDF.
Bibtex:
@misc{fioraldi2020symbolic,
title={Symbolic Execution and Debugging Synchronization},
author={Andrea Fioraldi},
year={2020},
eprint={2006.16601},
archivePrefix={arXiv},
primaryClass={cs.CR}
}