逆アセンブル

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で違うので注意。

スタックを片付けるのはどちらも呼び出し元(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