如何解析被壓縮過的Js檔案?eval(function(p,a,c,k,e,d){…..,{}))

來源:互聯網
上載者:User

隨著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");

本文的目的是回答一位網友的問題,順便提供相關的思路,有助於大家的思考

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.