利用YUI compressor將JavaScript與html一起混淆
用JS+HTML寫的程式,在釋出時一般都需要進行混淆以保護程式碼。最近剛好遇到類似問題,就在網上找了幾個混淆工具來測試。其中我覺得效果最好的應該是jasob,能同時混淆HTML、CSS和JS,混淆完後真是所有內容都沒眼看,效果著實不錯,不過這傢伙要收費,一個開發就要130美刀,我的程式不是大工程,顯然不值得花這個錢了。另外有一個叫Javascript Obfuscator的也不錯,不過它也收費,同時也不支援同時混淆HTML。這中間還找到一個號稱能把HTML加密成JS指令碼的,但其實簡單除錯一下就能把指令碼執行結果解出來,沒什麼用處。最後決定還是用YUI這個免費的Compressor。
YUI Compressor的下載和使用可參考其主頁地址:
下面是YUI混淆前後的對比:
混淆前:
混淆後壓縮成了一行,但主要函式名和變數名仍能一眼看出來:
用格式化工具格式化一下就更明顯了:
為了解決這個問題,我又發揚了自己動手的折騰傳統,寫了一個程式來配置YUI Compressor,查詢專案下所有HTML和JS中的全域性函式和變數名,查詢可通過正則表示式進行,先對這些函式名和全域性變數名進行隨機替換,替換完成後再用YUI進行混淆,達到了較好的混淆效果。
執行替換後,區域性變數名還在,但函式名和全域性變數名已經很難看了:
再用YUI混淆後格式化,就連區域性變數都沒有了:
這個就基本上已經看不出什麼道道來了,增強了YUI混淆的效果。因為我們同時替換了所有HTML和JS,因此我們並不擔心函式和全域性變數被其它地方引用了。實現原理較簡單,大家可以試試。這個工具目前還比較簡陋難用,暫時就不放出來了,以後有空再整理下。