如何解决这个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)+"}");
}
}
答案 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+"}");
}
}
这对我来说就像是一些非常糟糕的程序员写的(有人不了解课程)或者这是某种代码挑战?
至于会通过这件事的事情,我完全不知道。
我建议一行一行地把它从这里的信息中找出来。
希望这有帮助