了解jsfuck原理及举例 - SEO优化技巧

7 min read

JSFuck是一种基于JavaScript的编码语言,它可以将任意js代码转换成只使用六个字符([ ] ( ) ! +)的代码。 这听起来很不可思议,但是通过利用JavaScript的强大特性,JSFuck可以在不使用任何其他字符的情况下生成完整的JavaScript代码。该语言的主要思想是使用各种算术和比较运算符来构建更复杂的操作。

下面举一个例子来说明它的原理:

假设我们有一个简单的JavaScript函数

function helloWorld() {
  console.log("Hello, World!");
}

在JSFuck中,我们可以使用以下代码来表示它:

[]            + [] + 
(![] + [] + [])[+!+[]]  + 
([] + [] + ![])[+[]] + 
(![] + [] + [] + [] + [])[(+[] << +[]) + +!+[]] + 
([] + [] + [] + [] + [] + [])[+!+[] + [+!+[]]]

这些看起来可能很难理解,但是我们可以通过分解每个片段来进行解释。这是我们如何生成以上代码:

  • 首先,我们使用两个空数组([] + [])来生成空字符串。
  • 接下来,我们使用“! []”(非空数组的布尔值为false)和两个空字符串将字符串“true”生成成一个数组[(![] + [] + [])[+!+[]]]
  • 我们使用“[] + [] + ![]”来生成字符串“false”,然后使用(+ [])将其转换为数字0。接下来,我们使用“+[]”将其转换回字符串“0”,并使用(+[+[]])将其转换为数字1,最后使用“[+[]]”将其放回字符串中([] + [] + ![])[+[]])。
  • 我们使用“! [] + [] + [] + [] + []”将字符串“[object Array]”生成为表达式。接下来,我们使用一些数学运算来访问正确的字符并将其添加到代码中。具体而言,“+ []”将“0”转换回数字,并使用“<<”运算将其左移零位(即没有移位),最后使用+!+[](值为1),我们访问字符“2”的位置(即第三个字符),并将其添加到代码中。 ((+[] << +[]) + +!+[]]))
  • 最后,我们使用“[] + [] + [] + [] + [] + []”来生成字符串“[object Object]”,并使用一些数学运算来访问正确的字符并将其添加到代码中。具体而言,我们使用此代码[(+!+[] + [+!+[]])]将数字“2”和数字“1”相加,将其转换为数字“3”,将其用作索引,访问字符串“j”,并将其添加到代码中。

总的来说,JSFuck的原理是,通过利用强制转换和各种运算符,可以使用极少量的字符来编写复杂的JavaScript代码。