天天看點

JS加密進階技巧:分塊加密

# JS加密進階技巧:分塊加密

非常适用微信小遊戲過審的JS代碼加密方法

如題所示,本文介紹一種JS加密進階技巧:分塊加密。

一般情況下,對JS代碼進行加密混淆時,是一次性将代碼加密,可能是一段JS代碼,可能是一整個JS檔案。

而在某些情況下,需要加密效果更好、顆粒化更細。

這時便可使用“分塊加密“法。即:把整體代碼分成多部分,一部分一部分的進行加密,如:按函數進行獨立加密。

微信小遊戲過審時,使用這種方法效果非常好,通過率很高。

下面通過一個例子示範效果。

注:加密JS代碼,示範使用國内知名的JS代碼加密工具:JShaman

JS加密進階技巧:分塊加密

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代碼安全性而言,使用分塊加密,加密效果也好于一次性加密,是以,很推薦使用這種方法。

繼續閱讀