JavaScript代码混淆加密,无论在前端、H5、或是后端,都是被广泛需要的,用于保护JS源码,防止源码被分析、复制、破解、盗用。
本文简单展示部分JS代码混淆加密技术,用于演示对JS代码进行混淆加密的有效性。
本文所述,原理上而言:一段原始JS代码将经历词法分析、语法分析,由代码逆变为AST(抽象语法树),再对AST进行三重混淆加密,最后再将AST重建为代码。
例如,两句JS代码,给变量,赋常量值:
var a = 1234;
console.log("a=",a);
一重保护:
将常量变为运算表达式,结果为:
var a = 602216 ^ 603322;
console.log("a=", a);
运行:
二重保护:
将运算表达式,转为函数调用表达式,结果为:
var a = function (s, h) {
return s ^ h;
}(578586, 577736);
console.log("a=", a);
运行:
三重保护:
对运算表达式加密,用Eval加密,结果为:
var a = function (s, h) {
return eval(String.fromCharCode(115, 32, 94, 32, 104));
}(812440, 811338);
console.log("a=", a);
运行:
相比于最初,代码已经发生了非常大的变化。他人很难明白你原始的代码是什么样的。
即使想要逆向破解,但,仅此一行代码来说,从第三重加密开始逆,逆到到二重、第一重,理论上是可能的。
但实际上,第三者却无法知道原始代码是怎样写的,很可能本身就是第二或第一重加密代码的样子,强行破解,很可能用力过猛返而更无法得到代码原样。
且,此示例仅是一行代码,在实际的情景中,代码有更多,混淆加密应用的方法也更多,比如业界著名的JShaman平台,就具有平展控制流、字符串阵列化、僵尸代码植入等众多JS代码加密手段。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。