如何解决这个js if语句

时间:2018-01-27 16:52:02

标签: javascript arrays hex

如何解决这个if语句为true并显示警告? 我不明白什么意思是0x4,0x3,0x05 什么意思?以及如何显示警告

的解决方法

var Ft32A = [
    function (x,y) {return x+y},
    function (x,y) {return x-y},
    function (x,y) {return x/y},
    function (x,y) {return x*y},
    function (x,y) {return x==y},
    function (x,y) {return (y)}
];
function login() {
    var psw = password.value;
    if(
        Ft32A[0x4](psw.length,10)&&
        Ft32A[0x4](Ft32A[0x1](psw.charAt(0x01),psw.charAt(0x2)),0)&&
        Ft32A[0x4]((psw.charAt(6)),Math.abs(Ft32A[0x1](10,11)))&&
        psw.split("_")[1].startsWith(String.fromCharCode(78))&&
        Ft32A[0x4](Ft32A[3](psw.charAt(1),4),0)&&
        Ft32A[0x4](psw.split('_').length,2)&&
        psw.split('_')[0].charAt(psw.split('_')[0].length-1)=="DADADADA".charAt(2) &&
        Ft32A[0x3](psw.charCodeAt(psw.length-1),3)==348 &&
        Ft32A[1](psw.charCodeAt(8),psw.charCodeAt(7))==1 &&
        (Ft32A[0](psw.charCodeAt(8),psw.charCodeAt(7))-1)/2==103 &&
        psw.startsWith("G")
    ) {
        alert("Flag:{"+Ft32A[0x05]("",password.value)+"}");
    }
}

3 个答案:

答案 0 :(得分:1)

Ft32A是一个包含6个函数数组的变量。

var Ft32A = [
    function (x,y) {return x+y},
    function (x,y) {return x-y},
    function (x,y) {return x/y},
    function (x,y) {return x*y},
    function (x,y) {return x==y},
    function (x,y) {return (y)}
];

执行第一个"插槽"中包含的功能你可以打电话:

Ft32A[0](5, 10); // first function: function (x,y) {return x+y}

其中Ft32A[0]是第一个元素(包含函数function (x,y) {return x+y}),后跟(5, 10),它是函数需要的参数,在本例中是2个数字。

您还可以使用hexadecimal notation引用第一个函数:

Ft32A[0x0](5, 10);

第五个:

Ft32A[0x4](5, 10); // fifth function: function (x,y) {return x==y}

if语句只是执行一些函数,每次传递不同的值。返回的所有值必须为true才能验证if条件。

因此,您必须找到通过所有这些测试时的字符串值,验证if条件。

答案 1 :(得分:1)

这很简单,代码只是告诉你哪个位置是哪个角色。

让我们逐行浏览

Ft32A[0x4](psw.length,10) // The password has 10 digits 
-> ??????????
Ft32A[0x4](Ft32A[0x1](psw.charAt(0x01),psw.charAt(0x2)),0) // Digit 1 and 2 are the same  
-> ?11???????
Ft32A[0x4]((psw.charAt(6)),Math.abs(Ft32A[0x1](10,11))) // Digit 6 is a 1 
-> ?11???1???
psw.split("_")[1].startsWith(String.fromCharCode(78)) //Password has a "_", right part starts with an N
-> ?11?_N1???
 Ft32A[0x4](Ft32A[3](psw.charAt(1),4),0 // Digit 1 times 4 is 0
-> ?00?_N1???
Ft32A[0x4](psw.split('_').length,2) // Contains only 1 _
-> ?00?_N1???
psw.split('_')[0].charAt(psw.split('_')[0].length-1)=="DADADADA".charAt(2) //The last digit before the _ is a D
-> ?00D_N1???
 Ft32A[0x3](psw.charCodeAt(psw.length-1),3)==348 //The last digit is a "t"
-> ?00D_N1??t
 Ft32A[1](psw.charCodeAt(8),psw.charCodeAt(7))==1 // Digit 8 - Digit 7 is one
-> ?00D_N1ABt
Ft32A[0](psw.charCodeAt(8),psw.charCodeAt(7))-1)/2==103 //Digit 8 and 7 are h and g
-> ?00D_N1ght
psw.startsWith("G") //Password starts with a G
-> G00D_N1ght

标志是

  

标记:{G00D_N1ght}

答案 2 :(得分:0)

好吧这就像罪恶一样丑陋......但是让我们逐行调试:

console.log(0x4);

给我答案4这意味着,这很奇怪,让我想知道为什么我们这样做。

Ft32A[0x4](psw.length,10)

所以这将给我数组Ft32A

的第五个索引
function (x,y) {return x==y}

所以让我们“简化”这个

function login() {
var psw = password.value;
if( 
    psw.length == 10 &&
    ((psw.charAt(0x01) - psw.charAt(0x2)) == 0) &&
    ((psw.charAt(6)) == Math.abs((10 - 11))) &&
    psw.split("_")[1].startsWith(String.fromCharCode(78)) &&
    ((psw.charAt(1) * 4) == 0) &&
    (psw.split('_').length == 2)&&
    psw.split('_')[0].charAt(psw.split('_')[0].length-1) == "DADADADA".charAt(2) &&
    (psw.charCodeAt(psw.length-1) * 3) == 348 &&
    (psw.charCodeAt(8) - psw.charCodeAt(7)) == 1 &&
    ((psw.charCodeAt(8) + psw.charCodeAt(7)) - 1) / 2 == 103 &&
    psw.startsWith("G"))
    {
        alert("Flag:{"+password.value+"}");
    }

}

这对我来说就像是一些非常糟糕的程序员写的(有人不了解课程)或者这是某种代码挑战?

至于会通过这件事的事情,我完全不知道。

我建议一行一行地把它从这里的信息中找出来。

希望这有帮助