另类javascript 纯字符操作

本文介绍了一种利用JavaScript特殊字符和保留字构造函数的方法,包括如何获取基本字符、数字及保留字,并进一步构建出如Function、Array等关键对象。

转自:http://tmxk.org/thread-637-1-1.html

在作比赛的时候,发现有一段js代码,很是奇特,然后搜到了它的原理,就留此转载算是纪念下吧。

Ps:执行js,可以用chrome浏览器,按F12,出来框框后选择Console,把js代码贴进去就好了。。

【前提】

在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

【形成函数】
通过上面方法得到的有
数字,空格,"-","[", "]", "a", "b", "c", "d", "e", "f", "i", "j", "l", "n", "N", "o", "O", "r", "s", "t"和"u"
国外黑客的思路是通过现有的字母构造出function等保留字,然后通过alert(location)获得http://中的p和/字符,这样就能通过escape和unescape函数构造出所有的字母,按照javascript的语法形成一套体系。
既:

Function=array["sort"]["constructor"]
Array=array["constructor"]
Bolean=false["constructor"]
Number=0["constructor"]
Object = {}["constructor"]
String = string["constructor"]
Function.prototype.call=f["call"]
String.prototype.concat=string["concat"]
Array.prototype.join=array["join"]
Array.prototype.slice=array["slice"]
Array.prototype.sort=array["sort"]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值