jother 给你代码你也很难看懂的代码
【前提】
在javascript中,若
s='abcdefg';则
s[0]=a;s[1]=b;s[2]=c;s[3]=d;s[4]=e;s[5]=f;s[6]=g;
浏览器的脚本解释引擎在脚本出现异常时会返回特定字符,既保留字,通过上面的方法取得这些保留字就可以得到一些字母了。
【规则】
1. 值为true的表达式前面加+这个符号就变为1;
2. 偶数个~相当于没有,奇数个相当于一个,是当前值加1后取反;
3. +[]相当于连字符,用以把数字连接在一起而不是运算;
4. ()同样可以区分运算的优先级,括号内先于括号外;
【保留字】
[]=空//相当于''
~[]=-1
![]=false
!![]=true
!+[]=true
+[]=0或字符连接符
+!![]=1=+!+[]
!+[]+!![]=2=!![]+!![]
!+[]+!![]+!![]=3=!![]+!![]+!![]
!+[]+!![]+!![]+!![]=4=!![]+!![]+!![]+!![]
!+[]+!![]+!![]+!![]+!![]=5=!![]+!![]+!![]+!![]+!![]
!+[]+!![]+!![]+!![]+!![]+!![]=6=!![]+!![]+!![]+!![]+!![]+!![]
!+[]+!![]+!![]+!![]+!![]+!![]+!![]=7=!![]+!![]+!![]+!![]+!![]+!![]+!![]
!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]=8=!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]
!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]=9=!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]
(~[]+[])[+[]]=-
![]=false
(![]+[])[+[]]=f
(![]+[])[+!![]]=a
(![]+[])[!![]+!![]]=l
(![]+[])[!![]+!![]+!![]]=s
(![]+[])[!![]+!![]+!![]+!![]]=e
!![]=true
(!![]+[])[+[]]=t
(!![]+[])[+!![]]=r
(!![]+[])[!![]+!![]]=u
(!![]+[])[!![]+!![]+!![]]=e
{}=[object Object]
({}+[])[+[]]=[
({}+[])[+!![]]=o
({}+[])[!![]+!![]]=b
({}+[])[!![]+!![]+!![]]=j
({}+[])[!![]+!![]+!![]+!![]]=e
({}+[])[!![]+!![]+!![]+!![]+!![]]=c
({}+[])[!![]+!![]+!![]+!![]+!![]+!![]]=t
({}+[])[!![]+!![]+!![]+!![]+!![]+!![]+!![]]=空格
({}+[])[!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]]=O
({}+[])[!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]]=b
...
({}+[])[(!+[]+!![]+!![]+!![])*(!+[]+!![]+!![]+!![])+~!![]]=]
+{}=NaN
(+{}+[])[+!![]+[]]=a=(+{}+[])[+!![]]
(+{}+[])[+[]]=N=(+{}+[])[!![]+!![]]
(+!![])/(+[])=Infinity
((+!![])/(+[])+[])[+[]]=I
((+!![])/(+[])+[])[+!![]]=n
((+!![])/(+[])+[])[!![]+!![]]=f
((+!![])/(+[])+[])[!![]+!![]+!![]]=i
((+!![])/(+[])+[])[!![]+!![]+!![]+!![]]=n
((+!![])/(+[])+[])[!![]+!![]+!![]+!![]+!![]]=i
((+!![])/(+[])+[])[!![]+!![]+!![]+!![]+!![]+!![]]=t
((+!![])/(+[])+[])[!![]+!![]+!![]+!![]+!![]+!![]+!![]]=y
{}[[]]=undefined
({}[[]]+[])[+[]]=u
({}[[]]+[])[+!![]]=n
({}[[]]+[])[!![]+!![]]=d
({}[[]]+[])[!![]+!![]+!![]]=e
({}[[]]+[])[!![]+!![]+!![]+!![]]=f
({}[[]]+[])[!![]+!![]+!![]+!![]+!![]]=i
({}[[]]+[])[!![]+!![]+!![]+!![]+!![]+!![]]=n
({}[[]]+[])[!![]+!![]+!![]+!![]+!![]+!![]+!![]]=e
({}[[]]+[])[!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]]=d
【函数】
通过上面的字母,可以组合出sort和constructor两个字母,而
[]['sort']['constructor']('函数')();
是匿名函数的原生模式,这样,只要找到别的一些字母就可以像正常脚本一样构造函数了。但这样的保留字有限,然而发现
[]['sort']['constructor']('return location')();可以返回当前的url地址,如果是在线的话则会得到“http(s)://”这些字母,本地则是“file://”、“chrome://”、“mx://”等浏览器自定义的协议。得到字母“p”则可以组合出escape和unescape,这样用
[]['sort']['constructor']('return escape')();
[]['sort']['constructor']('return unescape')();就可以进行编码得到其他所有字符了。