Assembly Tanka on Web - Aiko Kenji

64
突然ですが2

description

http://ja.avtokyo.org/MediaArchives

Transcript of Assembly Tanka on Web - Aiko Kenji

Page 1: Assembly Tanka on Web - Aiko Kenji

突然ですが…

2

Page 2: Assembly Tanka on Web - Aiko Kenji

みなさん! 機械語、好きですか?

3

Page 3: Assembly Tanka on Web - Aiko Kenji

ぼくは大好きです!

4

Page 4: Assembly Tanka on Web - Aiko Kenji

ぶっちゃけ、 今日は機械語の話しかしません!

5

Page 5: Assembly Tanka on Web - Aiko Kenji

機械語に興味が無い人は… 遠慮なく寝ててください!

6

Page 6: Assembly Tanka on Web - Aiko Kenji

ところで

7

Page 7: Assembly Tanka on Web - Aiko Kenji

最近思うんです…

8

Page 8: Assembly Tanka on Web - Aiko Kenji

機械語に足りないのは… すばりカジュアル性じゃないのかと

9

Page 9: Assembly Tanka on Web - Aiko Kenji

もしかして、機械語は難しいと 思われてるのかもしれない

10

Page 10: Assembly Tanka on Web - Aiko Kenji

だれもがカジュアルに 機械語を楽しめるようにしたい

11

Page 11: Assembly Tanka on Web - Aiko Kenji

そこで…

12

Page 12: Assembly Tanka on Web - Aiko Kenji

カジュアル機械語プログラミング 『アセンブラ短歌』

13

Page 13: Assembly Tanka on Web - Aiko Kenji

「アセンブラ短歌」とは

五・七・五・七・七バイトから成る機械語コードでプログラムを書いてみるという近未来の文化的趣味であり,近年, 国内のハッカー間で密かなブー

ムが起きている.

考案者:坂井弘亮 http://kozos.jp/asm-tanka/

14

Page 14: Assembly Tanka on Web - Aiko Kenji

(ごく一部の)バイナリアンの反応

Page 15: Assembly Tanka on Web - Aiko Kenji

イヤッッホォォオオォオウ!

Page 16: Assembly Tanka on Web - Aiko Kenji

その他の反応

Page 17: Assembly Tanka on Web - Aiko Kenji

何これキモい・・・・・・・?

Page 18: Assembly Tanka on Web - Aiko Kenji

驚異の格差社会!(温度差)

Page 19: Assembly Tanka on Web - Aiko Kenji

そもそもアセンブラが あんまり一般的じゃない

Page 20: Assembly Tanka on Web - Aiko Kenji

にも関わらず…

Page 21: Assembly Tanka on Web - Aiko Kenji

公式Webページをみてみると…

Page 22: Assembly Tanka on Web - Aiko Kenji

6a 00 58 50 40 68 79 61 6d 61 50 40 6a 08 5a 5b 40 68 57 61 6b 61 54 40 59 cd 80 58 58 58 c3

各句が「40」という一定のバイトで終了していることに

