天天看點

JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?

JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?

在進行JavaScript代碼混淆加密時,常會用到變量名、函數名混淆加密。

例如以下代碼:

JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?

使用JShaman進行JS代碼混淆加密:

JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?

配置中,不使用全局變量、全局函數加密:

JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?

得到加密代碼如下:

JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?

這時全局變量b,全局函數msg都保留了。保護後的代碼運作正常。

但如果加密時選擇了全局函數和變量加密:

JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?

則加密後的代碼運作會出現異常:

JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?
JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?

運作異常的原因是:JS代碼塊的外部,有click事件代碼,會調用全局變量和函數,如下圖:

JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?

總結而言:

如果代碼中的全局函數、全局變量,在代碼塊或檔案之外的地方有調用或指派。則不可以使用全局變量、全局函數加密。

除此之外,都可以使用全局變量、函數加密。

例如:

JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?
JS代碼加密時,什麼情況下不能使用全局變量、函數名加密?

繼續閱讀