2018 Mossad Challenge

weixin_33749242發表於2018-06-14

2018 Mossad挑戰,目的是招聘。

以下來自百度百科 - Mossad

摩薩德(Mossad),全稱為以色列情報和特殊使命局(The Institute for Intelligence and Special Operations),由以色列軍方於1948年建立,以大膽、激進、詭祕稱著於世。與美國中央情報局蘇聯國家安全委員會英國軍情六處,並稱為“世界四大情報組織”。自從成立以來,摩薩德進行了多次讓世界震動的成功行動。它的成功,成為世界情報史上的傳奇。

第一個頁面

https://www.r-u-ready.xyz
初始頁面就是下面這張圖,可以判斷處高亮的字元實則是 brainfuck 編碼。

641339-d7621982fc698212.png
image.png

左邊的程式碼為:

>+-++<>-+--><[+-[
]+-]<+--+>[+--+]<
[+>+<-]><----[-->
+++<]>--.--------
-.+++.[++>---<]>+
+.-[----->++<]>-.
+[->+++<]>+.+++++
++++++.----------
--.----[->+++<]>+
.-[-->+++++<]>---
.------.[--->+<]>
++.[-]>+-++<>-+--
><[+-[]+-]<+--+>[
+--+]<[+>+<-]><>+
-++<>-+--><[+-[]+
-]<+--+>[+--+]<[]

右邊的程式碼為:

+++++++++++[>++++
+++++++<-]>+[<+>-
]-[>+<-------]>--
-[<+>-][<+>-]>++>
+[>++[-<++++++>]<
<]>[<+>-]>+>++[++
>++[-<+++++>]<<]>
[<+>-]>+>+[>++++[
-<++++>]<<]>[<+>-
]++++++++[>++++++
+++++<-]>+[<+>-]+
++>>+>+[->+++[-<+
++++>]<<]>[<+>-]+
+++++++[>++++++++
<-]>+[<+>-]+++>++
++++>+>+-++<>-+--

解題路徑

  1. 藉助一個brainfuck的線上直譯器(http://esoteric.sange.fi/brainfuck/impl/interp/i.html),可以很容易的得到左邊的輸出是 xor-with-key
  2. 同樣使用這個線上直譯器,去解析右邊的程式碼,卻得到的是空。
  3. 深入瞭解brainfuck這門語言,發現它用來輸出的關鍵字是 .,但是右邊的程式碼卻沒有 .,即沒有輸出。所以在程式碼的最底下手動加上輸出
.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.

(向右移動再輸出也試過,空的)
得到結果:���AZ�YUS\Fz

  1. 到目前為止,解題陷入困境。
    我們知道了,需要拿右邊的輸出和一個 key 進行異或 xor,但是這個key是什麼呢?
    從頁面上看、從頁面的原始碼看,都沒有找到一個8字元長度的字串。唯一比較像key的是,上面那幅圖裡的這句話Israel-is-70,12個字元。

  2. 繼續
    實際上,右邊的輸出並不是8字元長度的字串,而也是12個字元長度的字串,只是沒有顯示出來!!!
    從下圖看,確實就是8個字元,複製貼上到微信、Sublime等編輯器裡,也都是顯示8個字元。


    641339-a47f7e3439dcef07.png
    image.png

但是,簡書就很厲害了!下圖是貼上到簡書的編輯器裡的效果:


641339-676485e4d360010b.png
image.png

從上圖可以看出,右邊程式碼的輸出確實就是12個字元長度的字串!

  1. 知道了上述的事實,依然不知道空的位置是什麼,那就繼續研究brainfuck的語法,然後人肉解釋執行出來。
    (簡書的強大是剛剛才知道的,當時的想法是,深入瞭解brainfuck,人肉解釋執行。異曲同工)
    這裡有一個brainfuck的視覺化工具,有助於理解brainfuck的執行過程。
    http://top.jobbole.com/36665/
    (其實,也可以通過在程式碼里加上輸出的方式,只是這樣依然無法知道缺失的那4個字元的具體數值)
  2. 通過手動解釋執行的結果為:
    [0x7a, 0x46, 0x5c, 0x53, 0x55, 0x59, 0x03, 0x5a, 0x41, 0x03, 0x06, 0x01]
    注意,要把上述的���AZ�YUS\Fz順序顛倒一下,即zF\SUYZA
    手動解釋執行的過程記錄在這裡:
    2018-06-14 Brainfuck程式手動解釋執行
  3. 再和 Israel-is-70,進行異或,得到結果:
>>> a = [122, 70, 92, 83, 85, 89, 3, 90, 65, 3, 6, 1]
>>> b = list("Israel-is-70")
>>> [chr(a[i] ^ ord(b[i])) for i in range(12)]
['3', '5', '.', '2', '0', '5', '.', '3', '2', '.', '1', '1']

一個IP地址:35.205.32.11

第二個頁面

打不開。。。
這個IP地址估計要翻牆、甚至要模擬地理位置才能開啟吧?

總結

淺嘗輒止總是會付出代價,只有深入去了解,踏踏實實一步一個腳印,才是真正的捷徑。

相關文章