バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall...

71
バイナリで遊ぼう バイナリで遊ぼう 坂井弘亮 坂井弘亮 (KOZOSプロジェクト プロジェクト )

Transcript of バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall...

Page 1: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

バイナリで遊ぼうバイナリで遊ぼう

坂井弘亮坂井弘亮(KOZOSプロジェクトプロジェクト )

Page 2: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

まずは報告まずは報告まずは報告まずは報告まずは報告まずは報告まずは報告まずは報告

Page 3: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

フィーリングで読むフィーリングで読む アセンブラ入門アセンブラ入門

Page 4: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

フィーリングで読むアセンブラ入門フィーリングで読むアセンブラ入門 とは何か?とは何か?

.

多種類のアセンブラをフィーリングで多種類のアセンブラをフィーリングで パッと読んでみようというパッと読んでみようという 現代の草食な若者向けの現代の草食な若者向けの

アセンブラ本アセンブラ本

Page 5: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

当初の予定当初の予定.

5種類くらいのアーキテクチャを5種類くらいのアーキテクチャを 見比べながら軽く読んでみる見比べながら軽く読んでみる

200ページくらいの薄い本ページくらいの薄い本

Page 6: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

できあがったものできあがったもの.

40種類のアーキテクチャを種類のアーキテクチャを 見比べながら軽く読んでみる見比べながら軽く読んでみる

800ページの薄くない本ページの薄くない本

Page 7: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

アーキテクチャ一覧アーキテクチャ一覧Alpha ARC ARM AVR CRIS FR30FR-V H8/300 PA-RISC x86 i960

IA-64 M32R 68HC11 68000M・・CORE MIPS MIPS64 MMIXMN10300 PDP-11 PowerPC

PowerPC64 S/390 SH SH64 SPARCStrongARM V850 VAX x86-64XScale Xstormy16 XtensaThumb AVR(8bit) H8/300H68HC11(16bit) MIPS16

Page 8: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

熱血!熱血!アセンブラ入門アセンブラ入門

Page 9: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
Page 10: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

三省堂の三省堂の コンピュータ書籍売場がコンピュータ書籍売場が たいへんなことにたいへんなことに

Page 11: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
Page 12: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

もうひとつもうひとつ報告報告

Page 13: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

アセンブラ短歌アセンブラ短歌

Page 14: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

アセンブラ短歌とはアセンブラ短歌とは5・7・5・7・7の機械語5・7・5・7・7の機械語 コードでプログラムをコードでプログラムを 書いてみるという書いてみるという

近未来の文化的趣味近未来の文化的趣味

Page 15: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

こんな感じですこんな感じです

Page 16: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

68 72 6c 64 2168 6f 20 57 6f 90 9068 48 65 6c 6c89 e5 6a 0c 55 6a 0250 90 6a 04 58 cd 80

Page 17: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

札に詠むと札に詠むとこんな感じこんな感じ

Page 18: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
Page 19: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

アセンブラ短歌の作品例アセンブラ短歌の作品例

6a 00 58 50 4068 79 61 6d 61 50 406a 08 5a 5b 4068 57 61 6b 61 54 4059 cd 80 58 58 58 c3

機械語コードで機械語コードで韻をふむ韻をふむ

Page 20: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

そんなアセンブラ短歌そんなアセンブラ短歌 ですがですが

Page 21: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

掛軸になったり掛軸になったり

Page 22: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

本になったり本になったり

Page 23: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

31バイトでつくるバイトでつくる アセンブラプログラミングアセンブラプログラミング アセンブラ短歌の世界アセンブラ短歌の世界

Page 24: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

歌人歌人 (Tankists)坂井坂井 弘亮弘亮 (白樺派白樺派 ) 愛甲愛甲 健二健二 (新思潮派新思潮派 ) 松田松田 和樹和樹 (明星派明星派 ) 坂井坂井 丈泰丈泰 (アララギ派アララギ派 ) 竹迫竹迫 良範良範 (アララギ派アララギ派 )

Page 25: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

Tankable Architectures

x86(Intel) M32C(三菱三菱 ) MN10300(松下松下 )

RL78(ルネサスルネサス) RX(ルネサスルネサス)

Page 26: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

さて本題さて本題

Page 27: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

KOZOSプロジェクトのプロジェクトの最近の活動最近の活動

SECCONにコミットにコミットしていますしています

Page 28: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

SECCONとは何かSECCONとは何か

セキュリティ競技のセキュリティ競技のコンテストですコンテストです

Page 29: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

