今天給你分享一下篇反反爬的例項。
一個思路,也許給你帶來些許啟發..
也許你會遇到這樣的情況:
開啟某個網站,可以看到頁面是正常顯示的,但是當你透過 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實現:
完美!撒花