We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Learn more about funding links in repositories.
Report abuse
There was an error while loading. Please reload this page.
第119天 你对jsfuck有了解吗?它的原理是什么?请举例说明
真要解释我也解释不来,大概是这么个思路:
[] 这是数组字面量
[]
逻辑非(取反)操作符会将所有东西转成 boolean:
boolean
![]
!![]
+X 正号将所有东西转成 number;
+X
number
X+[] 这个实际上执行了 X.toString() + [].toString(),相当于直接给 X toString 了;
X+[]
X.toString() + [].toString()
[][+[]] 要获得 undefined 可以访问数组里不存在的元素,这里访问 0 就行;
[][+[]]
undefined
0
然后就可以获得 true,false,undefined 字符形式里的字符了:
true
false
![]+[] // 'false' !![]+[] // 'true' [][+[]]+[] // 'undefined'
然后随便选一个可以访问的函数(注意这里说“可以访问“,因为我们得到的字符还不完全),我们就可以获得更多字符,这里选用 Array.prototype.find:
Array.prototype.find
[][...从 undefined 中拆出来 'find']+[] // => 'function find() { [ native code ] }'
并且可以获得 Function 构造器,这使得我们可以执行任何字符串形式的代码:
Function
[][...从 undefined 中拆出来 'find'][...从各处拆出来 'constructor'] // => function Function() { [ native code ] } [] [...从 undefined 中拆出来 'find'] [...从各处拆出来 'constructor'] (...字符串形式的代码) () // 这可以执行这段字符串形式的代码
还有一堆依赖废弃方法等等的 hack,我看着有点恶心,就不讲了
能不能用一句话说下 到底是干嘛用的
之前好像看过一点,反正这种代码可读性很差;简言之,JSFuck就是用[、]、(、)、! 和 +这六个字符完成JS代码。
JSFuck
[
]
(
)
!
+
JS
这个东西转换出来就不是为了给人直接读的,算是一种js代码的混淆加密方法。但是转换出来代码量太大,真要应用也只能挑一些核心代码进行加密。
大佬们是不是都这么写的
Activity
ghost commentedon Aug 13, 2019
真要解释我也解释不来,大概是这么个思路:
[]
这是数组字面量逻辑非(取反)操作符会将所有东西转成
boolean
:![]
false!![]
true+X
正号将所有东西转成number
;X+[]
这个实际上执行了X.toString() + [].toString()
,相当于直接给 X toString 了;[][+[]]
要获得undefined
可以访问数组里不存在的元素,这里访问0
就行;然后就可以获得
true
,false
,undefined
字符形式里的字符了:然后随便选一个可以访问的函数(注意这里说“可以访问“,因为我们得到的字符还不完全),我们就可以获得更多字符,这里选用
Array.prototype.find
:并且可以获得
Function
构造器,这使得我们可以执行任何字符串形式的代码:还有一堆依赖废弃方法等等的 hack,我看着有点恶心,就不讲了
mwangshuxin commentedon Aug 13, 2019
能不能用一句话说下 到底是干嘛用的
xxf1996 commentedon Aug 13, 2019
之前好像看过一点,反正这种代码可读性很差;简言之,
JSFuck
就是用[
、]
、(
、)
、!
和+
这六个字符完成JS
代码。EmiyaYang commentedon Aug 13, 2019
这个东西转换出来就不是为了给人直接读的,算是一种js代码的混淆加密方法。但是转换出来代码量太大,真要应用也只能挑一些核心代码进行加密。
jamsehua commentedon Jan 17, 2021
大佬们是不是都这么写的