日常||特殊的JavaScript——JSfuck

日常||特殊的JavaScript——JSfuck

闲来无事,记录一下最近接触的事物。在某CTF网站中突然看到了一串由“!” ,“+”, “ []”, “()” 组成的代码,思来想去就学习了一下。
基本规则(base):
false => ![]
true => !![]
undefined => [][[]]
NaN => +[![]]
0 => +[]
1 => +!+[]
2 => !+[]+!+[]
10 => [+!+[]]+[+[]]
Array => []
Number => +[]
String => []+[]
Boolean => ![]
Function => [][“filter”]
eval => [][“filter”][“constructor”]( 代码)()
window => [][“filter”][“constructor”](“return this”)()
官网上称为(base)为什么我称为基本规则呢,因为,我认为jsfuck只能满足以下格式的情况下才能被正确的识别。当然也有可能有自己的加解密方式,我们不去细谈,以官方为例。
这个时候可能有同学要问了,为什么上面的base还有单词,和我看到的全符号的不一样呢?这就涉及到了当初设计这个jsfuck的作者的想法了。首先在base下面的前12个,我们都是可以看到是能完全用符号代替的,作者巧妙的利用了数组表示形式,如:
Function => [][“filter”]中filter怎么表示。
如上所示:false => ![]
所以我们通过数组的思维方式,可以知道
f = false[0] = (![]+[])[+[]]
a=false[1]=(![]+[])[+!+[]]
l=false[2]=(![]+[])[!+[]+!+[]]
s=false[3]=(![]+[])[!+[]+!+[]+!+[]]

依次类推,但这样我们会发现,上述的字符再怎么替换也凑不够26个字符,根据github上作者的源代码描述后,发现作者还使用了一个字符转数字的函数在字符外加[]可以把相应的字符转化为数字,再通过ascll表的对应关系,表示其他的字符。
总结:jsfuck采用了多重替换的方式来加密代码,一段程序可由多种排列不同的“[”“]”“(”“)”“!”“+”6个字符组成。
参考:github:https://github.com/aemkei/jsfuck
csdn:https://blog.csdn.net/qq_36539075/article/details/79946099
讲的都挺详细的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值