アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf ·...

85
アセンブラ短歌 坂井弘亮 KOZOSプロジェクト) Twitter ID:kozossakai

Transcript of アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf ·...

Page 1: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

アセンブラ短歌

坂井弘亮(KOZOSプロジェクト)Twitter ID:kozossakai

Page 2: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

突然ですが

Page 3: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

SECCON2013

Page 4: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

SECCONとは何か

セキュリティ競技のコンテストです

Page 5: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

昨年はCTFという競技大会が

メインでしたが

Page 6: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

今年のSECCONでは様々なコンテストが

行われるらしい

Page 7: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

例えば回路設計とか

アセンブラ短歌とか

Page 8: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

アセンブラ短歌?

Page 9: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

アセンブラ短歌とは

5・7・5・7・7の機械語コードでプログラムを

書いてみるという近未来の文化的趣味

Page 10: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

こんな感じです

Page 11: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

68 72 6c 64 2168 6f 20 57 6f 90 9068 48 65 6c 6c89 e5 6a 0c 55 6a 0250 90 6a 04 58 cd 80

Page 12: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

実行結果

Page 13: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

Hello World!

Page 14: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

それならば、これもできるだろうと

いうことで

Page 15: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

アセンブラ川柳

Page 16: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

6a 48 89 e5 906a 01 55 6a 02 50 906a 04 58 cd 80

Page 17: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

実行結果

Page 18: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

H

Page 19: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

1文字がせいいっぱいでした

下の句が無いと、けっこう難しい

Page 20: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

まてよ

Page 21: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

ということは

Page 22: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

こういうのも可能ということか

Page 23: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

アセンブラかるた

Page 24: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

作ってみた

Page 25: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

68 a5 f3 a5 b068 a1 bc a5 ea 90 9068 a5 d5 a5 a389 e5 6a 0c 55 6a 0250 90 6a 04 58 cd 80実行 → フィーリング

68 00 00 a5 a268 a5 bb a5 f3 90 9068 a5 d6 a5 e989 e5 6a 0c 55 6a 0250 90 6a 04 58 cd 80実行 → ブラセンア

Page 26: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

しかし問題あり

Page 27: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

バイナリダンプを見ると

Page 28: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

00000000 68 a5 f3 a5 b0 68 a1 bc |hングhー|00000008 a5 ea 90 90 68 a5 d5 a5 |リ..hフ|00000010 a3 89 e5 6a 0c 55 6a 02 |.j.Uj.|00000018 50 90 6a 04 58 cd 80 |P.j.X.|

00000000 68 00 00 a5 a2 68 a5 bb |h..アhセ|00000008 a5 f3 90 90 68 a5 d6 a5 |ン..hブ|00000010 e9 89 e5 6a 0c 55 6a 02 |.j.Uj.|00000018 50 90 6a 04 58 cd 80 |P.j.X.|

Page 29: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

00000000 68 a5 f3 a5 b0 68 a1 bc |hングhー|00000008 a5 ea 90 90 68 a5 d5 a5 |リ..hフ|00000010 a3 89 e5 6a 0c 55 6a 02 |.j.Uj.|00000018 50 90 6a 04 58 cd 80 |P.j.X.|

00000000 68 00 00 a5 a2 68 a5 bb |h..アhセ|00000008 a5 f3 90 90 68 a5 d6 a5 |ン..hブ|00000010 e9 89 e5 6a 0c 55 6a 02 |.j.Uj.|00000018 50 90 6a 04 58 cd 80 |P.j.X.|

Page 30: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

つまり読み札を読み上げた時点で

取り札がわかってしまう

Page 31: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

これでは競技にできない

Page 32: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

xorにかけて難読化してみる

Page 33: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

b8 5b 0c 5a 29f7 d8 50 b8 5b 5d 5a 44 (字余り)f7 d8 50 89 e56a 08 55 6a 02 50 9090 90 6a 04 58 cd 80

Page 34: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

実行結果

Page 35: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

アセンブ

Page 36: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

4文字がせいいっぱい

でした

Page 37: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

バイナリダンプは

Page 38: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

00000000 b8 5b 0c 5a 29 f7 d8 50 |[.Z)P|00000008 b8 5b 5d 5a 44 f7 d8 50 |[]ZDP|00000010 89 e5 6a 08 55 6a 02 50 |.j.Uj.P|00000018 90 90 90 6a 04 58 cd 80 |...j.X.|

Page 39: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

これなら読めまい

Page 40: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

ここからが今日の本題

Page 41: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

ふだんは趣味でこんなことをやっています

