图29:

文章插图
二进制表达式转为调用表达式即BinaryExpression节点转为CallExpression 。
先看效果:
图30,左侧为二进制表达式,右侧为调用表达式:

文章插图
二进制表达式AST形式:

文章插图
实现代码:
图31:

文章插图
调用表达式AST形式:
图32:

文章插图
代码中的这部分,即是将二进制表达式转化为调用表达式:
图33:

文章插图
布尔型常量值混淆代码及效果如下图:
图34:

文章插图
数值混淆代码及效果如下图:
图35:

文章插图
JS代码混淆加密,虽不至博大精深,但也属于高段位技术 。
在此分享部分浅显方案,以展现其实用效果,用于说明混淆加密手段对于JS代码加固的有效性 。此外,还有更多高端的防护手段,如JShaman应用的:平展控制流、时间限制、域名锁定、僵尸代码植入等 。
图36、JShaman的JS代码保护配置功能:

文章插图
防逆向措施:检测与对抗 。对JS代码进行混淆加密之后,代码安全度得到相当的加强,但还能更进一步,为了防止不法者进行逆向分析、破解,可在代码中加入防破解对抗功能 。这也是被JShaman应用的方案 。
- 无限断点 。
图37、每100毫秒一个断点:

文章插图
浏览器中执行效果如下,当打开“调试器”时,程序会不停的中断,导致无法跟踪代码:
图38:

文章插图
时间差检测 。代码及执行效果如下图所示:
图39:

文章插图
检测原理是:
在代码中加入console.log输出和console.clear语句,未在调试工具中时,这两句代码执行是不需渲染显示的,执行耗时短,但假如在浏览器中打开了开发者工具,则会因为显示输出并清除的操作而消耗较多时间,这会被程序察觉出耗时异常,从而检测出是在被调试 。
专业的混淆加密:JShaman本文讲述了部分JS代码混淆加密技术及实现,更多更专业的防护方案未有尽述,这里再展示一段经JShaman保护的代码,领略专业级的JS代码安全 。
图40、测试代码准备进行混淆加密:

文章插图
图41、保护选项设置:

文章插图
图42、混淆加密后的JS代码:

文章插图
彩蛋:字节码加密技术 。提示:JS字节码(ByteCode)加密技术,理论可行,但通用性较差,在此仅做技术介绍,不推荐做为项目或产品正式使用方案 。
- 字节码生成
图43:

文章插图
关键处是cachedData,即字节码 。
- 运行字节码
代码如下,如同创建字节码一样简单 。
图44:

文章插图
推荐阅读
- windows服务器安全配置篇
- API 的5 身份验证安全隐患
- 0xc00000f4蓝屏代码是什么意思?
- PHP+NGINX服务器性能安全优化
- SCRM的私域运营管理之路
- 想了解低代码?不妨从这四款开源低代码工具开始
- 能让IT程序员告别996的低代码,究竟是风口还是革命?
- 买电脑、硬件安全下车必须要做的操作,奸商绝不会告诉你
- 五款css布局工具,大大减少你写代码的时间
- 滑雪安全事项有哪些
