逆アセンブル
objdump -M intel -S -d <elffile> objdump -s -j .data <elffile> objdump -s -j .rodata <elffile> # .rdataの場合もある
C++なら--demangleを追加するといい
命令リファレンス
セクション一覧表示
readelf -S <elffile> 呼び出し規約(x64)
LinuxとWindowsで違うので注意。
スタックを片付けるのはどちらも呼び出し元(Caller) 呼び出し規約(ARM)
r0〜r3レジスタに第1〜第4引数がセットされ、r0レジスタに戻り値がセットされる。 第5引数以降にはスタックが利用される。http://inaz2.hatenablog.com/entry/2015/03/06/020239
メンバ関数の場合はthisが第一引数(r0)。関数内でr0を潰す場合はthisをr4に待避することが経験的に多い gdb
gdb-peda$ p/x $ebp-0x20 $2 = 0xffffdde0 gdb-peda$ p/x $rbp-0x20 $3 = 0x7fffffffdde0 gdb-peda$ x/1xg $rbp-0x20 0x7fffffffdde0: 0x0123456789abcdef
http://inaz2.hatenablog.com/entry/2014/05/03/044943
One-gadget RCE
http://katc.hateblo.jp/entry/2016/10/28/124025 バイナリ眺める
xxd -g 1
strings
strings -tx binary
これだとオフセットも出て便利
MD5
echo -n "hoge" | md5sum
"-n"を忘れると改行が入って値が変わるので注意。
ASCIIデコード
hex = "623762653833336661363363396234313135653762666464" puts [hex].pack("H*")
CyberChefも便利。 Rubyでソケット通信
https://github.com/nicklegr/seccon2014/blob/master/programming100/main.rbhttps://qiita.com/nicklegr/items/c85d4dac6f45492130c8#palindromes-pairs---coding-phase---ppc RubyでMechanize
http://qiita.com/nicklegr/items/881ea9edd48736b49a22#%E3%81%A6%E3%81%91%E3%81%84%E3%81%95%E3%82%93-for-%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E3%82%BA-misc-200
SATソルバー
公開鍵暗号
https://www.slideshare.net/sonickun/rsa-n-ssmjphttp://inaz2.hatenablog.com/entry/2016/01/09/032344 https://github.com/sonickun/cryptools https://github.com/Ganapati/RsaCtfTool https://qiita.com/kusano_k/items/9b74398f5bed2792d736#rsa-is-power katagaitai CTF勉強会
よく使うASM命令ベスト100位に説明つけてみた - おなかすいたWiki!
■環境セットアップ x64環境でx86バイナリを動かすパッケージ $ apt-get install gcc-multilib lib32z1 lib32ncurses5 lib32bz2-1.0 $ apt-get install libc6:i386 ELF解析用 $ apt-get install binutils Python,perl $ apt-get install python2.7 perl ROPガジェット探索用 $ wget https://github.com/downloads/0vercl0k/rp/rp-lin-x86 $ chmod +x rp-lin-x86; mv rp-lin-x86 /usr/local/bin その他 $ apt-get install socat nasm gdb-peda導入 $ apt-get install libncurses5-dev g++ python-dev texinfo $ cd /tmp $ wget http://ftp.gnu.org/gnu/gdb/gdb-7.9.tar.gz $ tar pxzf gdb-7.9.tar.gz $ cd gdb-7.9 $ ./configure --with-python=python2 && make && make install $ apt-get install git $ git clone https://github.com/longld/peda.git ~/peda $ echo "source ~/peda/peda.py" >> ~/.gdbinit
常設サイト
過去問
ツール
.NET
Android
Stegano
資料
gdbの使い方のメモ - ももいろテクノロジーネズミ本のpwn編をやってみた。 - レガシーガジェット研究所 書式指定文字列攻撃 - kusano_kの日記 IPA ISEC セキュア・プログラミング講座:C/C++言語編 第10章 著名な脆弱性対策:フォーマット文字列攻撃対策 Assembly - System Calls Linux x86用のシェルコードを書いてみる - ももいろテクノロジー x86 alphanumeric shellcode stagerを書いてみる - ももいろテクノロジー Note of Exploiting - Experiment - Port-Bindig Shellcode System Call Table シェルコード
shell-storm | Shellcodes Databasestagger that reads second stage shellcode (127 bytes maximum) from stdin - 14 bytes Socket Re-use Combo for linux x86 systems by ZadYree -- 50 bytes |