SlideShare a Scribd company logo
1 of 46
Download to read offline
バイナリ駄洒落
コンテスト
坂井弘亮
(KOZOSプロジェクト)
TwitterID:kozossakai
バイナリ駄洒落
バイナリ駄洒落
とは何か
バイナリ駄洒落 公式ホームページ
(http://kozos.jp/binary-dajare/)
バイナリ駄洒落とは
(公式ホームページより)
「バイナリ駄洒落」はバイナリデータの読
みに対して非常に似た音の言葉をかける
近未来の言葉遊びであり,近年,国内で
はハッカーの密かなたしなみとして, 挨
拶がわりに交換されています.
こんな感じです
5C 24 14 8B 44 24 10 52 51 53 50 8B 44 24 10 F8
CD 80 73 07 83 F8 00 7E 02 F7 D8 5B 5B 5B 5B 5B
5B 59 5A C3 83 EC 18 FF 74 24 1C E8 A0 FF FF FF
タイトルは
「Cでやれ!」
説明します
タイトル「Cでやれ!」
5C 24 14 8B 44 24 10 52 51 53 50 8B 44 24 10 F8
CD 80 73 07 83 F8 00 7E 02 F7 D8 5B 5B 5B 5B 5B
5B 59 5A C3 83 EC 18 FF 74 24 1C E8 A0 FF FF FF
タイトル「Cでやれ!」
5C 24 14 8B 44 24 10 52 51 53 50 8B 44 24 10 F8
CD 80 73 07 83 F8 00 7E 02 F7 D8 5B 5B 5B 5B 5B
5B 59 5A C3 83 EC 18 FF 74 24 1C E8 A0 FF FF FF
これはx86の機械語コードです
タイトル「Cでやれ!」
5C 24 14 8B 44 24 10 52 51 53 50 8B 44 24 10 F8
+-----+
|CD 80|73 07 83 F8 00 7E 02 F7 D8 5B 5B 5B 5B 5B
+-----+
5B 59 5A C3 83 EC 18 FF 74 24 1C E8 A0 FF FF FF
ここが「Cでやれ!」
タイトル「Cでやれ!」
5C 24 14 8B 44 24 10 52 51 53 50 8B 44 24 10 F8
+-----+
|CD 80|73 07 83 F8 00 7E 02 F7 D8 5B 5B 5B 5B 5B
Cでやれ
5B 59 5A C3 83 EC 18 FF 74 24 1C E8 A0 FF FF FF
ここが「Cでやれ!」
CD 80
Cで やれ
この駄洒落の
解説をします
タイトル「Cでやれ!」
5C 24 14 8B 44 24 10 52 51 53 50 8B 44 24 10 F8
+-----+
|CD 80|73 07 83 F8 00 7E 02 F7 D8 5B 5B 5B 5B 5B
+-----+
5B 59 5A C3 83 EC 18 FF 74 24 1C E8 A0 FF FF FF
上はx86の実行ファイルの機械語コードの,システムコール呼び
出し部分のダンプ である.
システムコール呼び出しが int 0x80 で行われており,
「CD 80」となっている.
これは,機械語コードのダンプなど見ずに「Cでやれ」と言ってい
る.
そのような例を
公式ホームページで
公開したら
想定外の感想が
「例が高尚すぎて
ついていけません」
これではまずい
と思い
駄洒落の面白みの
解説を追加しました
バイナリ駄洒落 公式ホームページ
バイナリ駄洒落 公式ホームページ
この駄洒落の面白い点の解説を追加
この駄洒落の面白い点の解説
Linux/x86のシステムコール
呼び出し手順(ABI)を知るために
せっかく機械語コードの
ダンプを見ているのに,
そのCPUに「C(言語)でやれ」と
逆にツッコミを受けてしまっている
点が,この駄洒落の面白いところです
次の駄洒落
x86のNOP命令(0x90)による
駄洒落
タイトル「命令をくれ!」
31 ED 55 89 E5 83 E4 F0 8D 45 08 83 EC 04 50 FF
75 04 52 E8 08 00 00 00 CC 90 90 90 90 90 90 90
55 89 E5 57 56 53 83 EC 0C 8B 75 0C 8B 5D 10 85
タイトル「命令をくれ!」
31 ED 55 89 E5 83 E4 F0 8D 45 08 83 EC 04 50 FF
+---------------------+
75 04 52 E8 08 00 00 00 CC|90 90 90 90 90 90 90|
+---------------------+
55 89 E5 57 56 53 83 EC 0C 8B 75 0C 8B 5D 10 85
ここが「命令をくれくれくれ...」
タイトル「命令をくれ!」
31 ED 55 89 E5 83 E4 F0 8D 45 08 83 EC 04 50 FF
+---------------------+
75 04 52 E8 08 00 00 00 CC|90 90 90 90 90 90 90|
クレクレクレクレクレ...
55 89 E5 57 56 53 83 EC 0C 8B 75 0C 8B 5D 10 85
ここが「命令をくれくれくれ...」
90 90 90 90 90
クレ クレ クレ クレ クレ
この駄洒落の
解説をします
タイトル「命令をくれ!」
31 ED 55 89 E5 83 E4 F0 8D 45 08 83 EC 04 50 FF
+---------------------+
75 04 52 E8 08 00 00 00 CC|90 90 90 90 90 90 90|
+---------------------+
55 89 E5 57 56 53 83 EC 0C 8B 75 0C 8B 5D 10 85
上はx86の実行ファイルの機械語コード部分のダンプである.
関数の末尾(CC以降)が,NOP(90)で埋められており,90 90
90 90 90 90 90 という 部分が見られる.
これは命令が無いために,CPUが命令を「くれ,くれ,くれ,...」
と言っている.
さらに
関数の先頭に
注目
タイトル「命令をくれ!」
31 ED 55 89 E5 83 E4 F0 8D 45 08 83 EC 04 50 FF
+---------------------+
75 04 52 E8 08 00 00 00 CC|90 90 90 90 90 90 90|
+---------------------+
55 89 E5 57 56 53 83 EC 0C 8B 75 0C 8B 5D 10 85
「命令をくれくれくれ...」の後は
タイトル「命令をくれ!」
31 ED 55 89 E5 83 E4 F0 8D 45 08 83 EC 04 50 FF
75 04 52 E8 08 00 00 00 CC 90 90 90 90 90 90 90
+-----+
|55 89|E5 57 56 53 83 EC 0C 8B 75 0C 8B 5D 10 85
+-----+
タイトル「命令をくれ!」
31 ED 55 89 E5 83 E4 F0 8D 45 08 83 EC 04 50 FF
75 04 52 E8 08 00 00 00 CC 90 90 90 90 90 90 90
+-----+
|55 89|E5 57 56 53 83 EC 0C 8B 75 0C 8B 5D 10 85
+-----+
「ゴー!ゴー!ハック!」
タイトル「命令をくれ!」
31 ED 55 89 E5 83 E4 F0 8D 45 08 83 EC 04 50 FF
75 04 52 E8 08 00 00 00 CC 90 90 90 90 90 90 90
+-----+
|55 89|E5 57 56 53 83 EC 0C 8B 75 0C 8B 5D 10 85
ゴーゴーハック
CPUが命令を「くれ,くれ,くれ,...」と言った後は,
関数の先頭に push %ebp と mov %esp, %ebp の前半の
「55 89」があり, 「ゴー!ゴー!ハック!」と言って関数が開始さ
れている.
この駄洒落の
面白い点を
解説します
関数末尾のキャッシュアラインのための
パディングのNOPでCPUがやることが無くて
「命令をくれくれくれ...」と言っており,
さらにようやく関数先頭で命令を得て,
「ゴー!ゴー!ハック!」と嬉しそうに実行を
開始している点が,CPUの挙動と感情を
うまく掛け合わせて表現しており,
そこがこの駄洒落の面白いところです
ここからは
真面目な話です
バイナリ駄洒落
実施における
背景と目的
(Contest of Contest
応募時に提出した内容)
バイナリ駄洒落の背景と目的
バイナリを目視する技術は従来よりセキュリティ方面で重要視されており,目grep, バイナリ
かるたといった分野がすでに確立している.
そうした目視技術ではバイナリの固定的な列,例えばx86機械語コードのNOPを表す 「90」
やIPアドレスの「192.168.1.1」を表す「C0 A8 01 01」などを覚えていることが 非常に効果
的である.
一方,国内では従来より歴史の学習に「語呂合わせ」というものがあり, 例として1192年の
鎌倉幕府開府を「いいくに(1192)つくろう鎌倉幕府」などとして 覚えることが教育分野でも
習慣的に行われており,とくにこの鎌倉幕府開府に関しては おそらくほとんどの国民が知っ
ていると言っても過言では無いほどの普及が感じられ, ひいてはほとんどの国民が鎌倉幕
府開府の年を覚えているということでもあり, 語呂合わせというものが記憶面で非常に有効
であると言える.
バイナリ駄洒落は上記バイナリの固定的な列を覚える際に,語呂合わせを利用すること で記
憶を効果的に行い,結果としてバイナリの目視技術を養うための有効な手段で あり,これを
コンテストとして実施することで,そうした語呂合わせを多数考案する ことを目的とする.
駄洒落は老若男女に親しまれ,とくに幼児にとっては手軽な楽しみとして人気がある. この
ためそうした「駄洒落」としてバイナリに親しむことは幼少期から可能であり, バイナリ目視に
抵抗感の無い,バイナリネイティブ世代を育成するための,国内の 未来に対しての布石であ
る.
そうした背景と目的の下で
行われた
第1回
SECCONバイナリ駄洒落
コンテスト
第1回 SECCONバイナリ駄洒落コンテスト
本日17:00より結果発表です!
どうもありがとう
ございました

More Related Content

Similar to バイナリ駄洒落コンテスト

初めてのCPUを作ってみた
初めてのCPUを作ってみた初めてのCPUを作ってみた
初めてのCPUを作ってみたEric Sartre
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成眞樹 冨澤
 
Ahn pacsec2017 key-recovery_attacks_against_commercial_white-box_cryptography...
Ahn pacsec2017 key-recovery_attacks_against_commercial_white-box_cryptography...Ahn pacsec2017 key-recovery_attacks_against_commercial_white-box_cryptography...
Ahn pacsec2017 key-recovery_attacks_against_commercial_white-box_cryptography...PacSecJP
 
ネイティブコードを語る
ネイティブコードを語るネイティブコードを語る
ネイティブコードを語るKenji Imasaki
 
フォントとカーネル Vmのあやしい関係
フォントとカーネル Vmのあやしい関係フォントとカーネル Vmのあやしい関係
フォントとカーネル Vmのあやしい関係明 高橋
 
アセンブラ漢文
アセンブラ漢文アセンブラ漢文
アセンブラ漢文kozossakai
 
Assembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko KenjiAssembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko Kenjiasmtanka
 
アセンブラ短歌(第2回APASEC+第2期サイボウズ・ラボユース合同勉強会)
アセンブラ短歌(第2回APASEC+第2期サイボウズ・ラボユース合同勉強会)アセンブラ短歌(第2回APASEC+第2期サイボウズ・ラボユース合同勉強会)
アセンブラ短歌(第2回APASEC+第2期サイボウズ・ラボユース合同勉強会)kozossakai
 
素晴らしきメガデモの世界
素晴らしきメガデモの世界素晴らしきメガデモの世界
素晴らしきメガデモの世界eagle0wl
 
Assembly Language Tanka - SAKAI Hiroaki
Assembly Language Tanka - SAKAI HiroakiAssembly Language Tanka - SAKAI Hiroaki
Assembly Language Tanka - SAKAI Hiroakiasmtanka
 

Similar to バイナリ駄洒落コンテスト (12)

初めてのCPUを作ってみた
初めてのCPUを作ってみた初めてのCPUを作ってみた
初めてのCPUを作ってみた
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成
 
Ahn pacsec2017 key-recovery_attacks_against_commercial_white-box_cryptography...
Ahn pacsec2017 key-recovery_attacks_against_commercial_white-box_cryptography...Ahn pacsec2017 key-recovery_attacks_against_commercial_white-box_cryptography...
Ahn pacsec2017 key-recovery_attacks_against_commercial_white-box_cryptography...
 
ネイティブコードを語る
ネイティブコードを語るネイティブコードを語る
ネイティブコードを語る
 
フォントとカーネル Vmのあやしい関係
フォントとカーネル Vmのあやしい関係フォントとカーネル Vmのあやしい関係
フォントとカーネル Vmのあやしい関係
 
俺とキーボード
俺とキーボード俺とキーボード
俺とキーボード
 
アセンブラ漢文
アセンブラ漢文アセンブラ漢文
アセンブラ漢文
 
Pakena #9
Pakena #9Pakena #9
Pakena #9
 
Assembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko KenjiAssembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko Kenji
 
アセンブラ短歌(第2回APASEC+第2期サイボウズ・ラボユース合同勉強会)
アセンブラ短歌(第2回APASEC+第2期サイボウズ・ラボユース合同勉強会)アセンブラ短歌(第2回APASEC+第2期サイボウズ・ラボユース合同勉強会)
アセンブラ短歌(第2回APASEC+第2期サイボウズ・ラボユース合同勉強会)
 
素晴らしきメガデモの世界
素晴らしきメガデモの世界素晴らしきメガデモの世界
素晴らしきメガデモの世界
 
Assembly Language Tanka - SAKAI Hiroaki
Assembly Language Tanka - SAKAI HiroakiAssembly Language Tanka - SAKAI Hiroaki
Assembly Language Tanka - SAKAI Hiroaki
 

More from kozossakai

spinsn - CPUの特殊命令の仕様推定と実装の競技
spinsn - CPUの特殊命令の仕様推定と実装の競技spinsn - CPUの特殊命令の仕様推定と実装の競技
spinsn - CPUの特殊命令の仕様推定と実装の競技kozossakai
 
Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性kozossakai
 
Possibility of arbitrary code execution by Step-Oriented Programming
Possibility of arbitrary code execution by Step-Oriented ProgrammingPossibility of arbitrary code execution by Step-Oriented Programming
Possibility of arbitrary code execution by Step-Oriented Programmingkozossakai
 
続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)
続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)
続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)kozossakai
 
ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)
ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)
ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)kozossakai
 
