网站首页 > java教程 正文
JS加密,即JavaScript代码加密混淆,是指对js代码进行数据加密、逻辑混淆。
使js代码不能被分析、复制、盗用,以达到保护js代码、保护js产品、保护js知识产权的目的。
JS加密定义
JS加密,即:JavaScript代码加密混淆、JavaScript代码混淆加密。
JavaScript,简称JS,加密指对JS代码进行密文化处理,使代码难以阅读和理解。
JS代码是公开透明的代码,无论在前端网页环境或是后端NodeJS中,都是如此。JS加密操作通过技术手段对JS代码中的数据进行加密、对代码逻辑进行混淆,使代码无法被阅读和理解,从而达到保护代码的目标。
JS加密原理
专业的JS加密工具,会进行以下步骤实现加密过程。
1、JS代码转化为AST
AST即抽象语法树,是JS代码的底层表现形式,在此阶段,JS代码会经历词法分析、语法分析,直到AST树建立。
2、对AST节点进行加密操作
JS代码的AST节点有各种不同的类型,如数值节点、变量名节点、字符串节点等。JS加密的核心操作是对这些节点进行加密处理。
3、将AST重构为JS代码
对AST节点加密后,将AST重构为JS、重新生成JS代码。经历这三个大的步骤,即完成了JS加密。
JS加密特点
JS代码加密,有多种技术手段,大体上可分为:编码、加密算法、代码变形、逻辑变化。
常见的可选加密选项有:变量名混淆、函数名混淆、类名混淆、数值加密、字符串加密、字符串阵列化、平展控制流、AST执行保护、虚拟机执行、赋值花指令、僵尸代码植入等。
JS加密应用
JS加密应用,有不少工具,最具代表性的两款是JScrambler和JShaman,在行业中都是著名产品、是业内顶级的JavaScript混淆工具。
产品形态
两者都是网站平台形式,在浏览器中打开就能使用。
接口
都有Web API接口,JavaScript、Python、Java、c#等语言都可以调用,可以集成在自己的产品中使用。
操作便捷性
JScrambler使用较复杂,需要注册帐户、登录进入后台才能使用,JShaman则方便很多,无需注册、直接使用。
功能选项
两者都有20多项混淆功能可使用。
加密示例
下面以对一段代码加密为例,演示两者的加密效果。
例程:
function displayNoteTitle(note) {
alert(note['title']);
}
var flowerNote = {};
flowerNote['title'] = "Flowers";
displayNoteTitle(flowerNote);
JShaman加密结果:
var _0xcb07 = ['title', 'Flowers'];
(function(_0xecc7fb, _0xdfa845) {
var _0x3b37f1 = function(_0x663ded) {
while (--_0x663ded) {
_0xecc7fb['\x70\x75\x73\x68'](_0xecc7fb['\x73\x68\x69\x66\x74']());
}
};
_0x3b37f1(++_0xdfa845);
}(_0xcb07, 0x11c));
var _0x7cb0 = function(_0x108ec8, _0x507f5d) {
_0x108ec8 = _0x108ec8 - 0x0;
var _0x586c42 = _0xcb07[_0x108ec8];
return _0x586c42;
};
function displayNoteTitle(_0x23cbc1) {
alert(_0x23cbc1[_0x7cb0('0x0')]);
}
var flowerNote = {};
flowerNote[_0x7cb0('0x0')] = _0x7cb0('0x1');
displayNoteTitle(flowerNote);
JScrambler加密结果:
var g5b = {
'S': "A",
'A': function(b) {
flowerNote['title'] = b;
},
'X': "V",
'o': (function(E) {
return (function(s, p) {
return (function(G) {
return {
K: G
};
})(function(m) {
var c, R = 0;
for (var U = s; Ry;
})(parseInt, Date, (function(n) {
return ('' + n)["substring"](1, (n + '')["length"] - 1);
})('_getTime2'), function(n, a) {
return new n()[a]();
}), function(m, R) {
var d = parseInt(m["charAt"](R), 16)["toString"](2);
return d["charAt"](d["length"] - 1);
});
})('3lrno3f7c'), 'e': 'title', 'V': function(b) {
x = b;
}, 'Q': "Flowers",
};
function displayNoteTitle(b) {
alert(b[g5b.e]);
}
var flowerNote = g5b.o.K("3d3") ? {} : "Flowers"; g5b[g5b.S](g5b.Q);
displayNoteTitle(flowerNote);
g5b[g5b.X](g5b.D);
总结
JS加密是保护JS代码的有效手段,是提升JS代码安全性、保护JS产品、保护知识产权有效方法。
猜你喜欢
- 2024-11-08 Java 程序员排行前 10 的错误,你有没有中?
- 2024-11-08 常见面试题之java系列(面试题目java)
- 2024-11-08 Android混淆相关(apk混淆)
- 2024-11-08 Java零基础知识必备「分层概念」(java分层领域模型 太麻烦)
- 2024-11-08 Java面试题分享(java面试题精选)
- 2024-11-08 Java开发必会的反编译知识(附支持对Lambda进行反编译的工具)
- 2024-11-08 Java一键授权方案 离线授权 日期授权 代码授权 代码混淆
- 2024-11-08 Java 基础 - 类与对象(java中类和对象)
- 2024-11-08 Java开发者易犯错误Top10(java: 错误: 不支持发行版本 7)
- 2024-11-08 终于有人把Java内存区域说清楚了(不是内存模型,不要再混淆了)
你 发表评论:
欢迎- 05-23Java线程池:核心参数与最佳实践
- 05-23深入理解 Java 的线程池原理
- 05-23面试突击34:如何使用线程池执行定时任务?
- 05-23Java线程池核心参数调优指南:掌控并发世界的钥匙
- 05-23Java线程池:优雅管理并发任务的艺术
- 05-23一篇文章快速搞懂Java中常用的四种线程池
- 05-23Java线程池工作原理深度解读:从创建到任务执行的全过程
- 05-23一文看懂:Java线程池任务拒绝机制解析
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)