天天看點

爬蟲傳回一堆JS怎麼辦?

今天給你分享一下篇反反爬的執行個體。

一個思路,也許給你帶來些許啟發..

也許你會遇到這樣的情況:

打開某個網站,可以看到頁面是正常顯示的,但是當你通過 Python 去請求的時候,你會得到一堆無厘頭的 JS..

像這樣的操作,應該怎麼玩呢?

接下來由【小帥b的朋友:lin】給大家示範一下。

當你使用 requests 請求某網站的時候,得到的是這樣的:

爬蟲傳回一堆JS怎麼辦?

這時候就要看看是不是用啥了,是不是協定頭問題呢?

爬蟲傳回一堆JS怎麼辦?

通過不斷的測試 最終确定是 cookie 中 acwsc_v2 的問題。

那不就好辦了,我們使用一個hook:

爬蟲傳回一堆JS怎麼辦?

這段 hook 有倆種使用方式:一是油猴、二是fd插件。看各位的喜好啦!

打上 hook,打開 F12 調試器,重新整理網頁,先是遇到了我們熟悉的無限 debugger:

爬蟲傳回一堆JS怎麼辦?

正常的做法是在 debugger 一行左邊右鍵選擇 never pause here:

爬蟲傳回一堆JS怎麼辦?

接着 F8 放行斷點就行了

如果沒有斷下來,先清除cookie在重新整理網頁:

爬蟲傳回一堆JS怎麼辦?

很快就能看到 cookie 被 hook 下來了。

接着在 call stack 往上找:

爬蟲傳回一堆JS怎麼辦?

到 reload 這裡看到 x 是我們需要的值:

爬蟲傳回一堆JS怎麼辦?

接着可以觀察到原來是在 settimeout 裡面做了操作:

爬蟲傳回一堆JS怎麼辦?

是以我們所需要分析的邏輯就變為了:

var _0x23a392 = arg1[_0x55f3('0x19', '\x50\x67\x35\x34')]();

arg2 = _0x23a392[_0x55f3('0x1b', '\x7a\x35\x4f\x26')](_0x5e8b26);

不懂的人會看不懂這種混淆代碼,其實這是一種 ob 混淆,可以看到很多函數名變量名基本被混淆了的。

但是不用慌 我們可以通過 AST 的方法或者硬剛的方法來解決:

爬蟲傳回一堆JS怎麼辦?

可以看到隻需要把解密函數的代碼圈起來就能拿到解密後的值,我們就可以按照這個來分析改寫了。

這裡使用了arg1:

爬蟲傳回一堆JS怎麼辦?

arg1就在頁面上層能找到:

爬蟲傳回一堆JS怎麼辦?

然後整個圈起來:

爬蟲傳回一堆JS怎麼辦?

扣和改就行了,工作量不會很大:

爬蟲傳回一堆JS怎麼辦?

還原改寫後運作試試看,會看到報一個錯,缺少提示的變量,那我們就去 js 裡面找這個值:

爬蟲傳回一堆JS怎麼辦?

找到這一段值補上即可,通過幾次重新整理嘗試,發現這段值是固定的,是以可以寫死。

爬蟲傳回一堆JS怎麼辦?

補完後運作:

爬蟲傳回一堆JS怎麼辦?

發現和網頁計算的一模一樣,那我們這個值就正确啦。

爬蟲傳回一堆JS怎麼辦?

最後我們用python實作:

爬蟲傳回一堆JS怎麼辦?