今天給你分享一下篇反反爬的執行個體。
一個思路,也許給你帶來些許啟發..
也許你會遇到這樣的情況:
打開某個網站,可以看到頁面是正常顯示的,但是當你通過 Python 去請求的時候,你會得到一堆無厘頭的 JS..
像這樣的操作,應該怎麼玩呢?
接下來由【小帥b的朋友:lin】給大家示範一下。
當你使用 requests 請求某網站的時候,得到的是這樣的:

這時候就要看看是不是用啥了,是不是協定頭問題呢?
通過不斷的測試 最終确定是 cookie 中 acwsc_v2 的問題。
那不就好辦了,我們使用一個hook:
這段 hook 有倆種使用方式:一是油猴、二是fd插件。看各位的喜好啦!
打上 hook,打開 F12 調試器,重新整理網頁,先是遇到了我們熟悉的無限 debugger:
正常的做法是在 debugger 一行左邊右鍵選擇 never pause here:
接着 F8 放行斷點就行了
如果沒有斷下來,先清除cookie在重新整理網頁:
很快就能看到 cookie 被 hook 下來了。
接着在 call stack 往上找:
到 reload 這裡看到 x 是我們需要的值:
接着可以觀察到原來是在 settimeout 裡面做了操作:
是以我們所需要分析的邏輯就變為了:
var _0x23a392 = arg1[_0x55f3('0x19', '\x50\x67\x35\x34')]();
arg2 = _0x23a392[_0x55f3('0x1b', '\x7a\x35\x4f\x26')](_0x5e8b26);
不懂的人會看不懂這種混淆代碼,其實這是一種 ob 混淆,可以看到很多函數名變量名基本被混淆了的。
但是不用慌 我們可以通過 AST 的方法或者硬剛的方法來解決:
可以看到隻需要把解密函數的代碼圈起來就能拿到解密後的值,我們就可以按照這個來分析改寫了。
這裡使用了arg1:
arg1就在頁面上層能找到:
然後整個圈起來:
扣和改就行了,工作量不會很大:
還原改寫後運作試試看,會看到報一個錯,缺少提示的變量,那我們就去 js 裡面找這個值:
找到這一段值補上即可,通過幾次重新整理嘗試,發現這段值是固定的,是以可以寫死。
補完後運作:
發現和網頁計算的一模一樣,那我們這個值就正确啦。
最後我們用python實作: