本文章中所有內容僅供學習交流,抓包內容、敏感網址、資料介面均已做脫敏處理,嚴禁用於商業用途和非法用途,否則由此產生的一切後果均與作者無關,若有侵權,請聯絡我立即刪除!
目標網站:aHR0cHM6Ly93d3cudG91dGlhby5jb20v
資料介面:aHR0cHM6Ly93d3cudG91dGlhby5jb20vYXBpL3BjL2xpc3QvZmVlZD9vZmZzZXQ9MCZjaGFubmVsX2lkPTk0MzQ5NTQ5Mzk1Jm1heF9iZWhvdF90aW1lPTAmY2F0ZWdvcnk9cGNfcHJvZmlsZV9jaGFubmVsJmRpc2FibGVfcmF3X2RhdGE9dHJ1ZSZhaWQ9MjQmYXBwX25hbWU9dG91dGlhb193ZWI=
這個網站的的封包有點多,為了更好的篩選,所以我們這裡使用charles去抓包,也為了更加清楚的展示。因為charles的包 是分網站的
抓到了如下的包,我們挨個看下 首先我們看看第一個請求
果然是這個封包,
然後我們看看這個的請求引數 如下圖所示
可以看到除了 | channel_id | _signature 除了這兩個引數,其他值好像都是定值。
為了確保玩意,我們再抓包一次。
哦吼,我們對比一下 發現好像只有 _signature 不太一樣。
第一次:
| channel_id | 94349549395 |
| _signature | _02B4Z6wo00f01z9d1bwAAIDCyiI.IkUKHQM.edEAAKt.NqUmn4ygAiOSxwaKaigCOeg56Ff89u.9vP6b6ub68vuKs2N8MHE1ooq3YQAYT9luKwEo58Z5CbtbU8m9.KvQ5zIywt7.ZVQByMpff7 |
第二次
| channel_id | 94349549395 |
| _signature | _02B4Z6wo00f01NpipegAAIDBLx1PdBeQ8LjaRqFAAFJAobBdiGXrf3fs2SKPrZr3jjY4vZP3kG7vB7l1w4C5LnkJNONZ-driqsx4S8hbVV4x8o4bjxJqi6BYxnSX9CGLBfcQe.nfmtpz8dZ57e |
這個值每次都不一樣,所以我們可以大膽猜測 這個值就是我們所需要的值。
我們直接開始去搜尋 _signature 這個值
剛好發現第一個地點 就很像引數生成的地方,我們在這裡打上斷點。然後再搜尋一下_signature
這個值
這裡還有個值,我們也打上斷點。
發現這個值雖然對了 ,但是好像傳的引數不是我們所要的那個連結啊
我們繼續往下走,跳過非我們所需的介面 也就是看看 F.getUri(e)
這個值。
在跳過三個請求後 終於找到我們所需要的這個介面了
我們接下里就逐步進棧。然後一直追。這個時候要有些耐心。
在經過幾層跳站,終於找到了 引數生成的地點,這個a.call(n, o) 就是生成簽名的地方。
我們可以看到 這個o 是個物件,裡面是存放的url鍵值對。
而這個n 應該就是函數,我們把這個n摳出來,應該就大功告成了。
接上一段。
我們打上斷點再逐步進棧。
然後發現進到了acrawler.js 這個檔案裡面。我們簡單過一下這個檔案。發現這是個自執行函數啊。那我們直接全部複製下來補環境是不是就ok了。
我們試一試哈。
這裡複製下來。會發現後面執行的引數很長,很影響觀感。pycharm 設定一下js換行。
如上圖設定即可。
我們在下面執行這句話。為什麼是這句話呢。我們跳到外面這個棧去看看
window.byted_acrawler.sign({
"url":"http://localhost:8080"
})
然後執行。這個時候會報錯
這個時候就奇怪了。這個地方怎麼會報錯呢。我們列印一下282行這個值看看。
分別列印下 S[R]
R
A
你就全懂了。尤其是是列印 A
這不就是妥妥的環境檢測嗎
我們給他補上
window = global;
window.document = {
referrer: ''
}
然後我們再次執行,發現還是不行 會報找不到sign這個值
那這就奇怪了,我們放到瀏覽器環境上執行下看看
發現在瀏覽器上流程執行,那就只有一種可能了,就是環境沒補好。有些環境檢測過不去。
我們把斷點打在這個地方,這就是底下傳參的地方
經過不斷的 debugger 測試,將下圖的兩句話 改成 undefined
改好之後還會報一個錯 ,我們再補上
由於這個location裡面東西也不是很多,我們就全補上了
window.location = {
"ancestorOrigins": {},
"href": "https://www.toutiao.com/?wid=1688368231201",
"origin": "https://www.toutiao.com",
"protocol": "https:",
"host": "www.toutiao.com",
"hostname": "www.toutiao.com",
"port": "",
"pathname": "/",
"search": "?wid=1688368231201",
"hash": ""
}
然後還會報一個 Useragent的錯誤
我們繼續補上
navigator = {
"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67'
}
然後就扣程式碼扣成功了。
這個值好短啊。我們對比一下
_02B4Z6wo00f01vfjpbwAAIDBCBxaQ1vn84b3waEAANlo3f
_02B4Z6wo00f01z9d1bwAAIDCyiI.IkUKHQM.edEAAKt.NqUmn4ygAiOSxwaKaigCOeg56Ff89u.9vP6b6ub68vuKs2N8MHE1ooq3YQAYT9luKwEo58Z5CbtbU8m9.KvQ5zIywt7.ZVQByMpff7
足足長了一大截。
我們再挨個進斷點看看。在如圖的位置打上斷點。挨個追棧檢視。
後面發現在之前獲取瀏覽器環境中發現,在出_signature之前,獲取過一次cookie
所以我們還需要加上cookie 直接寫死即可
document.cookie = 'msToken=YT_CAKC4j1yOwgMxbB2jtTTvxroozg34lnY5cf7g7_JSz377gE4XfhP07HZPUjoaoHEVch4egS8RXblHNVYDeiZruwFzZD7GNPayfzsnWyA=; __ac_signature=_02B4Z6wo00f017cKGvwAAIDCQnXwY7ZFvKO3Lh5AAIlpCKNViv2DVvvH6x4q.QT77MgQzrAiF9hMRCiHWWaFPKyKg89Jhy8HzzWEsxOCL0uGv6qSBlqyWa5ptCRdbDDYlnceGFmxuIms3oCRf6; local_city_cache=%E8%8B%8F%E5%B7%9E; csrftoken=a08a7c6e066f7118fe2f379bb779e6f5; _ga_QEHZPBE5HH=GS1.1.1688368982.1.0.1688368982.0.0.0; _ga=GA1.1.1087552243.1688368983; s_v_web_id=verify_ljmjastc_1G6Mv2zQ_Y8pE_4qln_8mk4_sM1M5ze46FYX; tt_scid=F-2KEY1R0ROnAeE9XHLVYZZuLIETYppB9GsM9UL-TAMWFnDlcgdmDViPv9tGci1rf76e'
然後就能執行成功了
然後我們封裝一下 順便替換一下某些值。
部分程式碼如下圖
完成!!