差分表示

  • 最後の更新で追加された行はこのように表示します。
  • 最後の更新で削除された行はこのように表示します。

#contents

* 逆アセンブル
 objdump -M intel -S -d <elffile>
 objdump -s -j .data <elffile>
 objdump -s -j .rodata <elffile> # .rdataの場合もある

C++なら--demangleを追加するといい

- [[radare2>http://poppycompass.hatenablog.jp/entry/2016/10/26/164034]]
- [[binary.ninja>https://binary.ninja/]]
- [[Hopper Disassembler>https://www.hopperapp.com/]]

[[初学者向け x86/MacOSX 64bit アセンブリ>http://ylb.jp/Tech/x86_64ASM/x86_64_onMac.html]]
** 命令リファレンス
- [[x86/x64 SIMD命令一覧表 (SSE〜AVX2)>http://www.officedaytime.com/tips/simd.html]]
- [[The Intel Intrinsics Guide>https://software.intel.com/sites/landingpage/IntrinsicsGuide/]]
* セクション一覧表示
 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 備忘録>http://th0x4c.github.com/blog/2013/04/10/gdb-calling-convention]]

- Windows
-- 第4引数まではrcx、rdx、r8、r9レジスタにセットされ、以降は4ワード(0x20バイト)空けてスタックにセットされることがわかる。 この4ワードはhome spaceと呼ばれ、レジスタの値の退避などに用いられる。
-- [[Windows x64で電卓を起動するシェルコードを書いてみる - ももいろテクノロジー>http://inaz2.hatenablog.com/entry/2015/07/26/175115]]
-- [[レジスタの使用>https://msdn.microsoft.com/ja-jp/library/9z1stfyw.aspx]]

スタックを片付けるのはどちらも呼び出し元(Caller)
- [[x86 calling conventions - Wikipedia>https://en.wikipedia.org/wiki/X86_calling_conventions#List_of_x86_calling_conventions]]
** 呼び出し規約(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>https://gchq.github.io/CyberChef/#recipe=From_Hex(%27Auto%27)&input=NjIzNzYyNjUzODMzMzM2NjYxMzYzMzYzMzk2MjM0MzEzMTM1NjUzNzYyNjY2NDY0]]も便利。
*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ソルバー
- [[CTF/Toolkit/z3py - 電気通信大学MMA>https://wiki.mma.club.uec.ac.jp/CTF/Toolkit/z3py]]
- [[Solving a simple crackme using Z3 - Aneesh Dogra’s Blog>https://anee.me/solving-a-simple-crackme-using-z3-68c55af7f7b1]]

* 公開鍵暗号
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!>http://wiki.onakasuita.org/pukiwiki/?%E3%82%88%E3%81%8F%E4%BD%BF%E3%81%86ASM%E5%91%BD%E4%BB%A4%E3%83%99%E3%82%B9%E3%83%88100%E4%BD%8D%E3%81%AB%E8%AA%AC%E6%98%8E%E3%81%A4%E3%81%91%E3%81%A6%E3%81%BF%E3%81%9F]]

---(
■環境セットアップ
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
---)

*常設サイト
- [[ksnctf>http://ksnctf.sweetduet.info/]]
- [[akictf>http://ctf.katsudon.org/]]
- [[Advent Calendar CTF 2014>http://adctf2014.katsudon.org/]]
- [[ESCTF>http://s01.elliptic-shiho.xyz/ctf/]]
- [[Pwnable.kr>http://pwnable.kr/index.php?p=probs]]
- [[ctf4u>http://ctf.katsudon.org/ctf4u/]]
- [[CpawCTF - Main page>https://ctf.cpaw.site/]]
- [[常設CTFまとめ - WTF!?>http://nanuyokakinu.hatenablog.jp/entry/2015/08/24/213158]]
* 過去問
- [[pwn challenges list>https://pastebin.com/uyifxgPu]]
- [[Crypto Challenges List(2017)>https://pastebin.com/uttU8Pn3]]


*ツール
- [[zardus/ctf-tools>https://github.com/zardus/ctf-tools]]
- Pwntools https://qiita.com/8ayac/items/12a3523394080e56ad5a
* .NET
- [[JustDecompile .NET Assembly Decompiler & Browser - Telerik>http://www.telerik.com/products/decompiler.aspx]]
- [[Assembly Diff Tool for .NET - JustAssembly>http://www.telerik.com/justassembly]]
- [[dotPeek: Free .NET Decompiler & Assembly Browser by JetBrains>https://www.jetbrains.com/decompiler/]]
- [[0xd4d/de4dot: .NET deobfuscator and unpacker.>https://github.com/0xd4d/de4dot]]
-- [[String decryption with de4dot | Life In Hex>https://lifeinhex.com/string-decryption-with-de4dot/]]
- https://github.com/0xd4d/dnSpy
- ILSpy
-- デコンパイルに加え、ILのディスアセンブルもセットで見るといい。async/awaitなどはデコンパイル結果に出てこないことがある
- [[The truth about String Protection by Obfuscators>http://www.remotesoft.com/salamander/stringencrypt/]]
* Android
- デコンパイル・再パッケージ
-- APK-Multi-Tool
-- [[Cracking Android App Binaries>http://resources.infosecinstitute.com/android-hacking-security-part-17-cracking-android-app-binaries/]]
-- [[skylot/jadx: Dex to Java decompiler>https://github.com/skylot/jadx]]
- エミュレータ
-- BlueStacks

* Stegano
- stegsolve.jar
- [[ステガノグラフィーの解析について>https://digitaltravesia.jp/usamimihurricane/webhelp/_RESOURCE/MenuItem/another/anotherAboutSteganography.html]]
*資料
[[gdbの使い方のメモ - ももいろテクノロジー>http://inaz2.hatenablog.com/entry/2014/05/03/044943]]
[[ネズミ本のpwn編をやってみた。 - レガシーガジェット研究所>https://k-onishi.hatenablog.jp/entry/2018/11/11/210134]]
[[書式指定文字列攻撃 - kusano_kの日記>http://d.hatena.ne.jp/kusano_k/20140302/1393781714]]
[[IPA ISEC セキュア・プログラミング講座:C/C++言語編 第10章 著名な脆弱性対策:フォーマット文字列攻撃対策>http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c906.html]]
[[Assembly - System Calls>http://www.tutorialspoint.com/assembly_programming/assembly_system_calls.htm]]
[[Linux x86用のシェルコードを書いてみる - ももいろテクノロジー>http://inaz2.hatenablog.com/entry/2014/03/13/013056]]
[[x86 alphanumeric shellcode stagerを書いてみる - ももいろテクノロジー>http://inaz2.hatenablog.com/entry/2014/07/12/000007]]
[[Note of Exploiting - Experiment - Port-Bindig Shellcode>http://noe.ninja-web.net/ex/ex_portbindingshell-01.html]]
[[System Call Table>http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html]]
*シェルコード
[[shell-storm | Shellcodes Database>http://shell-storm.org/shellcode/]]
[[stagger that reads second stage shellcode (127 bytes maximum) from stdin - 14 bytes>http://shell-storm.org/shellcode/files/shellcode-824.php]]
[[Socket Re-use Combo for linux x86 systems by ZadYree -- 50 bytes>http://shell-storm.org/shellcode/files/shellcode-881.php]]