SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
「アセンブラ短歌 on Web」を
作ってみよう
Let’s make
“Assembly Tanka on Web”
Kenji Aiko
@07c00
kenjiaiko@gmail.com
「アセンブラ短歌 on Web」 とは
ブラウザ上からアセンブラ短歌を
カジュアルに試せる環境, スマホ
からもアクセスでき, 通勤電車や
ちょっとした待ち時間にも気軽に
短歌れる
アセンブラ短歌 on Web とは?
What’s Assembly Tanka on Web
「アセンブラ短歌 on Web」 とは
ブラウザ上からアセンブラ短歌を
カジュアルに試せる環境, スマホ
からもアクセスでき, 通勤電車や
ちょっとした待ち時間にも気軽に
短歌れる
アセンブラ短歌 on Web とは?
What’s Assembly Tanka on Web
どうやってブラウザ上で
アセンブラ短歌を実現するのか…
how to run binary codes on browser
任意のマシン語が実行できる環境をどう
やって用意するのか…
How to build the environment for running
any machine codes
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
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
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,eax = 31 C0
…
eax = 0x00
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)
– Ex:Exec on VM -> send browser the result
SandBox for analyzing malwares
https://www.virtualbox.org/wiki/Screenshots
VirtualBox
https://www.virtualbox.org/
VMWare
http://www.vmware.com/jp
でも
たった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,
実行コードをデバッギに渡し
結果をデバッガが受け取る仕組みにする
The debugger give debuggee some codes,
and reply to debugger the result of
executing it on debuggee
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
Every step,
Dbger check the code
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
Every step,
Dbger check the code
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
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
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
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 thought you can NOT exec sys-calls
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
オワタ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 charactors(多文字を出力)
• Try for a “Tasty”(味わい深さを目指す)
• The environment to be easy learning Assembly
(アセンブラを簡単に学べる環境を作る)
• Automation of making Tanka(短歌の自動生成)
好きな楽しみかたをすれば
いいと思います
you should enjoy what you want to do
でも一回は短歌やってみてほしいです
ぜったい楽しいので
But I recommend you to try Assembly Tanka once
最後に
その他の 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/

Más contenido relacionado

La actualidad más candente

Transports on XMPP network
Transports on XMPP networkTransports on XMPP network
Transports on XMPP network
Hideki Saito
 
20150603卒研進捗LT (share)
20150603卒研進捗LT (share)20150603卒研進捗LT (share)
20150603卒研進捗LT (share)
mohemohe
 
Vim = VM
Vim = VMVim = VM
Vim = VM
Shougo
 

La actualidad más candente (20)

Web based 3D video streaming system “Depstreamer(仮)”
Web based 3D video streaming system “Depstreamer(仮)”Web based 3D video streaming system “Depstreamer(仮)”
Web based 3D video streaming system “Depstreamer(仮)”
 
ssmjp-wireless-hack-with-macbook
ssmjp-wireless-hack-with-macbookssmjp-wireless-hack-with-macbook
ssmjp-wireless-hack-with-macbook
 
ノンコーディング防犯
ノンコーディング防犯ノンコーディング防犯
ノンコーディング防犯
 
秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて
 
ウェブベース3D動画ライブストリーミングシステム”Depstreamer XR(仮)"
ウェブベース3D動画ライブストリーミングシステム”Depstreamer XR(仮)"ウェブベース3D動画ライブストリーミングシステム”Depstreamer XR(仮)"
ウェブベース3D動画ライブストリーミングシステム”Depstreamer XR(仮)"
 
Mon, Muninによる楽々監視生活
Mon, Muninによる楽々監視生活Mon, Muninによる楽々監視生活
Mon, Muninによる楽々監視生活
 
「とても小さいVim」vim tiny
「とても小さいVim」vim tiny「とても小さいVim」vim tiny
「とても小さいVim」vim tiny
 
Transports on XMPP network
Transports on XMPP networkTransports on XMPP network
Transports on XMPP network
 
WebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみたWebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみた
 
Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzz
 
Real world rails
Real world railsReal world rails
Real world rails
 
MeshtreamerXR(改題)
MeshtreamerXR(改題)MeshtreamerXR(改題)
MeshtreamerXR(改題)
 
20150603卒研進捗LT (share)
20150603卒研進捗LT (share)20150603卒研進捗LT (share)
20150603卒研進捗LT (share)
 
ローカル開発環境の構築をしよう VirtualBox + Vagrant
ローカル開発環境の構築をしよう VirtualBox + Vagrantローカル開発環境の構築をしよう VirtualBox + Vagrant
ローカル開発環境の構築をしよう VirtualBox + Vagrant
 
BuddyPressの導入からカスタマイズまでの日記5
BuddyPressの導入からカスタマイズまでの日記5BuddyPressの導入からカスタマイズまでの日記5
BuddyPressの導入からカスタマイズまでの日記5
 
RGで生き抜くためのレンタルサーバー講座ヽ(•̀ω•́ )ゝ✧
RGで生き抜くためのレンタルサーバー講座ヽ(•̀ω•́ )ゝ✧ RGで生き抜くためのレンタルサーバー講座ヽ(•̀ω•́ )ゝ✧
RGで生き抜くためのレンタルサーバー講座ヽ(•̀ω•́ )ゝ✧
 
Symfony2 workshop-2
Symfony2 workshop-2Symfony2 workshop-2
Symfony2 workshop-2
 
Vimはこわくない
VimはこわくないVimはこわくない
Vimはこわくない
 
Vim = VM
Vim = VMVim = VM
Vim = VM
 
FlexUnit4とMockitoFlex
FlexUnit4とMockitoFlexFlexUnit4とMockitoFlex
FlexUnit4とMockitoFlex
 

Similar a Assembly Tanka on Web - Aiko Kenji

Web Audio APIでシンセサイザーの作成
Web Audio APIでシンセサイザーの作成Web Audio APIでシンセサイザーの作成
Web Audio APIでシンセサイザーの作成
aike
 
Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)
Kenichiro MATOHARA
 
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティングCMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
Computational Materials Science Initiative
 

Similar a Assembly Tanka on Web - Aiko Kenji (20)

サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
 
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているJJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
 
初めてのCPUを作ってみた
初めてのCPUを作ってみた初めてのCPUを作ってみた
初めてのCPUを作ってみた
 
20210515 cae linux_install_vb
20210515 cae linux_install_vb20210515 cae linux_install_vb
20210515 cae linux_install_vb
 
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
 
Ajhcコンパイラの押売りに来ました
Ajhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ました
Ajhcコンパイラの押売りに来ました
 
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
 
Web Audio APIでシンセサイザーの作成
Web Audio APIでシンセサイザーの作成Web Audio APIでシンセサイザーの作成
Web Audio APIでシンセサイザーの作成
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspec
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)Linux でavr開発環境を構築する+mbed(20100612koedo94)
Linux でavr開発環境を構築する+mbed(20100612koedo94)
 
OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門
 
Practical Web Audio API Programming
Practical Web Audio API ProgrammingPractical Web Audio API Programming
Practical Web Audio API Programming
 
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティングCMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)
 
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
 
Idcfクラウドで始める構築自動化
Idcfクラウドで始める構築自動化Idcfクラウドで始める構築自動化
Idcfクラウドで始める構築自動化
 

Último

Último (12)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

Assembly Tanka on Web - Aiko Kenji