
JavaScript奇技淫巧:32进制加密
在JavaScript编程中,eval常用于保护隐私、加密代码运行,执行一些不想为他人所知的代码,如常见的eval加密、U加密、JJEncode加密,都是使用eval进行代码执行。
但eval本身字符串是个非常明显的特征,太容易被检索,然后替换成console.log、alert,从而实现逆向、得到eval执行的内容。
是否有方法可以将eval也隐藏起来,使它不那么轻易被发现?
当然有,下面便介绍一种方法:32进制加密。
原理如下:
eval在浏览器中,是window的成员函数;在Node.JS环境中,是global的成员函数。
那么,eval便也可以写为:window.eval、global.eval,或window[“eval”]、global[“eval”]。


也就是将eval变成了字符串的形式。
既然是字符串,就很容易加密了。
例如,“eval”字符串可以成为另一种形式:
(14).toString(32)+(31).toString(32)+(10).toString(32)+(21).toString(32)
添加图片注释,不超过 140 字(可选)
或者,为避免加密后也有统一特征,可以将toString的数值也做改动,如14改为10+1+3等:
window[(10+1+3).toString(32)+(20+1+10).toString(32)+(10).toString(32)+(21).toString(32)]
这是使用toString(进制)方法将一个数字转换为指定进制的字符串表示,在上面的例子代码中,进制是32,这意味着数字会被转换成32进制的字符串。
(14).toString(32):数字14转换为32进制,即 "e"。
(31).toString(32):数字31转换为32进制为 "v"。
(10).toString(32):数字10转换为32进制为 "a"。
(21).toString(32):数字21转换为32进制 "l"。
把他们用加号连接起来,便形成了字符串“eval”。
更多的32进制字符对应关系:
a: (10).toString(32) -> "a"
b: (11).toString(32) -> "b"
c: (12).toString(32) -> "c"
d: (13).toString(32) -> "d"
e: (14).toString(32) -> "e"
f: (15).toString(32) -> "f"
g: (16).toString(32) -> "g"
h: (17).toString(32) -> "h"
i: (18).toString(32) -> "i"
j: (19).toString(32) -> "j"
k: (20).toString(32) -> "k"
l: (21).toString(32) -> "l"
m: (22).toString(32) -> "m"
n: (23).toString(32) -> "n"
o: (24).toString(32) -> "o"
p: (25).toString(32) -> "p"
q: (26).toString(32) -> "q"
r: (27).toString(32) -> "r"
s: (28).toString(32) -> "s"
t: (29).toString(32) -> "t"
u: (30).toString(32) -> "u"
v: (31).toString(32) -> "v"当然,除此之外,还可以用其它的算法,
比如,在浏览器中,base64字符串“ZXZhbA==”用atob解码也可得到“eval”:

扩展的思考,这个方法,除了可用于隐藏eval,当然也可以隐藏其它的方法。比如:
window[(10).toString(32)+(21).toString(32)+(14).toString(32)+(27).toString(32)+atob("dA==")]("jshaman.com");
本文节选自开源电子书《JavaScript奇技淫巧》。
《JavaScript奇技淫巧》下载地址:
https://github.com/w2sft/JavaScript-diabolic-tricks-and-wicked-craft
『奇技淫巧』一词出自古籍《书·泰誓下》,指新奇的技艺和作品。 此词意与本书内容十分契合,因此书名借用该词。本书向您分享一系列新奇、有趣、有技术含量的,特别是很多侧重于代码安全、混淆加密的JavaScript编程技术,十分推荐JavaScript程序员阅读。
本书尚在持续更新中...如您有任何建议或意见,请与我联系。
JavaScript奇技淫巧:防删水印 1
JavaScript奇技淫巧:图片加密 5
JavaScript奇技淫巧:复制陷阱 12
JavaScript奇技淫巧:禁止页面分析 15
JavaScript奇技淫巧:Html加密 17
JavaScript奇技淫巧:隐秘执行 22
JavaScript奇技淫巧:Hook与反Hook 26
JavaScript奇技淫巧:链接劫持 31
JavaScript奇技淫巧:揭秘jjencode 35
JavaScript奇技淫巧:Ajax拦截 40
JavaScript奇技淫巧:无效断点 48
JavaScript奇技淫巧:时间密码 53
JavaScript奇技淫巧:设备指纹 58
JavaScript奇技淫巧:AST解释器 62
JavaScript奇技淫巧:隐写术 70
JavaScript奇技淫巧:隐形字符 77
JavaScript奇技淫巧:数值的7种写法 81
JavaScript奇技淫巧:详解Eval加密 88
JavaScript奇技淫巧:禁止后退 96
JavaScript奇技淫巧:加密反调试 98
JavaScript奇技淫巧:花样赋值 103
JavaScript奇技淫巧:Eval的未公开用法 107
JavaScript奇技淫巧:终极Eval加密 109
JavaScript奇技淫巧:自动下载 112
JavaScript奇技淫巧:防复制 115
JavaScript奇技淫巧:从词法分析到混淆加密 122
JavaScript奇技淫巧:操控URL 131
JavaScript奇技淫巧:彩色命令行 133
JavaScript奇技淫巧:变速齿轮 139
JavaScript奇技淫巧:按键精灵 144
JavaScript奇技淫巧:6种alert 150
JavaScript奇技淫巧:try&catch加密 155
JavaScript奇技淫巧:代码压缩&加密 159
JavaScript奇技淫巧:加密字库 162
JavaScript奇技淫巧:网站防火墙 173
JavaScript奇技淫巧:Lisp 2 JS 177
JavaScript奇技淫巧:混淆加密技术探究 190
JavaScript奇技淫巧:清理无效代码 227
JavaScript奇技淫巧:debugger拦截 229
JavaScript奇技淫巧:执行“二进制”代码 234
JavaScript奇技淫巧:32进制加密 237
等... ... 原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。