blog-竿竹-この広告は、90日以上更新していないブログに表示しています。writeupDefcon2016のbaby-re、write-upを見ていると、私のように真面目に連立方程式を解いているパターンの他に、angrというフレームワークを使って自動解析して解いているパターンが多く見受けられました。そこで、angrの勉強をしてみました。tasks.(公式より)angrはバイナリ解析のフレームワークです。静的解析と動的解析の両方に対応しており、いろいろな用途に適用できます。□CTFへのangrの適用プログラムを実行したときに、特定の条件を満たす(FLAGが表示される)ような入力を探すとき、ブルートフォースとは違い、アセンブリの構造を解析してあるアドレスに到達するメモリ状態を調査してくれるため、ブルートフォースとは比較にならないくらいなようです。Ubuntu)インストール方法に書いてることをまとめると、以下の通りとなります。--upgradeをしておくとよいと思います。angr□angrの実行方法まずはコマンドラインで使ってみて、動くことを確認しましょう。hard!\n'>>>解けました。私は6時間かけて解いたのですが、angrなら4行3分で解けました。上記の例でいうと、angrに解析の条件として渡しているのは、以下の二つだけです。find=0x40294b↑プログラムが0x40294b(flagを表示しているあたりのアドレス)に到達するような条件を検索するよう指定。avoid=0x402941↑プログラムが0x402941(Wrongと表示されるあたりのアドレス)は通らないよう指定。これにより、「Wrongと表示しないようにしながら、Flagを表示するような条件を探せ」という解析になります。Writeupによってはメモリ表示でflagを表示しているところもありますが、findの検索条件をきちんとflag表示部分に指定すれば、dump(画面出力)でOKです。(逆に、findの条件をflagを表示するよりも前にしてしまうと、dumpにflagが表示されず、メモリを表示させるしかありません)□angrだとどれくらい早いか?実行するPCにもよりますが、私のUbuntuOnVMware(ksスペック)でもかなり早いです。angrを使わない、単純なブルートフォースの場合そもそも入力が何桁の数字なのか、符号付なのか、最大何ビットなのか、という条件がわからないので、あたりを付けるところから始めなければなりません。仮に、asciiコード(32~126の間)だと目星がついていたとしても、およそ、100の13乗/2の回数の計算が必要になります。1京年以上くらいの時間がかかります。(間違ってたらすみません)angrだと?(findとavoidを指定)上で紹介したプログラムだと、私のPCでも3分程度で解けました。angrをうまく使う(find,avoid以外にもいろいろ指定)angrは、find,avoid以外にもいろいろ指定できます。こちらのwriteupでは、解析開始アドレス、BasePointerアドレス、スタックアドレス、入力アドレスなどを事前に調査して指定してやることで、解析をより高速にしています。このコードの場合、10秒程度で解けてしまいます。baby:reバイナリが渡されてそれを解析する問題。単...2016-04-18(sCTF2016Q1)rev2(45)rev1とほぼおなじじゃん・・・。Boy(20)stegsolveにかけても特に何も見つからず。Level1(Crypto10)月別アーカイブリンクはてなブログブログをはじめる週刊はてなブログはてなブログProはてなブログをはじめよう!saotakeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。