打开题目地址,查看源码,发现head里藏了一段js代码,于是考下来研究研究
function dechiffre(pass_enc)
{
var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65"; //0-17
var tab = pass_enc.split(',');
var tab2 = pass.split(',');
var i,j,k,l=0,m,n,o,p = "";
i = 0;
j = tab.length;
k = j + (l) + (n=0);
n = tab2.length;
for(i = (o=0); i < (k = j = n); i++ )
{
o = tab[i-l];
p += String.fromCharCode((o = tab2[i]));
if(i == 5)
break;
}
for(i = (o=0); i < (k = j = n); i++ )
{
o = tab[i-l];
if(i > 5 && i < k-1)
p += String.fromCharCode((o = tab2[i]));
}
p += String.fromCharCode(tab2[17]);
pass = p;
return pass;
}
String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));
h = window.prompt('Enter password');
alert( dechiffre(h) );
代码的功能很简单,就是把一串用逗号分隔的数字按ascii转成字符串,然后输出
总之我在读代码时是一脸懵逼的,首先声明了好几个没有使用的变量,其次那两个for循环根本就没必要,一个for就够了,最重要的是,输入的内容并没有被处理,也就是说输出和我们的输入没有关系
所以我们需要对代码进行修改,将for循环内的
p += String.fromCharCode((o = tab2[i]));
改成
p += String.fromCharCode((o = tab[i]));
这样就能处理输入的内容
然后发现在代码尾部有这样一段
"\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"
是十六进制的ascii码,把它放到python里面转成字符
是一段用逗号分隔的数字,很明显是需要输入到是上面的dechiffre()函数里面转码成字符
把之前修改好的js代码插入到HTML中