Page 42: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

GCCが対応しているCPUアーキテクチャの

アセンブラを片っ端から出力させて、片っ端から読んでみる

Page 43: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

対象アーキテクチャ

Page 44: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

40種類

Page 45: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

Alpha ARC ARM ARM(Thumb) AVRAVR(8bit) CRIS FR30 FR-V H8/300

H8/300H HP/PA i386 i960 IA-64 M32R68HC11 68HC11(16bit) M68000 MCORE

MIPS MIPS16 MIPS64 MIST32 MMIXMN10300 PDP-11 PowerPC PowerPC64

S/390 SH SH64 SPARC StrongARM V850VAX x86-64 XScale Xstormy Xtensa

Page 46: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

この技術をアセンブラ短歌に

活かしたい

Page 47: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

アセンブラ短歌にもっとも向いた

アーキテクチャは何か?

Page 48: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

ちなみに他の言語では

Page 49: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

「XX短歌」は他の言語では

難しい

Page 50: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

スクリプト言語はこれが邪魔

Page 51: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

#!/bin/sh

(9文字)

Page 52: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

C言語はこれが邪魔

Page 53: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

#include <stdio.h>

(18文字)

Page 54: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

RISC系プロセッサ→4バイト固定長命令

可変長命令でも→偶数バイト命令が多

原理的に不可能

Page 55: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

アセンブラ短歌ができるのは実は、以下くらいしか

ありませんでした

x86、68HC11、MN10300、

VAX、Xtensa

Page 56: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

アセンブラ短歌にはOSSが

(主にGCCが)必須

Page 57: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

そして

Page 58: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

現在、アセンブラ出力環境の

GCCバージョン4対応をやっています

Page 59: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

以下のアーキが利用可能に

なりましたBlackfin CR16 M32C

MicroBlaze MoxieRL78 RX TIC6X

Page 60: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

短歌的にはどうかが気になる

Page 61: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

以下のアーキで原理的に可能な

ことが判明x86(Intel) M32C(三菱)

MN10300(松下)RL78(ルネサス) RX(ルネサス)

Xtensa (テンシリカ)

Page 62: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

やってみた

Page 63: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

まず、RX

Page 64: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

mov.l #1, r1mov.l #10, r3nop

mov.l #0x6c6c6548, [r0]nop

mov.l #0x6c72, 8[r0]

こんな感じか

mov.l #0x6f57206f, 4[r0]

mov.l r0, r2mov.l #5, r5int #255

上の句

下の句

Page 65: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

機械語コードにすると

Page 66: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

66 11 66 a3 03f8 02 48 65 6c 6c 03f9 0a 02 72 6cf9 02 01 6f 20 57 6fef 02 66 55 75 60 ff

こんな感じ

Page 67: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

実行結果は

Page 68: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

Hello Worl

(10文字)

Page 69: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

次、RL78

Page 70: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

mov 0xfff10, #72mov a, #108

mov 0xfff10, #101mov 0xfff10, amov 0xfff10, a

mov 0xfff10, #111mov a, #32

こんな感じ

mov 0xfff10, amov 0xfff10, #87mov a, #111

mov 0xfff10, amov 0xfff10, #114nopnop

上の句

下の句

Page 71: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

ce 10 48 51 6cce 10 65 9e 10 9e 10ce 10 6f 51 209e 10 ce 10 57 51 6f9e 10 ce 10 72 00 00

機械語コード

Page 72: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

実行結果は

Page 73: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

Hello Wor

(9文字)

Page 74: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

他のはこんな感じ

Page 75: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

Hello Wo (8文字)

MN10300

M32CHello! (6文字)

Page 76: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

Hello World! (12文字)

i386/FreeBSD

i386/LinuxHello World!! (13文字)

Page 77: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

比較してみる

Page 78: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

比較の前に

Page 79: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

定量化のためには

単位が必要

Page 80: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

単位を制定するBPT (Byte per Tanka)

... アセンブラ短歌のやりやすさの指標

Page 81: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

たとえばRXは

Hello Worl で10文字なので

10BPT

Page 82: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

集計すると

Page 83: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

M32C 6BPTMN10300 8BPTRL78 9BPTRX 10BPTx86/FreeBSD 12BPTx86/Linux 13BPT

Page 84: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

x86は非常に短歌に向いている

ことが判明(あとLinuxも)

Page 85: アセンブラ短歌 坂井弘亮 - kozoskozos.jp/documents/LT_asm_tanka_osc.pdf · 昨年はctfという 競技大会が メインでしたが

どうもありがとうございました