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