# JS加密進階技巧:分塊加密
非常适用微信小遊戲過審的JS代碼加密方法
如題所示,本文介紹一種JS加密進階技巧:分塊加密。
一般情況下,對JS代碼進行加密混淆時,是一次性将代碼加密,可能是一段JS代碼,可能是一整個JS檔案。
而在某些情況下,需要加密效果更好、顆粒化更細。
這時便可使用“分塊加密“法。即:把整體代碼分成多部分,一部分一部分的進行加密,如:按函數進行獨立加密。
微信小遊戲過審時,使用這種方法效果非常好,通過率很高。
下面通過一個例子示範效果。
注:加密JS代碼,示範使用國内知名的JS代碼加密工具:JShaman
js加密平台:JShaman.com
測試代碼:
function a(){
console.log("JShaman");
}
function b(i){
var j=i;
console.log(j)
}
function c(){
var a = " http://jshaman.com";
var b = " javascript obfuscate";
return a+b;
}
console.log(a(),b(1),c());
一般加密
注:為更清晰展示差別,下面混淆加密時,僅使用“字元串陣列化”這一個功能,關閉了其它混沌加密選項,是以加密強度較低。
加密結果:
var _0x6888ac = ["JShaman", " http://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 = [" http://jshaman.com", " javascript obfuscate"];
function c(_, _2) {
return _2 = (_ = _0x58d7fa[0], _0x58d7fa[1]), _ + _2;
}
console.log(a(), b(1), c());
兩者的差別是:一般加密,結果中會生成一個大數組。
如果代碼量大,字元串很多,比如遊戲JS代碼通常可達數MB,可能字元串有數萬甚至更多,那麼這個數組會非常龐大。
重遊戲代碼送出時,都會對遊戲的JS代碼進行混淆加密。
而過審都會檢測這個大數組特征,是以這是過審失敗的重要原因。
而分塊加密,則不會出現這樣的大數組,而是分割成許多小數組。
此外,混淆生成的随機變量名,也有很大差别,一次性加密,生成的多是不重複的多個變量,而分塊加密時,則會在不同的函數中生成同名的局部變量。
這僅是為示範差別而做的少量加密選項結果對比,當啟用更多混淆加密選項時,兩者的差異更大。
即使不用于遊戲過審,僅是為JS代碼安全性而言,使用分塊加密,加密效果也好于一次性加密,是以,很推薦使用這種方法。