CTFで学ぼう!
リバースエンジニアリング
@junk_coken
自己紹介
● ジャンクさん(@junk_coken)
● どこかの留年しそうな専門学校生
● セキュリティのことを勉強中
● java女子部は昨年12月の部活からの超新参
● CTF初心者
● LT初です
リバースエンジニアリング、ご存知ですか?
リバースエンジニアリングとは
● 機械語である実行ファイル(.jarなど)から人間が
読めるソースコードを導き出すこと。
(一部の超人はバイナリ読んじゃう)
● マルウェア(ウイルス)の解析によく使われる手法
の一つ。
では、CTFはご存知ですか?
CTFとは
● Capture The Flagの略。
● セキュリティ技術を競うコンテスト。
● 有名なCTFでは日本では「SECCON」、 海外では
「DEFCON」などがある。
● CTFで問われる技術の中に、
リバースエンジニアリングが存在する!
リバースエンジニアリング問題を
解いてみよう!
SECCON2015 Online CTF binary100
Reverse-Engineering Android APK 1
問題文:じゃんけんに1000回連続で勝ち続けよ
rps.apk ← 実行ファイルが落ちてくる
(解答は SECCON{hogehoge} の形式)
リバースエンジニアリングは難しい?
リバースエンジニアリングは難しい?
ツールで簡単!!!!!
ざっくりリバースエンジニアリング
1. apkをzipとして解凍
2. 中のclasses.dexをdex2jarというツールでjarファイルに変換
3. 変換したjarをzipとして解凍
4. 中のclassファイルをjd-guiというツールで開く
参考:
http://qiita.com/kasaharu/items/900fc937be80d87090ce
http://d.hatena.ne.jp/ozuma/20130817/1376748772
_人人人人人人_>   完成   < ̄^Y^Y^Y^Y^Y ̄
読める!!
読めるぞ!!
if (1000 == MainActivity.this.cnt) {
localTextView.setText("SECCON{" + String.
valueOf((MainActivity.this.cnt + MainActivity.this.
calc()) * 107) + "}");
}
つまり・・・
解答:SECCON{ (1000+calc()の値) * 107 }
calc()とは何ぞや?
static
{
System.loadLibrary("calc");
}
public native int calc();
どうやらライブラリらしい・・・
libフォルダにlibcalc.soが存在
soファイルとは?
● Shared Objectという共有ライブラリ
● Linuxで扱われるELF形式の実行ファイル
● javaほどわかりやすい
リバースエンジニアリングはできない
逆アセンブルをすることになる
x86フォルダ内のlibcalc.soをobjdumpで逆アセンブル!
$ objdump -d libcalc.so
<Java_com_example_seccon2015_rock_1paper_1scissors_
MainActivity_calc>:
400: b8 07 00 00 00 mov $0x7,%eax
405: c3 ret
movは値をレジスタ(ここではeax)に格納する命令。
7をeaxに格納し、戻り値としてeaxを返している。
soファイルをリバースエンジニアリング!
x86フォルダ内のlibcalc.soをobjdumpで逆アセンブル!
$ objdump -d libcalc.so
<Java_com_example_seccon2015_rock_1paper_1scissors_
MainActivity_calc>:
400: b8 07 00 00 00 mov $0x7,%eax
405: c3 ret
movは値をレジスタ(ここではeax)に格納する命令。
7をeaxに格納し、戻り値としてeaxを返している。
soファイルをリバースエンジニアリング!
calc()は7を返すことがわかる!
それでは解答!
SECCON{(1000+7) * 107}
↓
SECCON{107749}
SECCON2015onlineCTF問題:https://github.
com/SECCON/SECCON2015_online_CTF
まとめ
● リバースエンジニアリングすることでflagのように隠された情報
がわかってしまう
(例えば、秘密鍵をそのままソースに埋めていたら・・・)
● 難読化を行うことでリバースエンジニアリングされにくくするこ
とはできるが大体時間稼ぎにしかならないと思われる。
● 機密情報はなるべくソースに入れないのが吉。
まとめ
ここで紹介した技術は絶対に悪用しないように
お願いします。
基本的にリバースエンジニアリングは著作者の許可
なく行うことは許されません。
ご清聴ありがとうございました

ctfで学ぼうリバースエンジニアリング