Reversing
別名: Rev, Reverse Engineering
CTFのジャンル
難読化されたプログラムを解読する
プログラムの例
フラグチェッカ
実行すると「フラグは何ですか?」と聞いてきて、チェックをするアルゴリズムを用いて入力した文字列がフラグと合っているか教えてくれる
暗号化プログラム
フラグが含まれているファイルを暗号化したプログラムを解析して、ファイルを復元する
フラグが出てくる系
ある条件を満たしたらフラグが出力される形の問題
ゲーム
解析してゲームの欠陥を見つけたり、チートをしたりする
など
バイナリに関する知識と、解析を効率よく行うスキルと、根気が必要
現実ではマルウェアの解析などに役に立つ
プログラムの形式
ELF
PE
Web Assembly
バイトコード (Python, JVM, lua, .NETなど)
プログラム言語 (C, JavaScript, Python, esolangなど)
ツール
ディスアセンブラ / デコンパイラ
objdump
原始的なディスアセンブラ
軽く確認したり、grepしたいときに便利
Ghidra https://github.com/NationalSecurityAgency/ghidra
アメリカのNSAが開発しているツール
無料で強力
様々な拡張がある
IDA https://hex-rays.com/ida-pro/
Hex Rays社が開発しているツール
IDA Freeは無料
IDA Proは高価だが強力で、マルウェア解析の業界ではよく使われている
radare2 https://github.com/radareorg/radare2
ターミナルで動くツール
多彩な機能がある
ちょっとした解析に便利
GUI版のCutterもある https://github.com/rizinorg/cutter
デバッガ
gdb
x64dbg https://github.com/x64dbg/x64dbg
Windowsのx86/x86_64のGUIデバッガ
Cheat Engine https://github.com/cheat-engine/cheat-engine
ゲームのチートツール
実際のチートにもよく使われるっぽい
Brainf*ckデバッガ http://moon.kmc.gr.jp/~prime/brainf_ck/env/
Cetus https://github.com/Qwokka/Cetus
Web Assembly製ゲームのチートのためのブラウザ拡張機能
z3 https://github.com/Z3Prover/z3
SAT/SMTソルバ
フラグを求めるのに必要な場合がある
angr
プログラムが特定の状態になるための入力の制約条件をシンボリック実行という手法で求めることができるライブラリ
簡単なRevだとangrで解けたりする
ILSpy
.NETデコンパイラ
有名
JetBrains dotpeek
.NETデコンパイラ
luadec
luaバイトコードのデコンパイラ
uncompyle6
.pycファイルのデコンパイラ
対応してないバージョンもあるのでそのときは気合
wasm2c
Web AssemblyをC言語に変換するツール
資料