攻防世界——simple_js

 题目描述:小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )

标题js,查看源码

<html>
<head>
    <title>JS</title>
    <script type="text/javascript">
    function dechiffre(pass_enc){      #定义了一个函数dechiffre
        var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";    #定义pass
        var tab  = pass_enc.split(',');   #以不限制个数的方式用","隔开并转换为数组     
                var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;   #与上面同理转换后赋给tab2;用var定义一些变量,以tab的长度定义j的值,即11
                        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');  #弹出password输入框,并赋值给h
    alert( dechiffre(h) );   #弹出上面循环转换出的字符,因为上面的return pass

</script>
</head>

</html>

梳理一遍,我们可以得知中间那一大串循环的作用就是将数组的值作为十进制转为ASCII,结果为FAUX PASSWORD HAHA。但是pass_enc只在最初起了作用,而这个结果也不是我们要的,那么答案就极有可能在最下面的那一长串里。

将其16进制转换为10进制后,再将其转为ASCII后得到答案786OsErtk12

相关函数

(1)split() 方法用于把一个字符串分割成字符串数组
语法:string.split(separator,limit)
参数                 描述
separator        可选。字符串或正则表达式,从该参数指定的地方分割 string Object。比如此题以逗号分割成字符串数组
limit            可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
举例:str="a,b,c,d,e,f,g";
var 1st = str.split(",",3);   对str以逗号进行分割,分割后的字符串数组内的值最多只能有3个,结果就是1st = [a,b,c]
 
(2)for 循环的语法如下:
for (语句 1; 语句 2; 语句 3) {
    要执行的代码块
}
语句 1 在循环(代码块)开始之前执行。
语句 2 定义运行循环(代码块)的条件。
语句 3 会在循环(代码块)每次被执行后执行。
 
(3)fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。
语法:String.fromCharCode(n1, n2, ..., nX)
参数                 描述
n1, n2, ..., nX     必需。一个或多个 Unicode 值,即要创建的字符串中的字符的 Unicode 编码。
 
(4)prompt()方法用于显示可提示用户进行输入的对话框。
这个方法返回用户输入的字符串
语法:prompt(msg,defaultText)
参数                描述
msg                可选。要在对话框中显示的纯文本(而不是 HTML 格式的文本)就是弹框显示文本。
defaultText        可选。默认的输入文本,你输入什么弹框一开始出现里面的输入框就会默认显示你这个文本。
 
(5)var i,j,k,l=0,m,n,o,p = "";
这个表示声明变量i,j,k,l,m,n,o,p,只有l和p两个变量被赋值了,其它的变量都是不带值的,不带有值的变量,它的值将是undefined,后续代码中可以给它赋值。
 
(6)length
length 属性可设置或返回数组中元素的数目。


————————————————
版权声明:本文为CSDN博主「HEAVM」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/HEAVEN569/article/details/114809128

这是一个博主写的,我觉得整理得很好。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值