NaNNaNNaNNaN-Batman

NaNNaNNaNNaN-Batman

题目只有一个附件:web100……

打开后是乱码:

image-20210318165620867

_是一个function,后面可以看到eval(_)……

在js中,eval是一个奇怪的函数:

JavaScript eval() 函数

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

……总之就挺奇怪的,计算出乱码……,我找到了GitHub上的官方wp:

1
2
3
4
5
6
7
To see what code gets evaluated, let’s replace theevalat the end withconsole.log. This results in:

_ = 'function $(){\x02e=\x04getEle\x0FById("c").value;\x0Elength==16\x05^be0f23\x01233ac\x01e98aa$\x01c7be9\x07){\x02t\bfl\x03s_a\x03i\x03e}\x06n\ba\x03_h0l\x03n\x06r\bg{\x03e\x03_0\x06i\bit\'\x03_\x03n\x06s=[t,n,r,i];for(\x02o=0;o<13;++o){\t\x0B[0]);\x0B.splice(0,1)}}}\t\'<input id="c"><\f onclick=$()>Ok</\f>\');delete _\x01\x07\x05\x02var \x03","\x04docu\x0F.\x05)\x0Ematch(/\x06"];\x02\x07/)!=null\b=["\t\x04write(\x0Bs[o%4]\fbutton\x0Eif(e.\x0Fment';
for (Y in $ = '\x0F\x0E\f\x0B\t\b\x07\x06\x05\x04\x03\x02\x01')
with (_.split($[Y]))
_ = join(pop());
eval(_);

\x是以16进制表示的字符……js不是很熟悉

把不可预测的eval换成alert正确解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function $() {
var e = document.getElementById("c").value;
if (e.length == 16)
if (e.match(/^be0f23/) != null)
if (e.match(/233ac/) != null)
if (e.match(/e98aa$/) != null)
if (e.match(/c7be9/) != null) {
var t = ["fl", "s_a", "i", "e}"];
var n = ["a", "_h0l", "n"];
var r = ["g{", "e", "_0"];
var i = ["it'", "_", "n"];
var s = [t, n, r, i];
for (var o = 0; o < 13; ++o) {
document.write(s[o % 4][0]);
s[o % 4].splice(0, 1)
}
}
}
document.write('<input id="c"><button onclick=$()>Ok</button>');
delete _

满足条件后计算出flag,条件应该是需要拼接的,计算部分导入控制台出结果:

image-20210318175207495

……

作者

inanb

发布于

2021-03-18

更新于

2021-03-18

许可协议


:D 一言句子获取中...