JS加密高级技巧:分块加密
JS加密高级技巧:分块加密
如题所示,本文介绍一种JS加密高级技巧:分块加密。
一般情况下,对JS代码进行加密混淆时,是一次性将代码加密,可能是一段JS代码,可能是一整个JS文件。
而在某些情况下,需要加密效果更好、颗粒化更细。
这时便可使用“分块加密“法。即:把整体代码分成多部分,一部分一部分的进行加密,如:按函数进行独立加密。
微信小游戏过审时,使用这种方法效果非常好,通过率很高。
下面通过一个例子演示效果。
注:加密JS代码,演示使用国内知名的JS代码加密工具:JShaman
测试代码:
function a(){
console.log("JShaman");
}
function b(i){
var j=i;
console.log(j)
}
function c(){
var a = " jshaman.com";
var b = " javascript obfuscate";
return a+b;
}
console.log(a(),b(1),c());
一般加密
注:为更清晰展示区别,下面混淆加密时,仅使用“字符串阵列化”这一个功能,关闭了其它混沌加密选项,因此加密强度较低。
加密结果:
var _0x6888ac = ["JShaman", " jshaman.com", " javascript obfuscate"];
function a() {
console.log(_0x6888ac[0]);
}
function b(i) {
var j = i;
console.log(j);
}
function c() {
var a = _0x6888ac[1];
var b = _0x6888ac[2];
return a + b;
}
console.log(a(), b(1), c());
如开启更多加密选项,加密结果如下:
分块加密
加密过程:使用JShaman本地部署专业版,在命令行由脚本调用进行JS代码加密:
加密结果:
var _0x23f3ce = ["JShaman"];
function a() {
console['\x6c\x6f\x67'](_0x23f3ce[0]);
}
function b(i) {
var _ = i;
console['\x6c\x6f\x67'](_);
}
var _0x58d7fa = [" jshaman.com", " javascript obfuscate"];
function c(_, _2) {
return _2 = (_ = _0x58d7fa[0], _0x58d7fa[1]), _ + _2;
}
console.log(a(), b(1), c());
两者的区别是:一般加密,结果中会生成一个大数组。
如果代码量大,字符串很多,比如游戏JS代码通常可达数MB,可能字符串有数万甚至更多,那么这个数组会非常庞大。
重游戏代码提交时,都会对游戏的JS代码进行混淆加密。
而过审都会检测这个大数组特征,因此这是过审失败的重要原因。
而分块加密,则不会出现这样的大数组,而是分割成许多小数组。
此外,混淆生成的随机变量名,也有很大差别,一次性加密,生成的多是不重复的多个变量,而分块加密时,则会在不同的函数中生成同名的局部变量。
这仅是为演示区别而做的少量加密选项结果对比,当启用更多混淆加密选项时,两者的差异更大。
即使不用于游戏过审,仅是为JS代码安全性而言,使用分块加密,加密效果也好于一次性加密,因此,很推荐使用这种方法。