注目してください.つまり,韻を踏んでいるわけです.push-pop-push-inc, push-push-inc のような,かろやかなリズムも感じられます. こういうのが「味わい深い」ということかなあ, (公式ページhttp://kozos.jp/asm-tanka/からの引用)

Page 23: Assembly Tanka on Web - Aiko Kenji

6a 00 58 50 40 68 79 61 6d 61 50 40 6a 08 5a 5b 40 68 57 61 6b 61 54 40 59 cd 80 58 58 58 c3

各句が「40」という一定のバイトで終了していることに

注目してください.つまり,韻を踏んでいるわけです.push-pop-push-inc, push-push-inc のような,かろやかなリズムも感じられます. こういうのが「味わい深い」ということかなあ, (公式ページhttp://kozos.jp/asm-tanka/からの引用)

Page 24: Assembly Tanka on Web - Aiko Kenji
Page 25: Assembly Tanka on Web - Aiko Kenji

しかも、いまどきフレームサイトww

Page 26: Assembly Tanka on Web - Aiko Kenji

でも、

Page 27: Assembly Tanka on Web - Aiko Kenji

アセンブラ短歌の楽しみかたは 他にもたくさんあります!

Page 28: Assembly Tanka on Web - Aiko Kenji

というわけで…

Page 29: Assembly Tanka on Web - Aiko Kenji

「アセンブラ短歌 on Web」を 作ってみよう

愛甲健二

@07c00

[email protected]

Page 30: Assembly Tanka on Web - Aiko Kenji

「アセンブラ短歌 on Web」 とは ブラウザ上からアセンブラ短歌をカジュアルに試せる環境, スマホからもアクセスでき, 通勤電車やちょっとした待ち時間にも気軽に短歌れる

アセンブラ短歌 on Web とは?

Page 31: Assembly Tanka on Web - Aiko Kenji

どうやってブラウザ上で アセンブラ短歌を実現するのか…

任意のマシン語が実行できる環境をどうやって用意するのか…

Page 32: Assembly Tanka on Web - Aiko Kenji

実現方法

1. エミュレーション方式

–各種CPUをエミュレーション

–例:JavaScriptでx86/ARM/PPCなどを作る

2. サンドボックス方式

–隔離された環境(SandBox)で実行

–例:VM環境内で実行→結果をブラウザへ

Page 33: Assembly Tanka on Web - Aiko Kenji

実現方法

1. エミュレーション方式

–各種CPUをエミュレーション

–例:JavaScriptでx86/ARM/PPCなどを作る

2. サンドボックス方式

–隔離された環境(SandBox)で実行

–例:VM環境内で実行→結果をブラウザへ

Page 34: Assembly Tanka on Web - Aiko Kenji

CPU Emulation on JavaScript

jslinux http://bellard.org/jslinux/ Virtual x86 http://copy.sh/v24/

Page 35: Assembly Tanka on Web - Aiko Kenji

Assembly Tanka on JavaScript

cpux86.js

xor eax,eax = 31 C0 …

eax = 0x00

Page 36: Assembly Tanka on Web - Aiko Kenji

Assembly Tanka on JavaScript

cpux86.js

← PUSH!

※ I/Oは決めておく必要あり

■Demo Assembly Tanka on JavaScript http://07c00.com/asmtanka_on_js/

xor eax,eax = 31 C0 …

eax = 0x00

Page 37: Assembly Tanka on Web - Aiko Kenji

Demo http://07c00.com/asmtanka_on_js/

Page 38: Assembly Tanka on Web - Aiko Kenji

実現方法

1. エミュレーション方式

–各種CPUをエミュレーション

–例:JavaScriptでx86/ARM/PPCなどを作る

2. サンドボックス方式

–隔離された環境(SandBox)で実行

–例:VM環境内で実行→結果をブラウザへ

Page 39: Assembly Tanka on Web - Aiko Kenji

SandBox for analyzing malwares

https://www.virtualbox.org/wiki/Screenshots

VirtualBox https://www.virtualbox.org/ VMWare http://www.vmware.com/jp

Page 40: Assembly Tanka on Web - Aiko Kenji

でも たった31バイトを実行するために

VM立ち上げるとかさすがに厳しい

Page 41: Assembly Tanka on Web - Aiko Kenji

そこで「デバッガ⇔デバッギ」 の関係になる2つのプロセスを

立ち上げ 実行コードをデバッギに渡し

結果をデバッガが受け取る仕組みを 作る

Page 42: Assembly Tanka on Web - Aiko Kenji

Assembly Tanka on Server-side

tanka.cgi

New process

Debugging

Return the result

6a 00 58 50 40 68 79 61 6d 61 50 40 6a 08 5a 5b 40 68 57 61 6b 61 54 40 59 cd 80 58 58 58 c3

Execute

• Debugging API

– DebugActiveProcess (Win系)

– ptrace(UNIX系)

Page 43: Assembly Tanka on Web - Aiko Kenji

Assembly Tanka on Server-side

tanka.cgi

New process

6a 00 58 50 40 68 79 61 6d 61 50 40 6a 08 5a 5b 40 68 57 61 6b 61 54 40 59 cd 80 58 58 58 c3

push 0x00 = 6a 00

ステップ実行毎に

デバッガが命令を検査

STEP

Page 44: Assembly Tanka on Web - Aiko Kenji

Assembly Tanka on Server-side

tanka.cgi

New process

6a 00 58 50 40 68 79 61 6d 61 50 40 6a 08 5a 5b 40 68 57 61 6b 61 54 40 59 cd 80 58 58 58 c3

pop eax = 58

ステップ実行毎に

デバッガが命令を検査

STEP

Page 45: Assembly Tanka on Web - Aiko Kenji

Assembly Tanka on Server-side

tanka.cgi

New process

6a 00 58 50 40 68 79 61 6d 61 50 40 6a 08 5a 5b 40 68 57 61 6b 61 54 40 59 cd 80 58 58 58 c3

push eax = 50

ステップ実行毎に

デバッガが命令を検査

STEP

Page 46: Assembly Tanka on Web - Aiko Kenji

Assembly Tanka on Server-side

tanka.cgi

New process

6a 00 58 50 40 68 79 61 6d 61 50 40 6a 08 5a 5b 40 68 57 61 6b 61 54 40 59 cd 80 58 58 58 c3

inc eax = 40

ステップ実行毎に

デバッガが命令を検査

STEP

Page 47: Assembly Tanka on Web - Aiko Kenji

ステップ実行毎に

デバッガが命令を検査

sys-callが呼ばれたら

引数を確認し

OKなら実行を許す

ダメならそこでストップ

→sys-callさえ監視しておけばok

Assembly Tanka on Server-side

tanka.cgi

New process

6a 00 58 50 40 68 79 61 6d 61 50 40 6a 08 5a 5b 40 68 57 61 6b 61 54 40 59 cd 80 58 58 58 c3

int 0x80 = cd 80

STEP

Page 48: Assembly Tanka on Web - Aiko Kenji

Demo http://x86.seccon.jp/99.html

Page 49: Assembly Tanka on Web - Aiko Kenji

いやっほーう、これで出来たぜ!

Page 50: Assembly Tanka on Web - Aiko Kenji

と思ったら…

Page 51: Assembly Tanka on Web - Aiko Kenji

致命的な脆弱性が…

Page 52: Assembly Tanka on Web - Aiko Kenji

じつはcd 80 (int 0x80)にプリフィックスがつけられる衝撃の事実

Page 53: Assembly Tanka on Web - Aiko Kenji
Page 54: Assembly Tanka on Web - Aiko Kenji

ぼくが書いたSandBoxコード

if(code[0] == 0xcd && code[1] == 0x80){

exit(1);

}

execute(code);

systemcallは呼び出させないぞ(キリ

Page 55: Assembly Tanka on Web - Aiko Kenji

ぼくが書いたSandBoxコード

code = {0x2e, 0xcd, 0x80};

if(code[0] == 0xcd && code[1] == 0x80){

exit(1);

}

execute(code);

プリフィックスつけてみたw

Page 56: Assembly Tanka on Web - Aiko Kenji

オワタw

Page 57: Assembly Tanka on Web - Aiko Kenji

アセンブラマジ難しい…orz

Page 58: Assembly Tanka on Web - Aiko Kenji

アセンブラ短歌の楽しみかた

• いろんなCPUでやってみる

• いろんなOS(環境)でやってみる

• 何文字printできるかに挑戦してみる

• 味わい深さを追求してみる

• 短歌を簡単に作れる環境を作ってみる

• 短歌を自動生成できないか考えてみる

Page 59: Assembly Tanka on Web - Aiko Kenji

好きな楽しみかたをすれば いいと思います

でも一回は短歌やってみてほしいです

ぜったい楽しいので

Page 60: Assembly Tanka on Web - Aiko Kenji

最後に その他の on JS を紹介

Page 61: Assembly Tanka on Web - Aiko Kenji

バイナリかるた on JS

Demo

Page 62: Assembly Tanka on Web - Aiko Kenji

アセンブラテトリス on JS

Demo

Page 63: Assembly Tanka on Web - Aiko Kenji

バイナリを楽しもう!

Page 64: Assembly Tanka on Web - Aiko Kenji

Thank you!

絶賛発売中!

https://book.mynavi.jp/ec/products/detail/id=24267