Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
「アセンブラ短歌 on Web」を
作ってみよう
Let’s make
“Assembly Tanka on Web”
Kenji Aiko
@07c00
kenjiaiko@gmail.com
「アセンブラ短歌 on Web」 とは
ブラウザ上からアセンブラ短歌を
カジュアルに試せる環境, スマホ
からもアクセスでき, 通勤電車や
ちょっとした待ち時間にも気軽に
短歌れる
アセンブラ短歌 on Web とは?
What’s Assem...
「アセンブラ短歌 on Web」 とは
ブラウザ上からアセンブラ短歌を
カジュアルに試せる環境, スマホ
からもアクセスでき, 通勤電車や
ちょっとした待ち時間にも気軽に
短歌れる
アセンブラ短歌 on Web とは?
What’s Assem...
どうやってブラウザ上で
アセンブラ短歌を実現するのか…
how to run binary codes on browser
任意のマシン語が実行できる環境をどう
やって用意するのか…
How to build the environment ...
implementation
1. Emulation
– Emulate some CPUs
– Ex:x86/ARM/ppc emulation on JavaScript
2. Sandbox
– Exec in jail (VM)
– ...
implementation
1. Emulation
– Emulate some CPUs
– Ex:x86/ARM/ppc emulation on JavaScript
2. Sandbox
– Exec in jail (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!
■Demo
Assembly Tanka on JavaScript
http://07c00.com/asmtanka_on_js/
xor eax...
Demo
http://07c00.com/asmtanka_on_js/
implementation
1. Emulation
– Emulate some CPUs
– Ex:x86/ARM/ppc emulation on JavaScript
2. Sandbox
– Exec in jail (VM)
– ...
SandBox for analyzing malwares
https://www.virtualbox.org/wiki/Screenshots
VirtualBox
https://www.virtualbox.org/
VMWare
h...
でも
たった31バイトを実行するために
VM立ち上げるとかさすがに厳しい
But
It is unrealistic to run a VM for only
31bytes
そこで「デバッガ⇔デバッギ」
の関係になる2つのプロセスを
立ち上げ
So, run 2 processes which are debugger
and debuggee at firstly,
実行コードをデバッギに渡し
結果をデバッガが受...
Assembly Tanka on Server-side
tanka.cgi
New process
Debugging
Return the result
①
②
③
④
⑤
6a 00 58 50 40
68 79 61 6d 61 50...
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 4...
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 4...
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 4...
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 4...
Every step,
Dbger check the code
And, monitoring sys-call,
if code is “cd 80”,
stop the process
Assembly Tanka on Server-s...
Demo
http://x86.seccon.jp/99.html
いやっほーう、これで出来たぜ!
Yaha-, It’s okey completely!
と思ったら…
However…
致命的な脆弱性が…
Critical vulnerabilities…
じつはcd 80 (int 0x80)にプリフィッ
クスがつけられる衝撃の事実
Actually, you exec “cd 80” with a
prefix
SandBox codes what I write
if(code[0] == 0xcd && code[1] == 0x80){
exit(1);
}
execute(code);
systemcallは呼び出させないぞ(キリ
I thou...
code = {0x2e, 0xcd, 0x80};
if(code[0] == 0xcd && code[1] == 0x80){
exit(1);
}
execute(code);
プリフィックスつけてみたw
However, can ex...
オワタw
orz…
アセンブラマジ難しい…orz
Really difficult to write secure codes
アセンブラ短歌の楽しみかた
How to enjoy it
• Trying on several CPU(いろんなCPUで試す)
• Trying on several OS (いろんな環境で試す)
• Try to put how many...
好きな楽しみかたをすれば
いいと思います
you should enjoy what you want to do
でも一回は短歌やってみてほしいです
ぜったい楽しいので
But I recommend you to try Assembly ...
最後に
その他の on JS を紹介
Lastly,
I introduce other “on JS”
バイナリかるた on JS
Binary Karuta on JS
Demo
アセンブラテトリス on JS
Assembly Tetris on JS
Demo
http://07c00.com/asmtetris_on_js/
バイナリを楽しもう!
Enjoy a binary!
Thank you!
Now on sale!
http://www.amazon.co.jp/dp/B00ICKLC2U/
Assembly Tanka on Web - Aiko Kenji
Upcoming SlideShare
Loading in …5
×

Assembly Tanka on Web - Aiko Kenji

1,563 views

Published on

http://ja.avtokyo.org/MediaArchives

Published in: Technology, Spiritual
  • Be the first to comment

  • Be the first to like this

Assembly Tanka on Web - Aiko Kenji

  1. 1. 「アセンブラ短歌 on Web」を 作ってみよう Let’s make “Assembly Tanka on Web” Kenji Aiko @07c00 kenjiaiko@gmail.com
  2. 2. 「アセンブラ短歌 on Web」 とは ブラウザ上からアセンブラ短歌を カジュアルに試せる環境, スマホ からもアクセスでき, 通勤電車や ちょっとした待ち時間にも気軽に 短歌れる アセンブラ短歌 on Web とは? What’s Assembly Tanka on Web
  3. 3. 「アセンブラ短歌 on Web」 とは ブラウザ上からアセンブラ短歌を カジュアルに試せる環境, スマホ からもアクセスでき, 通勤電車や ちょっとした待ち時間にも気軽に 短歌れる アセンブラ短歌 on Web とは? What’s Assembly Tanka on Web
  4. 4. どうやってブラウザ上で アセンブラ短歌を実現するのか… how to run binary codes on browser 任意のマシン語が実行できる環境をどう やって用意するのか… How to build the environment for running any machine codes
  5. 5. implementation 1. Emulation – Emulate some CPUs – Ex:x86/ARM/ppc emulation on JavaScript 2. Sandbox – Exec in jail (VM) – Ex:Exec on VM -> send browser the result
  6. 6. implementation 1. Emulation – Emulate some CPUs – Ex:x86/ARM/ppc emulation on JavaScript 2. Sandbox – Exec in jail (VM) – Ex:Exec on VM -> send browser the result
  7. 7. CPU Emulation on JavaScript jslinux http://bellard.org/jslinux/ Virtual x86 http://copy.sh/v24/
  8. 8. Assembly Tanka on JavaScript cpux86.js xor eax,eax = 31 C0 … eax = 0x00
  9. 9. Assembly Tanka on JavaScript cpux86.js ← PUSH! ■Demo Assembly Tanka on JavaScript http://07c00.com/asmtanka_on_js/ xor eax,eax = 31 C0 … eax = 0x00
  10. 10. Demo http://07c00.com/asmtanka_on_js/
  11. 11. implementation 1. Emulation – Emulate some CPUs – Ex:x86/ARM/ppc emulation on JavaScript 2. Sandbox – Exec in jail (VM) – Ex:Exec on VM -> send browser the result
  12. 12. SandBox for analyzing malwares https://www.virtualbox.org/wiki/Screenshots VirtualBox https://www.virtualbox.org/ VMWare http://www.vmware.com/jp
  13. 13. でも たった31バイトを実行するために VM立ち上げるとかさすがに厳しい But It is unrealistic to run a VM for only 31bytes
  14. 14. そこで「デバッガ⇔デバッギ」 の関係になる2つのプロセスを 立ち上げ So, run 2 processes which are debugger and debuggee at firstly, 実行コードをデバッギに渡し 結果をデバッガが受け取る仕組みにする The debugger give debuggee some codes, and reply to debugger the result of executing it on debuggee
  15. 15. 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系)
  16. 16. 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 Every step, Dbger check the code STEP
  17. 17. 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 Every step, Dbger check the code
  18. 18. 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 Every step, Dbger check the code
  19. 19. 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 Every step, Dbger check the code
  20. 20. Every step, Dbger check the code And, monitoring sys-call, if code is “cd 80”, stop the process 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
  21. 21. Demo http://x86.seccon.jp/99.html
  22. 22. いやっほーう、これで出来たぜ! Yaha-, It’s okey completely!
  23. 23. と思ったら… However…
  24. 24. 致命的な脆弱性が… Critical vulnerabilities…
  25. 25. じつはcd 80 (int 0x80)にプリフィッ クスがつけられる衝撃の事実 Actually, you exec “cd 80” with a prefix
  26. 26. SandBox codes what I write if(code[0] == 0xcd && code[1] == 0x80){ exit(1); } execute(code); systemcallは呼び出させないぞ(キリ I thought you can NOT exec sys-calls
  27. 27. code = {0x2e, 0xcd, 0x80}; if(code[0] == 0xcd && code[1] == 0x80){ exit(1); } execute(code); プリフィックスつけてみたw However, can executing “cd 80” with some prefix (ex:0x2e) SandBox codes what I write
  28. 28. オワタw orz…
  29. 29. アセンブラマジ難しい…orz Really difficult to write secure codes
  30. 30. アセンブラ短歌の楽しみかた How to enjoy it • Trying on several CPU(いろんなCPUで試す) • Trying on several OS (いろんな環境で試す) • Try to put how many charactors(多文字を出力) • Try for a “Tasty”(味わい深さを目指す) • The environment to be easy learning Assembly (アセンブラを簡単に学べる環境を作る) • Automation of making Tanka(短歌の自動生成)
  31. 31. 好きな楽しみかたをすれば いいと思います you should enjoy what you want to do でも一回は短歌やってみてほしいです ぜったい楽しいので But I recommend you to try Assembly Tanka once
  32. 32. 最後に その他の on JS を紹介 Lastly, I introduce other “on JS”
  33. 33. バイナリかるた on JS Binary Karuta on JS Demo
  34. 34. アセンブラテトリス on JS Assembly Tetris on JS Demo http://07c00.com/asmtetris_on_js/
  35. 35. バイナリを楽しもう! Enjoy a binary!
  36. 36. Thank you! Now on sale! http://www.amazon.co.jp/dp/B00ICKLC2U/

×