日期:2025/04/06 21:47来源:未知 人气:52
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)
或者,为避免加密后也有统一特征,可以将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==");
本文节选自开源电子书《JavaScript奇技淫巧》。
https://github.com/w2sft/JavaScript-diabolic-tricks-and-wicked-craft
《JavaScript奇技淫巧》又名:《JavaScript-diabolic-tricks-and-wicked-craft》
『奇技淫巧』一词出自古籍《书·泰誓下》,指新奇的技艺和作品。 此词意与本书内容十分契合,因此书名借用该词。本书向您分享一系列新奇、有趣、有技术含量的,特别是很多侧重于代码安全、混淆加密的JavaScript编程技术,十分推荐JavaScript程序员阅读。
本书尚在持续更新中...如您有任何建议或意见,请与我联系。
JavaScript奇技淫巧:防删水印 1JavaScript奇技淫巧:图片加密 5JavaScript奇技淫巧:复制陷阱 12JavaScript奇技淫巧:禁止页面分析 15JavaScript奇技淫巧:Html加密 17JavaScript奇技淫巧:隐秘执行 22JavaScript奇技淫巧:Hook与反Hook 26JavaScript奇技淫巧:链接劫持 31JavaScript奇技淫巧:揭秘jjencode 35JavaScript奇技淫巧:Ajax拦截 40JavaScript奇技淫巧:无效断点 48JavaScript奇技淫巧:时间密码 53JavaScript奇技淫巧:设备指纹 58JavaScript奇技淫巧:AST解释器 62JavaScript奇技淫巧:隐写术
70JavaScript奇技淫巧:隐形字符 77JavaScript奇技淫巧:数值的7种写法 81JavaScript奇技淫巧:详解Eval加密 88JavaScript奇技淫巧:禁止后退 96JavaScript奇技淫巧:加密反调试 98JavaScript奇技淫巧:花样赋值 103JavaScript奇技淫巧:Eval的未公开用法 107JavaScript奇技淫巧:终极Eval加密 109JavaScript奇技淫巧:自动下载 112JavaScript奇技淫巧:防复制 115JavaScript奇技淫巧:从词法分析
到混淆加密 122JavaScript奇技淫巧:操控URL 131JavaScript奇技淫巧:彩色命令行 133JavaScript奇技淫巧:变速齿轮 139JavaScript奇技淫巧:按键精灵
144JavaScript奇技淫巧:6种alert 150JavaScript奇技淫巧:try&catch加密 155JavaScript奇技淫巧:代码压缩&加密 159JavaScript奇技淫巧:加密字库 162JavaScript奇技淫巧:网站防火墙 173JavaScript奇技淫巧:Lisp 2 JS 177JavaScript奇技淫巧:混淆加密技术
探究 190JavaScript奇技淫巧:清理无效代码 227JavaScript奇技淫巧:debugger拦截 229JavaScript奇技淫巧:执行“二进制”代码 234JavaScript奇技淫巧:32进制加密 237等... ...