SECCONで行われているSECCONで行われている競技・コンテストなど競技・コンテストなど

CTF バイナリかるたバイナリかるた アセンブラかるたアセンブラかるた

アセンブラ・クロスワードアセンブラ・クロスワード バイナリカレンダーバイナリカレンダー

Page 30: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

なぜ低レイヤー?なぜ低レイヤー?セキュリティ分野ではセキュリティ分野では

アセンブラ・バイナリ解析のアセンブラ・バイナリ解析の 技術は超重要技術は超重要

Page 31: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

本日はこれらの中から本日はこれらの中から いくつかを紹介しますいくつかを紹介します

Page 32: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

バイナリかるたバイナリかるた

Page 33: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

バイナリかるたバイナリかるたとは何か?とは何か?

Page 34: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

ルールはルールは超簡単超簡単

Page 35: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

まず,こんなかるた札をまず,こんなかるた札を 用意して机に並べます用意して机に並べます

Page 36: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
Page 37: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

こんなデータをこんなデータを プロジェクタで映しますプロジェクタで映します

Page 38: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
Page 39: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

スパーン!スパーン! みたいな感じですみたいな感じです

Page 40: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

SECCONでの実施風景での実施風景

Page 41: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

アセンブラかるたアセンブラかるた

Page 42: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

アセンブラかるたアセンブラかるたとは何か?とは何か?

Page 43: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

ルールはルールは超簡単超簡単

Page 44: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

まず,こんなかるた札をまず,こんなかるた札を 用意して机に並べます用意して机に並べます

Page 45: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
Page 46: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

例えばこんな命令を例えばこんな命令を 読み上げます読み上げます

Page 47: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

NOP HALT RET

PUSH EAX

Page 48: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

スパーン!スパーン! みたいな感じですみたいな感じです

Page 49: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

アセンブラ・クロスワードアセンブラ・クロスワード

Page 50: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

縦のカギ縦のカギ 1: 定番の定番のEIP取得取得 2: EAXを3倍にを3倍に 3: 引数の指す先を引数の指す先を 関数呼び出し関数呼び出し

横のカギ横のカギ 2: 4バイトの4バイトのNOP 3: 第1引数をスタックに積む第1引数をスタックに積む 4: EAXの指す先をの指す先をEAXにに 5: 戻り値に1を設定戻り値に1を設定

Page 51: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

解答解答

Page 52: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
Page 53: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

SECCON会場で会場で 配布した記念品配布した記念品

Page 54: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

バイナリカレンダーバイナリカレンダー

Page 55: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
Page 56: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

ところで前述ところで前述 したようにしたように

Page 57: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

私はアセンブラとかの私はアセンブラとかの 一般ウケを狙った本を一般ウケを狙った本を 多く書いているのですが多く書いているのですが

Page 58: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

これらのネタでもこれらのネタでも 書いてみました書いてみました

Page 59: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

バイナリでバイナリで 遊ぼう!遊ぼう!

Page 60: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

著者陣著者陣 (Binarists)坂井坂井 弘亮弘亮 坂井坂井 丈泰丈泰 愛甲愛甲 健二健二 竹迫竹迫 良範良範 松田松田 和樹和樹

Page 61: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

目的目的現代の草食な若者の間で現代の草食な若者の間で

近年流行しているバイナリ解析近年流行しているバイナリ解析 なるものの,正しい楽しみかたをなるものの,正しい楽しみかたを

一般に伝えなければ一般に伝えなければ

Page 62: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

書籍中で書籍中で 紹介している紹介している バイナリ遊びバイナリ遊び

Page 63: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

バイナリかるたバイナリかるた アセンブラかるたアセンブラかるた などの他になどの他に

Page 64: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

バイナリ体操バイナリ体操 バイナリけんけんぱバイナリけんけんぱ バイナリ鑑賞バイナリ鑑賞

Page 65: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

「そんなこと言っても「そんなこと言っても 2進数が苦手です」2進数が苦手です」「ていうかそもそも「ていうかそもそも バイナリって何?」バイナリって何?」

Page 66: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

そんなあなたのためにそんなあなたのために

Page 67: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

書籍中で紹介している書籍中で紹介している 2進数に慣れ親しむ2進数に慣れ親しむ 方法を紹介方法を紹介

Page 68: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

普通のけんけんぱ普通のけんけんぱ

Page 69: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

バイナリけんけんぱバイナリけんけんぱ

Page 70: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

Page 71: バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)

どうもありがとうどうもありがとうございましたございました