アセンブラ短歌 (AVTOKYO2013.5 日本語版)
アセンブラ短歌 (AVTOKYO2013.5 日本語版)アセンブラ短歌 (AVTOKYO2013.5 日本語版)
アセンブラ短歌 (AVTOKYO2013.5 日本語版)kozossakai
 
Assembly Language Tanka (AVTOKYO2013.5 English version)
Assembly Language Tanka (AVTOKYO2013.5 English version)Assembly Language Tanka (AVTOKYO2013.5 English version)
Assembly Language Tanka (AVTOKYO2013.5 English version)kozossakai
 
アセンブラ短歌(TechLION vol.15 ライトニングトーク)
アセンブラ短歌(TechLION vol.15 ライトニングトーク)アセンブラ短歌(TechLION vol.15 ライトニングトーク)
アセンブラ短歌(TechLION vol.15 ライトニングトーク)kozossakai
 
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)kozossakai
 
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)kozossakai
 
バイナリかるた(アーキテクチャかるた・完全版)
バイナリかるた(アーキテクチャかるた・完全版)バイナリかるた(アーキテクチャかるた・完全版)
バイナリかるた(アーキテクチャかるた・完全版)kozossakai
 
バイナリかるた(アーキテクチャかるた)
バイナリかるた(アーキテクチャかるた)バイナリかるた(アーキテクチャかるた)
バイナリかるた(アーキテクチャかるた)kozossakai
 
バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)kozossakai
 
アセンブラ短歌(オープンソースカンファレンス2013 Tokyo/Fall ライトニングトーク)
アセンブラ短歌(オープンソースカンファレンス2013 Tokyo/Fall ライトニングトーク)アセンブラ短歌(オープンソースカンファレンス2013 Tokyo/Fall ライトニングトーク)
アセンブラ短歌(オープンソースカンファレンス2013 Tokyo/Fall ライトニングトーク)kozossakai
 

More from kozossakai (14)

spinsn - CPUの特殊命令の仕様推定と実装の競技
spinsn - CPUの特殊命令の仕様推定と実装の競技spinsn - CPUの特殊命令の仕様推定と実装の競技
spinsn - CPUの特殊命令の仕様推定と実装の競技
 
Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性
 
Possibility of arbitrary code execution by Step-Oriented Programming
Possibility of arbitrary code execution by Step-Oriented ProgrammingPossibility of arbitrary code execution by Step-Oriented Programming
Possibility of arbitrary code execution by Step-Oriented Programming
 
続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)
続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)
続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)
 
ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)
ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)
ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)
 
アセンブラ短歌 (AVTOKYO2013.5 日本語版)
アセンブラ短歌 (AVTOKYO2013.5 日本語版)アセンブラ短歌 (AVTOKYO2013.5 日本語版)
アセンブラ短歌 (AVTOKYO2013.5 日本語版)
 
