逆アセンブル

objdump -M intel -S -d <elffile>
objdump -s -j .data <elffile>
objdump -s -j .rodata <elffile> # .rdataの場合もある
C++なら--demangleを追加するといい
初学者向け x86/MacOSX 64bit アセンブリ
命令リファレンス

セクション一覧表示

readelf -S <elffile>
呼び出し規約(x64)

LinuxとWindowsで違うので注意。
- Linux
- 整数・ポインタ引数: RDI, RSI, RDX, RCX, R8, R9
- 浮動小数点引数: XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7
- 戻り値: RAX
- システムコールでは RCX の代わりに R10 を使用
- レジスタだけでは引数の数が不足する場合はスタックを利用
- Linux x86-64 の呼出規約(calling convention)を gdb で確認する - th0x4c 備忘録
スタックを片付けるのはどちらも呼び出し元(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.rb
https://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-ssmjp
http://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 Database
stagger that reads second stage shellcode (127 bytes maximum) from stdin - 14 bytes
Socket Re-use Combo for linux x86 systems by ZadYree -- 50 bytes