關於js加密解密


有的時候有些網站的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,那么明文是不是顯示出來了?剛開始講到的代碼可以變成這樣:

檢查 JavaScript 代碼並執行。
eval(codeString)
必選項 codestring 參數是包含有效 JavaScript 代碼的字符串值。這個字符串將由 JavaScript 分析器進行分析和執行。

很好,原文已經顯示出來了,我們可以喝口水了,不過這樣也不是很方便的哎,所以我專門寫了個在線eval解密解碼unpack的工具,大家可以訪問這里來使用,哦,對了,針對多層編碼的情況,我這里主要是判斷開頭eval實現的,另外還加入腳本格式化功能,便於解碼后代碼的閱讀。(據網友反映:該在線工具目前在IE9和最新版FF6下工作正常,其他瀏覽器可能會有問題。不過我會盡快調查以解決該問題!)

以上參考內容出自http://wangye.org/blog/archives/225/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM