最近在人人上很火的關於揭秘東京大學招生海報的文章。其實是STAGE1論壇上把各位集思廣益結果的一個總結。
請先到這個帖裡膜拜s1的巨巨們。破譯工作不是我做的,是他們搞的。
====
這個是去年東京大學情報理工學系研究科(Graduate School of Information Science and Technology,大致是類似於電腦系研究生院的地方吧我猜)的招生海報。這張圖流傳很廣,想必不少人在人人和微博上看到過。此圖貌似引起各高校CS系男磚工們各種遐想和yy,圖中的妹子一副古色古香的打扮,嫻靜而端莊,然後大家就紛紛感歎同是CS自己的學校怎麼就沒有這樣的福利……
當大家對著可愛的妹子胡思亂想時,不知你是否想過,前面的那一串二進位01串並非是用臉滾鍵盤出來的裝飾品,而是別有深意呢?
實際上,這張圖真正最有趣的地方並非作為背景的妹子,而恰恰是前面的這個01串。下面我們就來看看這個01串到底是什麼意思。
首先用ocr軟體將圖片上的數字轉化為文本,有些地方顏色和背景差不多需要手工識別。數字串總共26行,除最後一行98個數字外其它每行110個數字,共計2848個數字。最後手工校正一遍。這個過程比較考驗耐心……
00011111100010110000100000000000000000000000000000000000000000000000001000000011011011010101000011001011010011
10110000100100000000010100001111010101001100011110100001010101101010110101100000001110000000000011010100001101
10000101000100010011011010001110001000010110001100010011000110101100010011000011010010011010011000001101100010
11100000011010011010101001010111100001110100010011011001110101100000001011000011110111010010111101110010111000
11010110000001010010011000101110111111000000000011111111110000111000111101110000111000011110001100010110010011
01000011001000100110010011110011001001110010111001111101111001111010010011011110111110111001111101111111010111
11000111111000000001101100001000011110110010000001100001010100101011010010011010110011000010010010000010000010
10010100100001100011011000110010000110001101010110010001010101111001000101010010101100001100111100010011110111
10000101001010111110010000000001010000111010010001100010101101100001100110100010010011011110111111010010001000
01000110000111001011100001001100101110010000101010000101111100011100111101001111101110011011010110100000001011
10111101011101010110010010110000011011000010101111011010111010000111101101001110010110010110111001000111011011
11111110000100111110111110011110111100001100110111000001110100001001001001000001010100101100011010000101100011
00010011010110110000110011100110101001001100101001000111110000010110000000100010011011010101011100111000000100
11101011110110011001010101011001011010110111011111111010110000111010100100100110001111101011000010011100110110
10101001111011010101000111110000011110100011110110100001010101110111010101001110010001110101000101000101000001
01010010110001101011010110001100000111001001010000011000100110000110001000110010111111100101101010011110011101
10011110011000111100101110000101010101000110101101111010001000111001110100100001111110011111010101000110010101
00110010001111111011111000000100111001111001110101010001101110011000100100010110010111010011111000101100001011
11100010100010011000110110111010011001001001111011010010111000001111000011100100100100010011101011010001110010
01100101001101100001101100110000111111010010101000011010011000000111110100011000100001101010010110100110110110
01010001010000101001110011010110000101110001111010000101001011100100110100001001000001101000110101111110001010
01010000100100011000011000110110110111110100000010011110111001100000010011100100100101100010000010111111100101
10110110111000100000100010100000100001100001001110011101001000101000000110001110011000011101111100101000111101
01000011010010100100011000001000010001111011110001101010100110001111110100001101110100100001101101100010101101
11000010111011101011111111011110010000100010100101101101100100110101111000001101110010100000011100110101011000
01111011110010100000000010110111111110101010100011000010011100000110111110000000010000000000000000
首先第一個想法肯定是ASCII編碼,由於不知道是big-endian還是little-endian就兩個都試一次,結果看不出來是什麼有意義的字串。考慮到可能用凱撒密碼加密過,去掉非拉丁字母后反解出26個可能的文本,也都沒有什麼意義。看來不是ASCII編碼。
考慮到2848長度是8的倍數,也可能是二進位檔案,所以也big-endian和little-endian地讀出來並寫成二進位檔案。
gnome還是比較聰明的,認出了big-endian的那個輸出是一個gz壓縮包。實際上,看不出來的話,也可以把檔案頭的3個位元組丟google,
改名為bin.gz,解壓得到一個叫做bin的檔案。看一下
\CA\FE\BA\BE\00\00\002\00!
\00\00 \00\00\00
\00\00
\00\00\00\00\00<init>\00()V\00Code\00main\00([Ljava/lang/String;)V\00 StackMapTable \00\00 \00 \00\00\00)w-aurlwtcniewo./-t.kjhltiypioe.o/kvru.fae\00 \00\00\00 \00\00 \00i\00java/lang/Object\00java/lang/System\00out\00Ljava/io/PrintStream;\00java/lang/String\00charAt\00(I)C\00java/io/PrintStream\00print\00(C)V\00
\00\00\00\00\00\00\00\00\00\00\00 \00\00
\00\00\00\00\00\00\00\00*\B7\00\B1\00\00\00\00\00 \00 \00 \00\00
\00\00\00=\00\00\00\00\00!=)\A2\00\B2\00h)p\B6\00\B6\00\84\A7\FF\E5\B1\00\00\00\00 \00\00\00
\00\FD\00\00\F9\00\00\00\00
熟悉java的同學應該一眼就能看出這是個編譯過的class檔案(看不懂的也可以用jd-gui反編譯),改名為bin.class,運行提示
Exception in thread "main" java.lang.NoClassDefFoundError: bin (wrong name: i)
再改名為i.class,運行得到
www.i.u-tokyo.ac.jp/fun/hikari-loveletter
哦哦哦!感覺要接近真相了。
information is conceived in letters and sounds,
and wherever sentiment and intention are found -
poetry is formed when feelings rest within consonants and vowels,
melody is born when emotion in harmony with each soul resounds.
our desire to communicate is found at the core of the information we impart,
likes or dislikes, black or white, 0 or 1, science or art -
from our eyes and our ears - our whole bodies - each part,
and, most assuredly, from each one of our hearts.
唔哦,好文藝……點next進去,有一首歌 ヒカリラブレター hikari loveletter,似乎就是海報上那個妹子唱的,還挺好聽的……
反覆聽了幾遍,當作練聽力好了……嗯,其實有一段挺違和的,在2:58 - 3:01那一段,明顯不是日語,而且感覺是機器合成的一樣。用audacity把這段剪出來分析。
瞎搞了一番,最後的發現其實很簡單:倒放reverse即可。聽到的應該是xxxくれて、ありがとう(聽力不好,真心聽不清楚……)。
有說是慢放能聽作“聞いたくれてありがとう” (謝謝傾聽)。不過我是聽作“いてくれて、ありがとう”(來到這裡,謝謝你了),超帶感的啊~
====
那麼接下來來玩玩前年的吧。
妹子還是一如既往可愛呢。
100011101110010011000010110010001110101011000010111010001100101001000000101001101100011011010000110111101101111
011011000010000001101111011001100010000001001001011011100110011001101111011100100110110101100001011101000110100
101101111011011100010000001010011011000110110100101100101011011100110001101100101001000000110000101101110011001
000010000001010100011001010110001101101000011011100110111101101100011011110110011101111001001011000010000001010
100011010000110010100100000010101010110111001101001011101100110010101110010011100110110100101110100011110010010
000001101111011001100010000001010100011011110110101101111001011011111000111011100100110000101100100011101010110
000101110100011001010010000001010011011000110110100001101111011011110110110000100000011011110110011000100000010
010010110111001100110011011110111001001101101011000010111010001101001011011110110111000100000010100110110001101
101001011001010110111001100011011001010010000001100001011011100110010000100000010101000110010101100011011010000
110111001101111011011000110111101100111011110010010110000100000010101000110100001100101001000000101010101101110
011010010111011001100101011100100111001101101001011101000111100100100000011011110110011000100000010101000110111
101101011011110010110111110001110111001001100001011001000111010101100001011101000110010100100000010100110110001
101101000011011110110111101101100001000000110111101100110001000000100100101101110011001100110111101110010011011
010110000101110100011010010110111101101110001000000101001101100011011010010110010101101110011000110110010100100
000011000010110111001100100001000000101010001100101011000110110100001101110011011110110110001101111011001110111
100100101100001000000101010001101000011001010010000001010101011011100110100101110110011001010111001001110011011
010010111010001111001001000000110111101100110001000000101010001101111011010110111100101101111100011101110010011
000010110010001110101011000010111010001100101001000000101001101100011011010000110111101101111011011000010000001
101111011001100010000001001001011011100110011001101111011100100110110101100001011101000110100101101111011011100
010000001010011011000110110100101100101011011100110001101100101001000000110000101101110011001000010000001010100
011001010110001101101000011011100110111101101100011011110110011101111001001011000010000001010100011010000110010
100100000010101010110111001101001011101100110010101110010011100110110100101110100011110010010000001101111011001
100010000001010100011011110110100011101110010011000010110010001110101011000010111010001100101001000000101001101
100011011010000110111101101111011011000010000001101111011001100010000001001001011011100110011001101111011100100
110110101100001011101000110100101101111011011100010000001010011011000110110100101100101011011100110001101100101
001000000110000101101110011001000010000001010100011001010110001101101000011011100110111101101100011011110110011
10111100100101100001000000101010001101000011001010010000001010101011011100110100101110110011001010111001001110011011
共27行,除最後一行116個數字外每行111個數字,共計3002個數字。嘗試掐掉末尾轉成ASCII碼和二進位檔案都失敗了。
試著轉化為映像,大致。
仔細觀察可以發現,似乎什麼東西重複了4遍……於是用kmp作check,發現第1-第623個字元重複了3次,而第四次的後面似乎有些雜訊。不管它,先把1-623扣出來。
623不是8的倍數,但623=7*89,考慮到ASCII碼第一位一定是0,所以每7位組成一個字元,嘗試打出來。毫無結果……
等等,第一位一定是0的話,似乎這串裡8的倍數的位置都是0,這樣的話……莫非是最後補上一個0,然後這回是看作little-endian?嘗試後依舊無果……
再等等,8的倍數的位置都是0的話,也有可能是在第一位補0,然後看作big-endian。這回結果出來了:
[jffifa@jffifa acm]$ ./t
Graduate School of Information Science and Technology, The University of Tokyo
怎麼不是妹子的連絡方式呢……
順便一提,妹子的衣服叫做“十二單“,是一種極其考究的古服,有興趣的同學可以研究一下。
====
今年北大的招生海報……
已經在github上開設項目了:https://github.com/NaokiKuzumi/istposter2013。