63
That Goes Without Alpha-Num (or Does It ?) サボウズ・ラボ株式会社 竹迫 良範 <[email protected]>

That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

Embed Size (px)

DESCRIPTION

YAPC::Asia 2010 Tokyo Day 1 (Yoshinori TAKESAKO)

Citation preview

Page 1: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

That Goes Without Alpha-Num

(or Does It ?)

サボウズ・ラボ株式会社

竹迫 良範

<[email protected]>

Page 2: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

プログラミングで

何文字

使ってますか?

How many characters?

when if you write the

(Perl) program.

Page 3: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

8

Page 4: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

< > + .[ ] - ,

Brainf*ck : 8 characters only

Page 5: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

とても少ない

Too Small.

Page 6: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

Perl

Page 7: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

100+

$_=~/([^¥-]|)/;#

Page 8: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

US-ASCII 7bit(100文字以上)

Page 9: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

大きすぎる

Too Big.

Page 10: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

1000+

Page 11: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

Python

Page 12: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

Unicode++

Page 13: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

絵文字 大杉

Too emoji.

Page 14: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

✎ U+270E (Lower Right Pencil)

type(’pen✎’) <type ’str’>

via. http://d.hatena.ne.jp/nishiohirokazu/20100730/1280509687

Page 15: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

Unicode Eomoji : Postfix type declarations

Page 16: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

16

Page 17: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

記号に意味を持たす

プログラミング言語

Symbolic

Coding

Page 18: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

ASCII without AlphaNum(no alphabet number)

