
所有文章首發在我的微信公眾號“逆向新手”,更多逆向系列請關注公眾號,謝謝!
聲明:本文只作學習研究,禁止用于非法用途,否則后果自負,如有侵權,請告知刪除,謝謝!
引言
eval混淆,其實就是利用了eval()函數的特性,它跟Python里的eval函數差不多,能把字符串解析成代碼來執行。如:
eval("var text = 123") // 就是在執行括號里的代碼
console.log(text) // 輸出 123
它的還原也很簡單,只需要把 eval 改成 console.log ,然后在瀏覽器的控制臺(Console標簽)輸出,即可還原出源代碼,如下所示:

不過據有些大佬說,碰到過即使改成console.log,也不會顯示出源代碼的eval混淆。反正我是沒碰到,碰到我也不會╮(╯▽╰)╭
接下來正式開始吧~
某市房產信息平臺
目標網站:
aHR0cDovLzYwLjE3My4yNTQuMTI2Lw
訪問網站,隨意點擊一個小區,會跳轉到一個隨機網址,但是在頁面源代碼中,卻看不到該網址信息,只能看到如下所示:

看到這里有個 οnclick=“reurl(this)” ,意思就是“在點擊時”觸發 reurl 函數,那我們就全局搜索(ctrl+shift+F) reurl 這個函數

搜到的第一個文件為頁面代碼,所以很明顯就是第二個文件,進去再搜索(ctrl+F) reurl,看到只有一個結果,是一個eval混淆,那就照著上面說的還原下吧~

果然出來了一個 reurl 函數。不過這里我采用另一種辦法,能夠更快的定位,直接在console控制臺輸入 reurl 回車即可。

如果代碼都在一行,可點擊左下角{}進行美化。接下來就是進入下斷點調試了,點擊前面的行數(即下斷點,數字上會出現藍色標簽),然后隨便點個小區,程序就會停在斷點處(即運行到這一行,但這行還沒運行)。這時候把鼠標放在 a.id 上面可知它就是前面圖【2】頁面上的id值。

先把這段代碼復制到本地js文件中,修改成本地可以運行的樣子,如下:
function reurl(id) {var a = "/item/" + recode(id)return a // 這里的a即為我們要的網址鏈接
};
接著再把鼠標放在 recode 函數上面,點擊上方的鏈接,繼續跳轉到該函數中。

又看到兩個新的函數出現,nscaler 和 SetObjNum,一樣的,復制這段代碼到本地并稍作修改,繼續下斷點,然后按F8,讓程序往下運行,進入函數,扣扣扣就行啦。
某變IP
目標網站:
aHR0cHM6Ly93d3cuYmFpYmlhbmlwLmNvbS9ob21lL2ZyZWUuaHRtbA==
打開F12,刷新網頁,發現需要的數據都在free.html中,但查看網頁源代碼,發現IP字段被加密

一樣可以在控制臺輸入或全局搜索FFcontraceptive(這個名稱會變,根據網頁提供的搜索)。這里采用全局搜索,搜到兩個文件,其中一個為free.html,都是源代碼加密的地方。那明顯在第二個中,打開看下

可以看到這里調用了ddip函數,嘗試打斷點并刷新網頁,發現斷不上。因此在這文件中搜索ddip看下。

總共只能搜索到兩個結果,但是這里看到有個eval,看來又是被混淆了,一樣的套路還原一下。

將還原后的代碼保存到本地,同理將這段eval上面一段的eval還原,得到如下代碼:

我們運行一下ddip函數,發現報錯$未定義。這里可以看到其實是用了base64的decode函數。還是在原來的js文件中搜索decode,可以找到base64就在這個自執行函數中生成

將這段匿名函數整個復制下來,把最后的傳參jQuery改成

這兩個都沒什么難度,對于一些不懂的地方,可以多下斷點,然后鼠標懸停,或復制它到控制臺查看就行了,就是不斷調試的過程。
兩個網站的詳細代碼,均已上傳本人GitHub,可點擊此處跳轉。希望各位先自己練習試一下,不明白的再配合代碼理解哦~
歡迎關注我的微信公眾號“逆向新手”,謝謝!