Pwnのお勉強に便利なテクニックをご紹介
普段CTFでPwnに取り組む時、ちょっとした時短になるコマンドを書き留めておきます。つよエンジニアの皆さんやPwnerの方は普段から実践されているテクニックだと思うが、まとめられているところはあまりなかったのでメモです。
目次
- バイナリを実行する際のテク
- 変更監視で時短
- 視覚化テクニック
- アセンブリをお手軽に見る方法
- ちょっとした手間をお手軽にする方法
バイナリを実行する際のテク
変更監視で時短
ちょっとしたCのファイルを実行して動きを確認したい時に便利です。通常だと、この関数はどういう動きだったっけ?などの少しだけ確認したい場合にファイル開いて->コンパイルして->実行となるパターンを繰り返していますが、この作業、なかなか煩わしい一手間です。 そこで、変更監視にしてしまえば良いかということで色々ためしてしっくり来たのがこちら
https://qiita.com/tamanobi/items/74b62e25506af394eae5
本来はファイルの変更後に下記のようなコマンドを実行する必要があります。 echo_hello
int main(){ printf("hello"); }
gcc echo_hello.c -o echo_hello ./echo_hello hello # 出力結果
やりたいこと Cで書いたファイルを保存した際に 1. コンパイルする 2. 実行する
を実現したいので
上記の記事のファイルと組み合わせて実施しているコマンドがこちら。 ターミナル1
./mywatch.sh echo_hello.c 'gcc echo_hello.c -o echo_hello'
ターミナル2
./mywatch.sh echo_hello './echo_hello && echo "\n"' hello # Cのファイル変更の都度実行結果が表示される
mywatch.sh
は↑で参照させていただいた記事よりコピペしています。
ターミナルを2つ開いて実行するのが便利です。実行結果だけ追うようにしているとコンパイルの失敗時に気づけなくなるため。
node.jsでGulp watchしている時にCで簡単に実行する方法ないかなと考えた結果こちらの方法を思いつきました。
makeで実施する場合にはnodeとかrubyで良きツールがいくらでも出ているためそちらを利用する方が圧倒的に楽です。あくまでPwnのための勉強用途にどうぞ。
視覚化テクニック
アセンブラで出力する方法や、バイナリ解析時にあのコマンドどうするのだっけ集です。
アセンブリをお手軽に見る方法
アセンブラに通る時どうなるんだっけ..?というのをすぐに確認する方法。gdbやobjdumpを利用すればすぐ確認できますが、起動するのも面倒だよというものぐさな方の覚書用途に
- Cで書いたファイルをアセンブリでダンプする方法
※hello.cというファイルをダンプした場合、hello.sというファイルが作成されます。
gcc hello.c -S -masm=intel
↓
## %bb.0: push rbp .cfi_def_cfa_offset 16 .cfi_offset rbp, -16 mov rbp, rsp .cfi_def_cfa_register rbp sub rsp, 16
AT&T記法が好きな方は-masm=intel
オプションを外してください。
- ソースコードとの対応を確認したい場合は下記
gcc hello.c -S -g -masm=intel
ちょっとした情報をお手軽に見る方法
ちょっとした方法がわからない時に。調べれば3秒でわかることだけれどもしっておくと時短になるかもしれないテクニック?集。
- asciiコードを知りたい
man ascii
↓
~~ The hexadecimal set: 40 @ 41 A 42 B 43 C 44 D 45 E 46 F 47 G 48 H 49 I 4a J 4b K 4c L 4d M 4e N
それぞれ8進,10進,16進で確認できます。
0x41 は 'A'
また思い出した際に追記します...!