
GDB内でangrを使用します。現在のデバッガ状態からangrの状態を作成します。
GDB内でangrを使用します。現在のデバッガ状態からangr状態を作成します。
pip install angrgdb
echo "python import angrgdb.commands" >> ~/.gdbinit
angrgdbはGDBでangrdbg APIを実装しています。
スクリプト内で次のように使用できます:
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!
簡単な操作には、GDB内でangrgdbコマンドを直接使用することもできます:
angrgdb sim <register name> [size] レジスタをシンボル化するangrgdb sim <address> [size] メモリ領域をシンボル化するangrgdb list シンボルとして設定したすべてのアイテムを一覧表示するangrgdb find <address0> <address1> ... <addressN> 探索目標のリストを設定するangrgdb avoid <address0> <address1> ... <addressN> 回避目標のリストを設定するangrgdb reset コンテキスト(シンボル値と目標)をリセットするangrgdb run デバッガ状態から状態を生成し、探索を実行するangrgdb shell 現在のGDB状態から作成されたStateManagerインスタンスでシェルを開くangrgdb interactive デバッガ状態から状態を生成し、angr-cliの修正版を使って手動で探索するangrgdb+GEF+idb2gdbを使用したクラックミー解法の例:
これは、CLIからangrgdbを使用せずにPythonスクリプトを使用したい場合のヒントです。
GDBでスクリプトを読み込むには、source script.pyを使用します。
論文 PDF.
Bibtex:
@misc{fioraldi2020symbolic,
title={Symbolic Execution and Debugging Synchronization},
author={Andrea Fioraldi},
year={2020},
eprint={2006.16601},
archivePrefix={arXiv},
primaryClass={cs.CR}
}