2018 Mossad Challenge

2018-06-14  本文已影响22人  四火流年

2018 Mossad挑战,目的是招聘。

以下来自百度百科 - Mossad

摩萨德(Mossad),全称为以色列情报和特殊使命局(The Institute for Intelligence and Special Operations),由以色列军方于1948年建立,以大胆、激进、诡秘称著于世。与美国中央情报局苏联国家安全委员会英国军情六处,并称为“世界四大情报组织”。自从成立以来,摩萨德进行了多次让世界震动的成功行动。它的成功,成为世界情报史上的传奇。

第一个页面

https://www.r-u-ready.xyz
初始页面就是下面这张图,可以判断处高亮的字符实则是 brainfuck 编码。

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个字符。


    image.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地址估计要翻墙、甚至要模拟地理位置才能打开吧?

总结

浅尝辄止总是会付出代价,只有深入去了解,踏踏实实一步一个脚印,才是真正的捷径。

上一篇下一篇

猜你喜欢

热点阅读