0x20 0x30 0 0x40 @ 0x50 P 0x60 ` 0x70 p0x21 ! 0x31 1 0x41 A 0x51 Q 0x61 a 0x71 q0x22 ' 0x32 2 0x42 B 0x52 R 0x62 b 0x72 r0x23 # 0x33 3 0x43 C 0x53 S 0x63 c 0x73 s0x24 $ 0x34 4 0x44 D 0x54 T 0x64 d 0x74 t0x25 % 0x35 5 0x45 E 0x55 U 0x65 e 0x75 u0x26 & 0x36 6 0x46 F 0x56 V 0x66 f 0x76 v0x27 ' 0x37 7 0x47 G 0x57 W 0x67 g 0x77 w0x28 ( 0x38 8 0x48 H 0x58 X 0x68 h 0x78 x0x29 ) 0x39 9 0x49 I 0x59 Y 0x69 i 0x79 y0x2A * 0x3A : 0x4A J 0x5A Z 0x6A j 0x7A z0x2B + 0x3B ; 0x4B K 0x5B [ 0x6B k 0x7B {0x2C , 0x3C < 0x4C L 0x5C ¥ 0x6C l 0x7C |0x2D - 0x3D = 0x4D M 0x5D ] 0x6D m 0x7D }0x2E . 0x3E > 0x4E N 0x5E ^ 0x6E n 0x7E ~0x2F / 0x3F ? 0x4F O 0x5F _ 0x6F o

Page 19: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

;"#{",$/*";}";'[!&,,#>,,`^`[%!@%@!-~`-~/(&,,-!!-!!-!+(&-,+>,,`[-!|-!}/////////$$$[,-(@),~,&(@-$@,+,)(@,(@$,!,",/(@!(@"(@#$@,{,^(@%(@&$@,!,.(@*(@."=:$_]!$-~!`{~!';%#;$^_='_^)./}`;@,@<},^^,]`@_{',$^_^='/,@@[_(^,@/-]|;,@|<.}@',$^_=~('(?{$^_=~'.('_^""'^'+,|/'."-".('$%'^';{'.'(-:^;'.('[)]@'^'>_<,').'$^_})')))#;_=[*'`'..%.~.]*%;;;$_=%+%++(??%?===???_[(_=~/¥{/).-@+(_=~/~/)]:%%%<<(?!*(?+-?()));_=([*%/!/..%!/!]+[*%]:]..%)@)]+[*%.[...%.`.]+[*%.{...%.}.])*%(=~_~='_');$><<$_%(/¥)=~_~='_'¥*=/=~_)+$_%(/~_~='_'¥-/=~_)+$_%(/¥-=~_~='_'¥./=~_)+$_%(/¥-=~_~='_'¥./=~_)+$_%(/_~='_'¥./=~_)+$_%(/'&/=~_)+$_%(/='_'%/=~_)+$_%(/=~_~='_'¥+/=~_)+$_%(/¥.=~_~='_'¥//=~_)+$_%(/',/=~_)+$_%(/~='_'¥//=~_)+$_%(/~='_''/=~_)+$_%(/=~_~='_''/=~_)+(??%?)==???($_%(/_~='_'¥(/=~_)+'(^-^)/'):$_%(/~_~='_'¥(/=~_)+'(-_-#)'+$_%(/='_';/=~_)+$_%(/'_'¥[/=~_)+$_%(/~='_':/=~_)+$_%(/~='_'¥[/=~_))+$_%(/'_'%/=~_)+$_%(/=~_~='_'#/=~_)+%))#*/=''[_=((_=''+-~-~'')+{})[-~_*_]+(_+{})[_]+(_+{}._)[_]+(_+![])[_*_]+(_+!'')[_/_]+(_+!'')[_]+(''+!'')[_]+(_+{})[-~_*_]+(_+!'')[_/_]+(_+{})[_]+(_+!'')[_]][_](_[_][_]((_=-~-~''+'',(_+!'')[_])+(_+!'')[_*_]+(_+!'')[_/_]+(''+!'')[_]+(_+!'')[_]+(_+{}._)[_]+'¥''+[''+'_="',_|_<<_,_*_+_-~_,_-~_+_|_,_-~_+_|_,((_-~_+_|_)-~_)+',",',_<<_-~_,_-~_|_<<_-~_|_,_*_+_^_+_,_*_+_-~_,(_-~_+_|_)-~_,((_+-~_)*_)+'(',(_<<_-~_)-~_,~(~_-_+_),~_*_^~_*_+_,(_+_)*_,(_-~_+_|_)-~_,((_<<_-~_)-~_)+')=="',(_-~_+_|_)-~_,_*_+_,-~(_*_)+_,_*_+_-~_,_/_|_*_+_,(_<<_-~_)+'"?',~(_*-_+_),_-~_+_|_,_*_+_-~_,-_*~_+_,(_<<_-~_)+'(_+',~_*_^~_*_+_,~(_*-_+_),_<<_-~_|_,~(~_-_+_),~(~_<<_*_),~(_*-_+_),_<<_-~_,(_-~_+_|_)-~_,(-_*~_+_)+'.',-~(_*_<<_*_),~_^~_*_+_,_*_+_-~_,-_*~_+_,''+_%_+_/_,~(~_<<_*_),_*_+_-~_,~_*_^~_*_+_,(_<<_-~_)+'.',-_*~_+_,_*_+_-~_,_*_+_^_+_,_-~_+_|_,~(_*-_+_),_/_|_*_+_,(_*_+_-~_)+'(/.+¥¥¥¥)/,"")):',_*_+_^_+_,-_*~_+_,~(~_-_+_),~_*_^~_*_+_,(_<<_-~_)+'(_+"',_/_+_,~(_*-_+_),_<<_-~_|_,~(_*-_+_),_+-~_,_/_|_*_+_,-_*~_+_,~(~_-_+_),_*_+_^_+_,(_<<_-~_)+'!")'][(_+{})[_*_]+(_+{})[_]+(_+_/'')[_*_]+(_+{}._)[_]]('¥¥'+_/_)+'¥'')())()

No al-num Polyglot programming

(1) MS-DOS 8086 (2) Javascript

(3) Perl (4) Ruby

Page 20: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

Perl 的特徵

# …

Page 21: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

JavaScript 的特徵

/* … */

Page 22: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

Ruby 的特徵

Ruby %#string#Perl q#string#

Page 23: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

.com - 16bit MS-DOS 8086

self-replacex86 binary

Page 24: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

CPU

Page 25: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
Page 26: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

01

Page 27: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

32bit Linux

Page 28: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

Linux system call programming (int 80H)

; NASM HelloWorld (Linux x86 ELF) using gcc; ; $ nasm hello.asm –f elf –o hello.o; $ gcc hello.o –o hello

section .data

msg db 'Hello, world!', 0x0Alen equ $ - msg ;

main:

mov eax, 4 ; system call number (sys_write)mov ebx, 1 ; file descriptor (stdout)mov ecx, msg ; message to writemov edx, len ; message lengthint 0x80 ; call kernel

mov eax, 1 ; system call number (sys_exit)int 0x80 ; call kernel

; sys_write(stdout, msg, len);; sys_exit;

section .text

Page 29: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

2008/08/14 Webプログラミングクラス講座 29

0 sys_restart_syscall

1 sys_exit

2 sys_fork

3 sys_read

4 sys_write

5 sys_open

6 sys_close

7 sys_waitpid

8 sys_creat

9 sys_link

10 sys_unlink

11 sys_execve

12 sys_chdir

13 sys_time

14 sys_mknod

15 sys_chmod

16 sys_lchown16

17 sys_ni_syscall

18 sys_stat

19 sys_lseek

20 sys_getpid

21 sys_mount

22 sys_oldumount

23 sys_setuid16

24 sys_getuid16

25 sys_stime

26 sys_ptrace

27 sys_alarm

28 sys_fstat

29 sys_pause

30 sys_utime

31 sys_ni_syscall

32 sys_ni_syscall

33 sys_access

34 sys_nice

35 sys_ni_syscall

36 sys_sync

37 sys_kill

38 sys_rename

39 sys_mkdir

40 sys_rmdir

41 sys_dup

42 sys_pipe

43 sys_times

44 sys_ni_syscall

45 sys_brk

46 sys_setgid16

47 sys_getgid16

48 sys_signal

49 sys_geteuid16

50 sys_getegid16

51 sys_acct

52 sys_umount

53 sys_ni_syscall

54 sys_ioctl

55 sys_fcntl

56 sys_ni_syscall

57 sys_setpgid

58 sys_ni_syscall

59 sys_olduname

60 sys_umask

61 sys_chroot

62 sys_ustat

63 sys_dup2

64 sys_getppid

65 sys_getpgrp

66 sys_setsid

67 sys_sigaction

68 sys_sgetmask

69 sys_ssetmask

70 sys_setreuid16

71 sys_setregid16

72 sys_sigsuspend

73 sys_sigpending

74 sys_sethostname

75 sys_setrlimit

76 sys_old_getrlimit

77 sys_getrusage

78 sys_gettimeofday

79 sys_settimeofday

80 sys_getgroups16

81 sys_setgroups16

82 old_select

83 sys_symlink

84 sys_lstat

85 sys_readlink

86 sys_uselib

87 sys_swapon

88 sys_reboot

89 old_readdir

90 old_mmap

91 sys_munmap

92 sys_truncate

93 sys_ftruncate

94 sys_fchmod

95 sys_fchown16

96 sys_getpriority

97 sys_setpriority

98 sys_ni_syscall

99 sys_statfs

* linux-2.6.14/arch/i386/kernel/syscall_table.S (0-99/293)

Page 30: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

x86

Page 31: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

08048060 <.text>:8048060: b8 04 00 00 00 mov $0x4,%eax8048065: bb 01 00 00 00 mov $0x1,%ebx804806a: e8 0e 00 00 00 call 0x804807d804806f: 48 dec %eax8048070: 65 gs8048071: 6c insb (%dx),%es:(%edi)8048072: 6c insb (%dx),%es:(%edi)8048073: 6f outsl %ds:(%esi),(%dx)8048074: 2c 20 sub $0x20,%al8048076: 77 6f ja 0x80480e78048078: 72 6c jb 0x80480e6804807a: 64 21 0a and %ecx,%fs:(%edx)804807d: 59 pop %ecx804807e: ba 0e 00 00 00 mov $0xe,%edx8048083: cd 80 int $0x808048085: b8 01 00 00 00 mov $0x1,%eax804808a: cd 80 int $0x80

Too Binary… (is not Printable)

Page 32: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

orz

Page 33: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

Binaryを使わずにx86を実行できるか?

00000000 2540404040 and eax,0x4040404000000005 2521212121 and eax,0x212121210000000A 2D2D213D3D sub eax,0x3d3d212d0000000F 2D2A7D3B3B sub eax,0x3b3b7d2a00000014 2D233E7B7B sub eax,0x7b7b3e2300000019 2D25607B7B sub eax,0x7b7b60250000001E 60 pushad0000001F 5B pop ebx00000020 5E pop esi00000021 5F pop edi00000022 5E pop esi00000023 5B pop ebx00000024 5E pop esi00000025 5F pop edi00000026 2540404040 and eax,0x404040400000002B 2521212121 and eax,0x2121212100000030 2D2D2D2D2D sub eax,0x2d2d2d2d00000035 2D287E2A2A sub eax,0x2a2a7e28

Page 34: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

できた!

Page 35: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

10

Page 36: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

しかも10文字だけでx86プログラムを実行

char main[]="`%[_-]%-```%`-_-`[_][_]_[-_,`~-~#-[-~]#_-)]%_-`]%``_____""___-[)[`-)[,]-[])_-#,~%-~]~]`]]]]]]]]),_-`#,#-)`,]--[#[-)`%~--]%~`]_""][][_-)~[_-~_-)-_%~,--`]--]-_-`[[[[]]]-)%#)-~]~--[#~--##-~-[~~~`_][_""[_]-_`_]-%~%#-~#,--#[#`-[[-%`_]___][-_-,_-[]-~-_]_--__-~-~__%`[_][_]""[-_`~%-)`#)-_``)-[_#%-]_%``]__[][]-_#`)-#]~~-,-__-`-~~--~_,`]][_[_[-""_%%]-,[[,--%]--,##,-,%#[`[[_[]_]-]_,#-]#[%-~]`,-)~~--~``-`[][[[][-]#""]%-)_[#-%]%#-##,[-#-%``[]_]][_-)%[#--~)`-#-~,-~)`#--)~%`___]_]]-`-_%""-``#%-,~#--~)#--]~#-`][[]]]]-[#_--_)#%--#---#~_~-[~])`_]_____--)[#-[""_`--,%~,-))`--#)~~`][]]]]_-~--,-]_]~-~-~%-)-_)-~]~%`__[_]_[-]#%`-~#-""#-##)--%#],-%))#`_]]]_[[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";

Page 37: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

# % - ) ,[ ] _ ` ~

名付けて Brain-f*ck-f*ck(仮)

Page 38: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

demo : Hello, world ! (32bit Linux x86)

Page 39: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

10 characters only !

0x20 0x30 0 0x40 @ 0x50 P 0x60 ` 0x70 p0x21 ! 0x31 1 0x41 A 0x51 Q 0x61 a 0x71 q0x22 ' 0x32 2 0x42 B 0x52 R 0x62 b 0x72 r0x23 # 0x33 3 0x43 C 0x53 S 0x63 c 0x73 s0x24 $ 0x34 4 0x44 D 0x54 T 0x64 d 0x74 t0x25 % 0x35 5 0x45 E 0x55 U 0x65 e 0x75 u0x26 & 0x36 6 0x46 F 0x56 V 0x66 f 0x76 v0x27 ' 0x37 7 0x47 G 0x57 W 0x67 g 0x77 w0x28 ( 0x38 8 0x48 H 0x58 X 0x68 h 0x78 x0x29 ) 0x39 9 0x49 I 0x59 Y 0x69 i 0x79 y0x2A * 0x3A : 0x4A J 0x5A Z 0x6A j 0x7A z0x2B + 0x3B ; 0x4B K 0x5B [ 0x6B k 0x7B {0x2C , 0x3C < 0x4C L 0x5C ¥ 0x6C l 0x7C |0x2D - 0x3D = 0x4D M 0x5D ] 0x6D m 0x7D }0x2E . 0x3E > 0x4E N 0x5E ^ 0x6E n 0x7E ~0x2F / 0x3F ? 0x4F O 0x5F _ 0x6F o

Page 40: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

言語仕様書(x86命令の10個の記号だけ)

% 25 and eax,XXXXXXXX- 2D sub eax,XXXXXXXX# 23 and ebp,[edi+ebx*2]) 29 sub [edi+ebx*2],ebp, 2C sub al,XX` 60 pushad[ 5B pop ebx] 5D pop ebp_ 5F pop edi~ 7E jne(jng) XX

Page 41: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

問題

Page 42: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

ADD命令すら呼べない。MOVも実行できない

Page 43: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

どうする?

Page 44: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

乱数で生成した記号バナリを逆ゕセ

00000000 293D2B283A5B sub [dword 0x5b3a282b],edi00000006 2C2A sub al,0x2a00000008 2821 sub [ecx],ah0000000A 3E283B sub [ds:ebx],bh0000000D 60 pushad0000000E 3D3B7C2F7C cmp eax,0x7c2f7c3b00000013 5F pop edi00000014 60 pushad00000015 2B3E sub edi,[esi]00000017 5F pop edi00000018 2B7D21 sub edi,[ebp+0x21]0000001B 5E pop esi0000001C 3C2B cmp al,0x2b0000001E 3F aas0000001F 5D pop ebp00000020 7B25 jpo 0x4700000022 2D295B7B2E sub eax,0x2e7b5b2900000027 3C23 cmp al,0x2300000029 5C pop esp

使えそうな命令を探す

Page 45: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

0x60 PUSHAD (`)

Temporary = ESP;Push(EAX);Push(ECX);Push(EDX);Push(EBX);Push(Temporary);Push(EBP);Push(ESI);Push(EDI);

60 PUSHA Push AX, CX, DX, BX, original SP, BP, SI, and DI.60 PUSHAD Push EAX, ECX, EDX, EBX, original ESP, EBP, ESI, and EDI.

Page 46: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

0x61 POPAD (’a’) oh! Alphabet…

//Instruction == POPAD_ EDI = Pop();^ ESI = Pop();] EBP = Pop();¥ ESP = ESP + 4; //skip next 4 bytes of stack[ EBX = Pop();Z EDX = Pop();Y ECX = Pop();X EAX = Pop();

61 POPA Pop DI, SI, BP, BX, DX, CX, and AX. 61 POPAD Pop EDI, ESI, EBP, EBX, EDX, ECX, and EAX.

Page 47: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

使えるレジスタに制限がある

58 pop eax; X59 pop ecx; Y5A pop edx; Z5B pop ebx; [5C pop esp; ¥5D pop ebp; ]5E pop esi; ^5F pop edi; _

Page 48: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

AND SUB PUSHAD POP x 7

00000000 2540404040 and eax,0x4040404000000005 2521212121 and eax,0x21212121

0000000A 2D2D213D3D sub eax,0x3d3d212d0000000F 2D2A7D3B3B sub eax,0x3b3b7d2a00000014 2D233E7B7B sub eax,0x7b7b3e2300000019 2D25607B7B sub eax,0x7b7b6025

0000001E 60 pushad0000001F 5B pop ebx00000020 5E pop esi00000021 5F pop edi00000022 5E pop esi00000023 5B pop ebx00000024 5E pop esi00000025 5F pop edi

PUSH dword 0x???????? 相当のx86コード

Page 49: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

一番の問題は…

スタック上に置いたコードにジャンプする方法がない!!!

FF D4 call espFF E4 jmp espFF D4 call espFF D0 call eaxC3 ret

Page 50: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

メモリへの書き込みは AND と SUB のみで

23 2C 5F and ebp,[edi+ebx*2]# , _

29 2C 5F sub [edi+ebx*2],ebp) , _

実際に使えるレジスタも ebp, edi, ebx の3つなど制限がある。

→自己書き換え

Page 51: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

(省略)

Page 52: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

Perl ンタプリタが起動するデモ(省略)

Page 53: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

まとめ

Page 54: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

顔文字 [^_^]

x86

Programming

Page 55: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

記号プログラミングのススメ

使用するのは記号32文字のみ

!”#$%&’()-=^~¥|`@

{ [ ] } ; + : * <> , . / ? _ |

スペース、タブ、改行も使わない

メリット

ンデントに悩む必要なし

1,2,3,4,8スペース、1タブ派の人も安心

変数の命名に悩む必要なし

_ __ ___ ____ _____ ______ _______

Page 56: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

顔文字系 x86 プログラミングのススメ

NASM が存在しない環境でも…

直接キー入力で実行可能

ゕセンブラなんて不要

コンパルフェーズなし

コピペで量産可能

US-ASCII の範囲なので大丈夫!

バナリエデゖタ不要

スクリーンエデゖタすら不要

本当のプログラマは /dev/tty で(ry

Page 57: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

顔文字系プログラミングのススメ

ソースコードがいつも笑顔!

[^_^[^_^

癒される!

[^_^[^_^

読みにくいコードで職を守る!

[^_^[^_^

純粋に楽しい!

[^_^[^_^

Fun of the programming

Page 58: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

58

一生涯 顔文字プログラマー 宣言

たとえ、ゕルフゔベットのキーが壊れても、記号のキーだけあればプログラミングできる!

Page 59: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

バイナリアン

はもう古い

Page 60: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

ASCII 文字で

プログラミング

Page 61: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

しかも

10文字

だけで

Page 62: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

# % - ) ,[ ] _ ` ~

ね、簡単でしょ?

Page 63: That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us

all your base10 are belong to us

,[^_^]/~