flag{java3cr1qtG3}
打开网页出现如下图片:
如果弹球没被拦截,则判定游戏失败;
经检查,游戏失败并未发送数据包,并且cookie之类的没有隐藏flag,猜测是通过后本地显示flag,查找网页源代码,看看能不能找到通关游戏的代码:
点进game.js,发现gameover函数:
接着又发现_f__()函数中设定了一串数字,后面又用fillText填充,猜测这就是flag:
接下来尝试翻译下面这段数字:
var _f_s1 = [5*10+g.state_GAMEOVER,60,49,5*10+g.state_UPDATE,75,58,49,70,49,3,51,66,1,65,68,23,g.state_STOP,77] for ( var i = 0,l = 18; i < l; i++ ){g.string+=String.fromCharCode(_f_s1[i]+g.state_STRING)} this.context.fillText(g.string, 308, 226)
通过前面的代码可知:
state: 1, state_START: 1, state_RUNNING: 2, state_STOP: 3, state_GAMEOVER: 4, state_UPDATE: 5, state_STRING:48,
所以:
5*10+g.state_GAMEOVER=54
5*10+g.state_UPDATE=55
g.state_STOP=3
而这一串数字则是54,60,49,55,75,58,49,70,49,3,51,66,1,65,68,23,3,77
后面还将这一串数字增加g.state_STRING=48
g.string+=String.fromCharCode(_f_s1[i]+g.state_STRING)
所以这一串数字还需要加上48,猜测是ASCALL码,尝试编写python代码并将这一串数字输出:
具体代码如下:
a = [54, 60, 49, 55, 75, 58, 49, 70, 49, 3, 51, 66, 1, 65, 68, 23, 3, 77]
for i in a:
k = i + 48
print(chr(k), end='')
运行输出:
得到flag:
flag{java3cr1qtG3}