XCTF的simple_js

打开之后,直接查看源代码,发现一串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";
        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) );

要做这道题就得看懂JS代码表达的意思,首先来了解代码中出现的一些方法

split() 方法用于把一个字符串分割成字符串数组。
fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。
prompt()方法用于显示可提示用户进行输入的对话框。

XCTF的simple_js_第1张图片
了解之后,便可以观察代码了
XCTF的simple_js_第2张图片
这一部分代码分为两个循环,但是仔细观察的话,第一个循环是将前五个Unicode 值,然后返回一个字符串,写一个简单的python脚本验证下
XCTF的simple_js_第3张图片
后一个循环功能是一样的,只不过是把后面的Unicode 值,返回成字符串。
XCTF的simple_js_第4张图片
返回的pass为
即不管我们输入什么,最终显示都是这个,所以这个是假的密码,那么真正的密码应该就是
XCTF的simple_js_第5张图片
再用简单的python跑一下,即可得出flag
XCTF的simple_js_第6张图片

你可能感兴趣的:(十六进制转换文本字符,python脚本,js代码,xctf,web简单题)