本文作者:ZiCh
本文連結:https://www.cnblogs.com/zichliang/p/17138431.html
版權宣告:未經作者允許嚴禁轉載
目標網站
aHR0cDovL3d3dy50bm1nLmNvbS5jbi9pbmZvcm1hdGlvbi9pbmZvX3h3enguYXNweD9jbGFzc2lkPTMx
分析
此網站根據cookie加密 如cookie無效則返回 412 有點像某數。
根據抓包分析 可知 這個
Cookie: ASP.NET_SessionId=irftqluvfywztp3nhmfqsgab; ASP.NET_SessionId_NS_Sig=oenCV6mdwHx26gTo; eFKuN5wtW89D006=K7vHE8llNk_GHoH63eOhtYf6Tr3vg0boafQPv9qOVyQRtO6M6rtkgWprfZrRt11Vr_OchRw__wmXgj2B9B70eMsA6XWIrwQ4BmwLUu23eXBog
這些cookie 是我們所傳的引數。
定位函式入口
根據hook 確定 cookie加密的未知
然後我們一步一步追棧進入
這部分就是函式入口,我們在控制呼叫函式看看
由此可見 這就是cookie生成的入口了
耐心扣程式碼
本文來自:來自: https://www.cnblogs.com/zichliang/
我們找到了cookie生成的位置 接下來就是慢慢扣程式碼了
函式R\(ih()和R\)ff.R$aK();由我們多次試驗可知 這是一個定值(如果不確定呼叫函式也行 這兩個函式扣起來比較簡單。)
所以我們可以改寫一下
var R$aZ = 'eFKuN5wtW89D006'
var R$jZ = "K"
var R$ma = R$lA(); // 32位隨機數
var R$jy = R$jn(); // 16位隨機數
var R$fX = R$ke(); // 43位隨機數
var R$gQ = R$jZ + R$jP(R$jy["concat"](R$jt(R$fX, R$ma)));
接下里就是扣這三個陣列隨機數了
R$lA()
由此可見這是cookey
但是生成的地方我們暫時不知道
所以我們可以先扣其他地方 這個地方暫時寫死好了
R$jn();
同理 這個隨機數也是一樣的。
R$ke();
然後我們扣這個函式
這裡有個坑
在扣R$lr();這個函式的時候,我們會發現很多selenium webdriver
這種情況要偽裝的引數太多了,而且往裡面越扣就越多,索性我們直接寫死寫成個定值
反正也只是一大堆環境檢測。
其他順著慢慢扣就好了。
執行JS
本文來自:來自: https://www.cnblogs.com/zichliang/
然後我們執行我們的JS
發現可以執行。
我們放到Python中執行,發現還是不行。
解決伺服器動態生成問題。
那肯定是我們剛剛寫的定值不對。唯一值得懷疑的點 就是那個"cookieKey"還有"blackBlock"
但是這兩個值怎麼追棧都找不到,
所以我們反覆hook
會發現有有些值可能是伺服器生成的。
所以我們只要找到這個函式入口函式即可。
實驗多次,我們找到了這個函式。
然後我們只要把這個cookieKey 和 blackBlock提取出來即可。
我們後續只需要
用正則把這個值提取出來就能正常爬取了。
執行驗證
可以正常執行~~
本文作者:ZiCh
本文連結:https://www.cnblogs.com/zichliang/p/17138431.html
版權宣告:未經作者允許嚴禁轉載