第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

28
リバースエンジニアリング入門 ~楽しいバイナリ解析~ 長崎県立大学 国際情報学部 情報メディア学科 片渕 小夜 2014/09/06 1

description

第3回長崎デジタルコンテストで発表したLTスライド. 荒い説明の所があるのでわかりづらい部分があるかもしれません…

Transcript of 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

Page 1: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

リバースエンジニアリング入門 ~楽しいバイナリ解析~

長崎県立大学

国際情報学部 情報メディア学科

片渕 小夜

2014/09/06 1

Page 2: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

だれおま

名前:片渕 小夜(かたふち さや)

年齢:21歳

所属:長崎県立大学国際情報学部情報メディア学科4年

進路:来年4月から本学の大学院へ

趣味:プログラミング,TVゲーム

Twitter:@reiji1020

2014/09/06 2

Page 3: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

ちなみに

2014/09/06 3

Page 4: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

2014/09/06 4

(第2回長崎デジタルコンテストHPより)

Page 5: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

昨年IPADもらいました

2014/09/06 5

Page 6: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

開発機として元気に活躍してます

2014/09/06 6

Page 7: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

本題

2014/09/06 7

Page 8: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

Q.TV(PC)ゲームしますか?

2014/09/06 8

Page 9: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

チート(改造)して遊んだことはありますか?

2014/09/06 9

モンスターハンター4(2013,カプコン)より

Page 10: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

自分はあります

2014/09/06 10

Page 11: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

リバースエンジニアリング

• ソフトウェアの動作を解析して,ソースコードやプログラムの構造を分析すること

• サードパーティ企業が他社製品の互換製品を作る際によく用いられる

• リバースエンジニアリングの腕を競う「CTF(Capture The Flag)」というものがある

2014/09/06 11

Page 12: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

REできると得すること

• ゲームでチートされることを防ぐ –無限ライフ,無限ボム,常に攻撃力MAXなど

–ソフトウェアの脆弱性を見つけ,更に安全性を高めることが出来る

• インターネット上に存在するマルウェアを解析してデータを提供することができる

• コンピュータでソフトウェアが動く仕組みをより深く理解できる

2014/09/06 12

Page 13: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

REでやっちゃいけないこと

利用にライセンスキーが必要なソフトウェア(Microsoft Officeなど)をアクティベート無しで利用できるように改造することなど

2014/09/06 13

絶対にやらないでね!

Page 14: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

REを始める際に必要なもの

• アセンブラ(機械語)に関する最低限の知識

• Windows7or8の入ったPC

• やる気(←超重要)

2014/09/06 14

Page 15: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

???

2014/09/06 15

オレたちハッカーは普通のウィンドウズみたいなGUIでPCを扱うことはほとんど無い 初歩的なスクリプト言語から FortranだのCOBOLだのの高度なプログラミング言語まで駆使して端末を動かしたりネットワークに侵入してコントロールしたり… (ブラッディ・マンデイ 6巻 高木藤丸)

Page 16: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

???

2014/09/06 16

オレたちハッカーは普通のウィンドウズみたいなGUIでPCを扱うことはほとんど無い 初歩的なスクリプト言語から FortranだのCOBOLだのの高度なプログラミング言語まで駆使して端末を動かしたりネットワークに侵入してコントロールしたり… (ブラッディ・マンデイ 6巻 高木藤丸)

Page 17: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

例えばこのようなソフトウェア

2014/09/06 17

Crackme.exe

Page 18: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

2014/09/06 18

Windows7では 1980年以降の日付し

か 設定できない

このプログラムを 解析するしかない!

Page 19: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

どういうプログラムだろう?

『1192年05月15日にしか起動できない』

→本日が何年何月何日か確認するプログラムがある

2014/09/06 19

今日は1192年05年15日か?

次のプログラムを起動 メッセージボックスを出して終了

Yes No

Page 20: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

Ollydbg

• デバッガのひとつ

• フリーで使えるプログラム解析の強い味方

• 基本英語だが有志による日本語化パッチも配布されている

2014/09/06 20

Page 21: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

2014/09/06 21

GetSystemTime API 恐らく時間を取得する?

DialogBoxParam API 日時が違うというメッセージを出す?

このへんで日時判定?

Page 22: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

2014/09/06 22

JNZ命令:指定のアドレスにジャンプ(00402960へ) CMP命令:レジスタの中の数値と指定の数値を比較

※00402960にはエラーメッセージを表示する処理が書かれています

エラーメッセージを表示する命令にジャンプするようになっているので…

このJNZ命令を何もしない命令「NOP命令」に 書き換えることで条件をクリアする!

Page 23: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

2014/09/06 23

JMZ命令(バイナリで75 27と表現)を

NOP命令(バイナリで75 0Cと表現)へ

Page 24: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

強制終了は免れることが出来る

2014/09/06 24

この先もまだまだ続くけど今日はこれまで

Page 25: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

どうでしょうか?

2014/09/06 25

Page 26: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

少し難しかったでしょうか?

2014/09/06 26

Page 27: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

とりあえず言いたいこと

• 何気なく使用していたソフトウェアの中身を覗くことで,似たようなプログラムを作る時に応用することが出来る

• コンピュータやソフトウェアの最小単位は“バイナリ”である

• アセンブラの勉強は今からでもでき,リバースエンジニアリングの勉強も今からできる

2014/09/06 27

Page 28: 第3回長崎デジタルコンテストLT『リバースエンジニアリング入門』

参考書籍&おすすめ書籍

• 『たのしいバイナリの歩き方』(技術評論社)

• 『リバースエンジニアリング Pythonによるバイナリ解析手法』(オライリー・ジャパン)

• 『アナライジング・マルウェア フリーツールを使った感染事案対処』(オライリー・ジャパン)

• 『アセンブリ言語の教科書』(データハウス)

2014/09/06 28