Assembly Tanka on Web - Aiko Kenji
-
Upload
asmtanka -
Category
Technology
-
view
371 -
download
1
description
Transcript of Assembly Tanka on Web - Aiko Kenji
突然ですが…
2
みなさん! 機械語、好きですか?
3
ぼくは大好きです!
4
ぶっちゃけ、 今日は機械語の話しかしません!
5
機械語に興味が無い人は… 遠慮なく寝ててください!
6
ところで
7
最近思うんです…
8
機械語に足りないのは… すばりカジュアル性じゃないのかと
9
もしかして、機械語は難しいと 思われてるのかもしれない
10
だれもがカジュアルに 機械語を楽しめるようにしたい
11
そこで…
12
カジュアル機械語プログラミング 『アセンブラ短歌』
13
「アセンブラ短歌」とは
五・七・五・七・七バイトから成る機械語コードでプログラムを書いてみるという近未来の文化的趣味であり,近年, 国内のハッカー間で密かなブー
ムが起きている.
考案者:坂井弘亮 http://kozos.jp/asm-tanka/
14
(ごく一部の)バイナリアンの反応
イヤッッホォォオオォオウ!
その他の反応
何これキモい・・・・・・・?
驚異の格差社会!(温度差)
そもそもアセンブラが あんまり一般的じゃない
にも関わらず…
公式Webページをみてみると…
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/からの引用)
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/からの引用)
しかも、いまどきフレームサイトww
でも、
アセンブラ短歌の楽しみかたは 他にもたくさんあります!
というわけで…
「アセンブラ短歌 on Web」 とは ブラウザ上からアセンブラ短歌をカジュアルに試せる環境, スマホからもアクセスでき, 通勤電車やちょっとした待ち時間にも気軽に短歌れる
アセンブラ短歌 on Web とは?
どうやってブラウザ上で アセンブラ短歌を実現するのか…
任意のマシン語が実行できる環境をどうやって用意するのか…
実現方法
1. エミュレーション方式
–各種CPUをエミュレーション
–例:JavaScriptでx86/ARM/PPCなどを作る
2. サンドボックス方式
–隔離された環境(SandBox)で実行
–例:VM環境内で実行→結果をブラウザへ
実現方法
1. エミュレーション方式
–各種CPUをエミュレーション
–例:JavaScriptでx86/ARM/PPCなどを作る
2. サンドボックス方式
–隔離された環境(SandBox)で実行
–例:VM環境内で実行→結果をブラウザへ
CPU Emulation on JavaScript
jslinux http://bellard.org/jslinux/ Virtual x86 http://copy.sh/v24/
Assembly Tanka on JavaScript
cpux86.js
xor eax,eax = 31 C0 …
eax = 0x00
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
Demo http://07c00.com/asmtanka_on_js/
実現方法
1. エミュレーション方式
–各種CPUをエミュレーション
–例:JavaScriptでx86/ARM/PPCなどを作る
2. サンドボックス方式
–隔離された環境(SandBox)で実行
–例:VM環境内で実行→結果をブラウザへ
SandBox for analyzing malwares
https://www.virtualbox.org/wiki/Screenshots
VirtualBox https://www.virtualbox.org/ VMWare http://www.vmware.com/jp
でも たった31バイトを実行するために
VM立ち上げるとかさすがに厳しい
そこで「デバッガ⇔デバッギ」 の関係になる2つのプロセスを
立ち上げ 実行コードをデバッギに渡し
結果をデバッガが受け取る仕組みを 作る
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系)
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
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
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
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
ステップ実行毎に
デバッガが命令を検査
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
Demo http://x86.seccon.jp/99.html
いやっほーう、これで出来たぜ!
と思ったら…
致命的な脆弱性が…
じつはcd 80 (int 0x80)にプリフィックスがつけられる衝撃の事実
ぼくが書いたSandBoxコード
if(code[0] == 0xcd && code[1] == 0x80){
exit(1);
}
execute(code);
systemcallは呼び出させないぞ(キリ
ぼくが書いたSandBoxコード
code = {0x2e, 0xcd, 0x80};
if(code[0] == 0xcd && code[1] == 0x80){
exit(1);
}
execute(code);
プリフィックスつけてみたw
オワタw
アセンブラマジ難しい…orz
アセンブラ短歌の楽しみかた
• いろんなCPUでやってみる
• いろんなOS(環境)でやってみる
• 何文字printできるかに挑戦してみる
• 味わい深さを追求してみる
• 短歌を簡単に作れる環境を作ってみる
• 短歌を自動生成できないか考えてみる
好きな楽しみかたをすれば いいと思います
でも一回は短歌やってみてほしいです
ぜったい楽しいので
最後に その他の on JS を紹介
バイナリかるた on JS
Demo
アセンブラテトリス on JS
Demo
バイナリを楽しもう!
Thank you!
絶賛発売中!
https://book.mynavi.jp/ec/products/detail/id=24267