隨著ajax的流行,大家一下子明白過來,原來js能夠完成這麼強大的功能,然後就是JS代碼原來越複雜,js檔案體積越來越大,同樣也增加了安全隱患。
現在網上比較普遍的流行一些代碼混淆和代碼壓縮公用程式:
JSConfusion 代碼混淆工具,本人做的
Javascript compressor 代碼壓縮公用程式,提供了一種特有的壓縮演算法對JS的代碼進行減肥,也是我看到較早的一個工具,現在經常和JSConfusion結合去使用(當然是先混淆後壓縮)
JSObfuscator 集混淆/壓縮一體的工具,雖然功能比較多,但在壓縮的時候效果不是很好,經過我測試會有時壓縮過的代碼不能運行
這些是見過的比較好的幾個工具,如果你還見過哪些不錯功能類似的工具,可以在後面補充~~~~
大家應該都知道這樣一個理論:加密可以反加密,而混淆卻無法反混淆.
混
淆也可以叫顛倒是非、混淆黑白,無非就是去掉縮排、空格、空行和注釋,改表代碼中的非保留字為簡單的字母、符號、亂碼什麼的,這樣做只是為了加大代碼的閱
讀難度,提高閱讀成本,所以反混淆只有根據你對JS的瞭解程度去進行變數/方法/屬性/類的替換。當然代碼少你到是可以這樣做,如果代碼很多(可以看這個
混淆後的項目),你就會知道什麼叫 "生氣、憤怒、瘋狂、哭笑不得"
上面為基礎知識,下面進行正題:
alert("Welcome idoall.org");
被壓縮過以後是下面的樣子:
eval(function(p,a,c,k,e,d){e=function(c){return
c};if(!''.replace(/^/,String)){while(c--)d[ c]=k[
c]||c;k=[function(e){return d[
e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[ c])p=p.replace(new
RegExp('\\b'+e(c)+'\\b','g'),k[ c]);return p}('3("2
1.0");',4,4,'org|idoall|Welcome|alert'.split('|'),0,{}))
那麼我們如何從壓縮過的代碼中提取出原文?
不管她會壓縮混淆成什麼樣子,最終都是要被瀏覽器認可,解析,執行的。我們可以跟蹤代碼的運行,會發現最關鍵的位置在這裡.....p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k);return p
這裡的變數 p 就是用來儲存最終後的代碼,我們可以在返回 p 的前面將值輸出,就會得到alert("Welcome idoall.org");
本文的目的是回答一位網友的問題,順便提供相關的思路,有助於大家的思考