首頁>技術>

今天給你分享一下篇反反爬的例項。

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

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

開啟某個網站,可以看到頁面是正常顯示的,但是當你透過 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實現:

完美!撒花

12
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 如何有效的學習一本Python技術書籍?