主要是本地使用node
的解法,代码量大的时候用chrome调试台,电脑受不了。
github地址
https://github.com/aemkei/jsfuck
本地编码jsfuck
用浏览器编码挺卡的,但是浏览器编码支持“Eval Source”甚至“ Run In Parent Scope”模式,本地使用node默认是不支持的,默认是只编码成字符串。
比如这个链接是支持以上两种模式的。
本地编码是运行FUCK.js
,跟进浏览器调用的函数,我们可以定位到以下两句
1 | var script = lib.JSFuck.encode(chunk.toString()); |
改为
1 | var script = lib.JSFuck.encode(chunk.toString(), true, true); |
就可以了。
然后执行fuck.js
的话,控制台写入js代码,就会输出对应的编码串。
解码jsfuck
上面说了有三种格式,字符串
,Eval Source
,Run In Parent Scope
。
字符串没什么好说的。
Eval Source
删除最后的小括号()
,改为toString()
,删除最前面的方括号[]
(这里也可以不删,无关紧要),然后整个用console.log
包起来,用node运行就可以了。
删除最前面的[]
之后代码是原来的代码,像这样
1 | var flag="flag{f_f_l_u_a_c_g_k}";alert('flag is not here'); |
不删的话是解析器格式化后的,多了一层包裹而已,类似下面这样
1 | function anonymous() { |
Run In Parent Scope + Eval Source
两者都勾选了的话,删除编码串里第一个()
及之前的所有代码,然后用console.log
包起来,用node运行就可以了。