JavaScript加密:Eval的終極用法
Eval加密的終極用法
Eval加密,做為一種傳統(tǒng)且古老的JS代碼加密方法,相信很多人都知道。
例如這個在線Eval加密:
https://www.fairysoftware.com/js_jia_mi_eval.html
但這種Eval加密,其實并不能算真正的加密,只能算一種編碼,可以被很容易的逆向得到原始代碼。
但本文要介紹的,并非這種Eval加密。
而是借助Eval,并結合專業(yè)JS混淆加密所實現(xiàn)的,用這個方法加密得到的JS代碼,安全強度非常高。
下面,進行演示:
例如一段JS代碼:
function get_copyright(){
? ? var domain = "jshaman.com";
? ? var from_year = 2017;
? ? var copyright = "(c)" + from_year + "-" + (new Date).getFullYear() + "," + domain;
? ? return copyright;
}
console.log(get_copyright());
用jshaman(https://www.jshaman.com/)進行混淆加密:

得到如下加密代碼:

如上圖所示,雖然加密后的代碼已經非常混亂。
但如果希望console、函數名也“消失”,則可以借且eval。
將原始代碼改造成以下形式:
var str = `
function get_copyright(){
? ? var domain = "jshaman.com";
? ? var from_year = 2017;
? ? var copyright = "(c)" + from_year + "-" + (new Date).getFullYear() + "," + domain;
? ? return copyright;
}
console.log(get_copyright());
`
eval(str)
說明:將原來的代碼整體做為字符串都包裹在了eval中執(zhí)行。
再對上面的代碼進行混淆加密:

加密生成了新的代碼:

在新生成的代碼中,console、函數名,都找不到了,原始代碼的線索徹底消失。
因為在用JShaman混淆加密時,把原始代碼整體當做字符串加密了,原本代碼中的語法關鍵字、系統(tǒng)變量、函數名等等,全被加密了。
通常來說,直接用JShaman加密得到的JS代碼,已可滿足99%的需求。但如果遇到特別的場合、加密強度要求的極高,那么,可以用本文講述的方法,對JS代碼改造再進行混淆加密。但需注意:轉成字符串的代碼量不可太大。