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產品、保護知識產權有效方法。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.