2013年1月27日 星期日

情報理工學院「招生海報」藏玄機 - 東大

警告
這篇文章有難度,需要一些計算機基礎才能夠閱讀!並且有一些亂七八糟的內容!



每間大學都希望招收到全世界最優秀的學生,東京大學也不例外,有趣的是,日本東京大學情報理工學系研究科,每年都會在招生海報上藏有密碼,如果你能看見美女背後隱藏的訊息,將可能直接錄取東大!就是這張海報,仔細一看,海報上除了有名一副古色古香的打扮,嫻靜而端莊,這樣的學妹(筆者的學姊)站在那,上頭更佈滿了0和1的電腦二進位語言。這可不是好看用的數字,在二進位語言的背後可是藏有密碼的。

從2011年開始,筆者每年都會上去玩這個海報遊戲,今年我也注意了一下,但是還沒有出來,於是筆者我心血來潮分享了去年2012年的海報分析教學,給有興趣的朋友玩玩。

首先筆者先把將圖片上的數字轉化為文本,數字串總共26行,除最後一行98個數字外其它每行110個數字,共計2848個數字。至於計算、如何將數字轉化為文本,這些基本功都不會的話,建議別再看下去了...


0001111110001011000010000000000000000000000000000000000000000000000000100000001101101101010100001100101101001110110000100100000000010100001111010101001100011110100001010101101010110101100000001110000000000011010100001101100001010001000100110110100011100010000101100011000100110001101011000100110000110100100110100110000011011000101110000001101001101010100101011110000111010001001101100111010110000000101100001111011101001011110111001011100011010110000001010010011000101110111111000000000011111111110000111000111101110000111000011110001100010110010011010000110010001001100100111100110010011100101110011111011110011110100100110111101111101110011111011111110101111100011111100000000110110000100001111011001000000110000101010010101101001001101011001100001001001000001000001010010100100001100011011000110010000110001101010110010001010101111001000101010010101100001100111100010011110111100001010010101111100100000000010100001110100100011000101011011000011001101000100100110111101111110100100010000100011000011100101110000100110010111001000010101000010111110001110011110100111110111001101101011010000000101110111101011101010110010010110000011011000010101111011010111010000111101101001110010110010110111001000111011011111111100001001111101111100111101111000011001101110000011101000010010010010000010101001011000110100001011000110001001101011011000011001110011010100100110010100100011111000001011000000010001001101101010101110011100000010011101011110110011001010101011001011010110111011111111010110000111010100100100110001111101011000010011100110110101010011110110101010001111100000111101000111101101000010101011101110101010011100100011101010001010001010000010101001011000110101101011000110000011100100101000001100010011000011000100011001011111110010110101001111001110110011110011000111100101110000101010101000110101101111010001000111001110100100001111110011111010101000110010101001100100011111110111110000001001110011110011101010100011011100110001001000101100101110100111110001011000010111110001010001001100011011011101001100100100111101101001011100000111100001110010010010001001110101101000111001001100101001101100001101100110000111111010010101000011010011000000111110100011000100001101010010110100110110110010100010100001010011100110101100001011100011110100001010010111001001101000010010000011010001101011111100010100101000010010001100001100011011011011111010000001001111011100110000001001110010010010110001000001011111110010110110110111000100000100010100000100001100001001110011101001000101000000110001110011000011101111100101000111101010000110100101001000110000010000100011110111100011010101001100011111101000011011101001000011011011000101011011100001011101110101111111101111001000010001010010110110110010011010111100000110111001010000001110011010101100001111011110010100000000010110111111110101010100011000010011100000110111110000000010000000000000000


首先,筆者第一個直覺告訴我,這應該是是ASCII編碼,這時侯就要再去推測這是big-endian還是little-endian,於是筆者兩個都試一次,結果筆者沒有看出任何有意義的字符,失敗了。

接著筆者試著去考慮到可能交換加密過,去掉非英文字母後,反解出26個可能的文本,也都沒有什麼意義。看來不是ASCII編碼,所以更加確定這個想法失敗了。


考慮到2848長度是8的倍數,也可能是二進製文件,所以嘗試著用big-endian和little-endian去試著把它讀出來,並寫成二進制文件。而big-endian的那個輸出居然是一個gz壓縮包,如圖。





改名為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 \00 Code \00 main \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 \00 i \00 java/lang/Object \00 java/lang/System \00 out \00 Ljava/io/PrintStream; \00 java/lang/String \00 charAt \00 (I)C \00 java/io/PrintStream \00 print \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\00 h )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,運行得到http://i-web.i.u-tokyo.ac.jp/fun/hikari-loveletter/  ,這樣就完成啦!(灑花)

趕快看看這可愛櫻花妹的照片和聽聽她的歌聲吧!


另外還有版權信息的文本解密: 0x11c開始,sjis編碼 


最後,恭喜你能看到這一步!你已經有不提交任何資料,可以取得直接面試的資格,但是離最終錄取還有下面一段路程。當然,我會繼續當普通學生在這裡好好學習資訊工程,請忘掉我的名字,如果非要記得我,請叫我城市獵人。


後記:由衷感謝Google大神、
jd-gui反編譯軟件以及維基百科,我才能夠解出來,但這也凸顯筆者還太弱了,所以筆者還會再繼續努力學習!也請各位多賜教,小的會虛心接受。另外,裡面年份好像有誤,以及好像有最新版本了,但筆者因有重要考試在身,就不在去考證了,還請各位見諒!

沒有留言:

張貼留言