Assembly Language Tanka (AVTOKYO2013.5 English version)
Assembly Language Tanka (AVTOKYO2013.5 English version)Assembly Language Tanka (AVTOKYO2013.5 English version)
Assembly Language Tanka (AVTOKYO2013.5 English version)
 
アセンブラ短歌(TechLION vol.15 ライトニングトーク)
アセンブラ短歌(TechLION vol.15 ライトニングトーク)アセンブラ短歌(TechLION vol.15 ライトニングトーク)
アセンブラ短歌(TechLION vol.15 ライトニングトーク)
 
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
 
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
 
バイナリかるた(アーキテクチャかるた・完全版)
バイナリかるた(アーキテクチャかるた・完全版)バイナリかるた(アーキテクチャかるた・完全版)
バイナリかるた(アーキテクチャかるた・完全版)
 
バイナリかるた(アーキテクチャかるた)
バイナリかるた(アーキテクチャかるた)バイナリかるた(アーキテクチャかるた)
バイナリかるた(アーキテクチャかるた)
 
バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
バイナリで遊ぼう(オープンソースカンファレンス2014 Tokyo/Fall ライトニングトーク)
 
アセンブラ短歌(オープンソースカンファレンス2013 Tokyo/Fall ライトニングトーク)
アセンブラ短歌(オープンソースカンファレンス2013 Tokyo/Fall ライトニングトーク)アセンブラ短歌(オープンソースカンファレンス2013 Tokyo/Fall ライトニングトーク)
アセンブラ短歌(オープンソースカンファレンス2013 Tokyo/Fall ライトニングトーク)
 

バイナリ駄洒落コンテスト