使用eval的fromCharCode方法對js代碼加殼
在JavaScript中,使用eval函數(shù)可以將字符串作為代碼來執(zhí)行。這個特性可以被用來對JavaScript代碼進(jìn)行加殼以增加代碼的安全性和保護(hù)知識產(chǎn)權(quán)。
其中一個常用的方法是通過String.fromCharCode方法來創(chuàng)建一系列的ASCII字符,并將其拼接成一個包含加密代碼的字符串。然后再通過eval函數(shù)執(zhí)行這個字符串以解密代碼。
下面是一個示例代碼:
// 定義一個加密函數(shù),將字符串轉(zhuǎn)換為 ASCII 碼,并加上指定的偏移量
function encrypt(code, offset) {
return code.split('')
.map(c => String.fromCharCode(c.charCodeAt(0) + offset))
.join('');
}
// 定義一個解密函數(shù),將加密過的字符串轉(zhuǎn)換回原始的 JavaScript 代碼
function decrypt(code, offset) {
return code.split('')
.map(c => String.fromCharCode(c.charCodeAt(0) - offset))
.join('');
}
// 加密 JavaScript 代碼
let originalCode = 'console.log("Hello, World!");';
console.log(originalCode);
let encryptedCode = encrypt(originalCode, 10);
console.log(encryptedCode);
// 執(zhí)行加密后的 JavaScript 代碼
eval(decrypt(encryptedCode, 10));
這個例子中,encrypt函數(shù)將傳入的字符串轉(zhuǎn)換成 ASCII 碼,并用逗號分隔返回。decrypt函數(shù)接收一個由逗號分隔的 ASCII 碼字符串,將其解析為數(shù)字?jǐn)?shù)組,再使用fromCharCode方法將每個數(shù)字轉(zhuǎn)換成字符,最終返回原始字符串。
在主程序中,我們首先調(diào)用encrypt函數(shù)將"Hello, World!"加密成 ASCII 碼字符串,然后使用eval將其作為參數(shù)傳給fromCharCode方法,完成解密過程,輸出"Hello, World!",從而實現(xiàn)了對代碼的加殼。
Eval加殼是簡單的對js代碼保護(hù)的方法,如果有重要的項目js代碼需要保護(hù),建議用專業(yè)的JS代碼混淆加密工具,比如JShaman。JShaman是一個正規(guī)JS代碼加密平臺,使用簡單方便,無需注冊帳號,只需復(fù)制粘貼,即可實現(xiàn)對JS代碼混淆加密,可用于前后端JS代碼保護(hù)、H5、小程序JS代碼加固。