關于JS加密解密那點事打賞

最近和ucd部分的前端開發有合作,可曾想他們發過來組件什么的都是加密處理過的,事實上組件又不完善,很多小的bug都要給他們定位,很是頭疼,果斷解密看看。

很多朋友以為JS的加密是不可逆的,其實常見的eval加密也談不上是加密,只能算是一種編碼(Encode)或者也可以成為是一種打包(packer),類似于base64這樣的編碼,都是可以以一定方式還原的,當然也就是“解密”了。

仔細觀察加密JS,你會發現,大部分文件里面都有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或者console.log,那么明文是不是顯示出來了?答案是肯定的。

對于大多數情況,單獨寫個頁面去解密,有點麻煩了,所以最好寫一個工具頁面專門來對付此類JS,或者頁面也不想寫,只是偶爾想用某個文件,你也可以人為破壞JS,在加密的文件中找到相對關鍵的字符(比如window,jQuery等等),然后改成一個絕對不等效的字符,丟到需要用到該JS的頁面,加載后絕對報錯,打開控制臺(chrome、高版本IE、Firefox都可以),可以看到錯誤信息,點進去查看詳情,復制出錯代碼所在的整段代碼,改回你剛剛更改的關鍵字符,再覆蓋回加密文件。解密成功。

小小經驗,不喜勿噴

關于JS加密解密那點事
文章《關于JS加密解密那點事》二維碼
  • 微信打賞
  • 支付寶打賞

已有5條評論

  1. Wish商戶平臺

    贊一個,學習了

    2016-08-31 23:29 回復
  2. 二先生

    你的博客看起來相當舒服,既來看朋友的博客,當然要留言了。歡迎回訪。

    2014-07-30 14:19 回復
  3. 夏日博客

    原來JS還能加密解密。。

    2014-07-25 14:20 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