有的時候有些網站的js用簡單的eval混淆加密了.解密其實很簡單的瀏覽器
解密JS的eval加密碼的方式
例如這段:函數
不少朋友覺得這段代碼是「加密」的,其實這也談不上是加密,只能算是一種編碼(Encode)或者也能夠成爲是一種打包(packer),相似於base64這樣的編碼,都是能夠以必定方式還原的,固然也就是「解密」了。工具
咱們仔細分析這一段代碼,不難發現代碼開頭都是eval,特徵字符串是function(p,a,c,k,e,r)或者是function(p,a,c,k,e,d),其實這樣的pack方式是dean edwards提出的,網站
你能夠訪問其我的主頁以獲取這方面的最新信息。後來還有一些編碼打包方式也是eval開頭,可是特徵字符串p,a,c,k,e,r(d)改變了,咱們姑且稱爲是這種打包方式的一個變種吧,其實解碼很簡單,咱們回顧一下JavaScript腳本中eval含義及用法。編碼
其實就是調用JavaScript分析解釋器處理有效的js腳本字符串,注意我這裏提到的是字符串,有點相似於ASP的Execute方法。好,既然eval執行的字符串,那麼function(p,a,c,k,e,r)函數確定返回的是字符串,到底是什麼內容呢?你猜對了,就是咱們要解碼的源代碼,其實function(p,a,c,k,e,r)至關因而個自解碼函數,返回的就是解碼好的源代碼,而後傳遞給eval,那麼這段解碼後的字符串腳本就執行了。加密
到這裏,突破點就有了,那就是function(p,a,c,k,e,r)這樣的自解碼函數,咱們要獲取其返回的字符串,怎麼辦?很簡單,替換eval函數就能夠了,好比替換成alert或者document.write,那麼明文是否是顯示出來了?剛開始講到的代碼能夠變成這樣:spa
檢查 JavaScript 代碼並執行。
eval(codeString)
必選項 codestring 參數是包含有效 JavaScript 代碼的字符串值。這個字符串將由 JavaScript 分析器進行分析和執行。code
很好,原文已經顯示出來了,咱們能夠喝口水了,不過這樣也不是很方便的哎,因此我專門寫了個在線eval解密解碼unpack的工具,你們能夠訪問這裏來使用,哦,對了,針對多層編碼的狀況,我這裏主要是判斷開頭eval實現的,另外還加入腳本格式化功能,便於解碼後代碼的閱讀。(據網友反映:該在線工具目前在IE9和最新版FF6下工做正常,其餘瀏覽器可能會有問題。不過我會盡快調查以解決該問題!)blog
以上參考內容出自http://wangye.org/blog/archives/225/ip