云游戏?!

预备步骤:得到游戏页面

方法一:用 wireshark 导入包,导出里面的 data 为一个压缩包。

方法二:直接 binwalk,发现压缩包,用压缩软件直接尝试解压。

然后解压的压缩包为一个文件夹,里面有小恐龙游戏页面。

打开之后,可以浏览代码或与 chrome 原版小恐龙游戏进行代码比较,可以看到一些关键的运算:

// Line 678
// try to gain reward, the constant part of the reward is 2.4657676475
X -= 0.1* this.config.ACCELERATION * (4 * PARAM_A * X * X * X - 3 * PARAM_B * X * X);

在脚本中找到这些常数的值:

ACCELERATION: 0.1
var PARAM_A = 0.943745363;
var PARAM_B = 2.895467371;
var X = 5.0;

可以发现这是一个单变量的梯度下降公式,我们知道梯度下降实质上是:

loop: x -= rate * d(f(x))/dx

其中 rate 是下降的速率,积分 d(f(x))/dx 并加上提示中的常数:

f(x) = PARAM_A * (x ** 4) - PARAM_B * (x ** 3) + 2.4657676475

运行这个梯度下降的过程(可以自己写代码,注意设好学习速率 0.01,太大或太小都可能得不到预期的答案,也可以注释掉小恐龙游戏的游戏结束判断,并在控制台中输出 x 的值),待 x 稳定后得到:

x = 2.3010449782539832

f\(x\) = -6.353530137073035

flag 即为 flag{63535301}

results matching ""

    No results matching ""