Jsrpc學(xué)習(xí)——某條加密參數(shù)Sign變化的網(wǎng)站hook教程
回復(fù)“資源”即可獲贈(zèng)Python學(xué)習(xí)資料
大家好,我是皮皮。今天我們介紹的這個(gè)網(wǎng)站是cookie參數(shù)不變,但是加密參數(shù)Sign變化的一個(gè)網(wǎng)站,一起來(lái)使用jsrpc來(lái)攻破它吧!

1、這里使用的網(wǎng)站是fec2bc913be604a5162540c03d45532c,MD5加密處理過(guò)的。
2、需要抓取首頁(yè)相關(guān)信息,如下圖所示。

3、打開(kāi)瀏覽器抓包,然后打斷點(diǎn)調(diào)試,依次點(diǎn)擊右邊的Call Stack內(nèi)的東西,直到找到加密函數(shù),里邊的值對(duì)應(yīng)請(qǐng)求參數(shù)即可判定。仔細(xì)尋找,發(fā)現(xiàn)加密的函數(shù)在這里了。下圖直接用的是十一姐的圖,十一姐文章原文鏈接:
https://blog.csdn.net/weixin_43411585/article/details/123030973
4、之后可以在控制臺(tái)輸入指令window.dcpeng = window.byted_acrawler.sign,其中window.byted_acrawler.sign為加密函數(shù)。注意:這個(gè)地方挺重要的,很多時(shí)候我們會(huì)寫(xiě)成ct.update(),這樣會(huì)有問(wèn)題!加了括號(hào)就是賦值結(jié)果,沒(méi)加就是賦值整個(gè)函數(shù)!千差萬(wàn)別。

5、關(guān)閉網(wǎng)頁(yè)debug模式。注意:這個(gè)地方挺重要的,很多時(shí)候如果不關(guān)閉,ws無(wú)法注入!
6、此時(shí)在本地雙擊編譯好的文件win64-localhost.exe,啟動(dòng)服務(wù)。

7、之后在控制臺(tái)注入ws,即將JsEnv.js文件中的內(nèi)容全部復(fù)制粘貼到控制臺(tái)即可(注意有時(shí)要放開(kāi)斷點(diǎn))。

8、連接通信,在控制臺(tái)輸入命令var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=para&name=test");

9、隨后繼續(xù)輸入命令:
//?注冊(cè)一個(gè)方法?第一個(gè)參數(shù)get_v為方法名,
//?第二個(gè)參數(shù)為函數(shù),resolve里面的值是想要的值(發(fā)送到服務(wù)器的)
//?param是可傳參參數(shù),可以忽略
demo.regAction("get_para",?function?(resolve,?param)?{
?console.log(param);
????var?res?=?dcpeng(param,?{"url":"https://www.toutiao.com/?wid=1641423780855"});
????resolve(res);
})
這個(gè)地方要記得傳參,不然你拿不到數(shù)據(jù)的。(這里排查了好久才出來(lái))

10、之后就可以在瀏覽器中訪問(wèn)數(shù)據(jù)了,打開(kāi)網(wǎng)址 http://127.0.0.1:12080/go?group={}&name={}&action={}¶m={} ,這是調(diào)用的接口 group和name填寫(xiě)上面注入時(shí)候的,action是注冊(cè)的方法名,param是可選的參數(shù),這里續(xù)用上面的例子,網(wǎng)頁(yè)就是:http://127.0.0.1:12080/go?group=para&name=test&action=get_para

11、如上圖所示,我們看到了那個(gè)變化的參數(shù)v的值,直接通過(guò)requests庫(kù)可以發(fā)起get請(qǐng)求。
12、現(xiàn)在我們就可以模擬數(shù)據(jù),進(jìn)行請(qǐng)求發(fā)送了。
13、將拷貝的內(nèi)容可以丟到這里進(jìn)行粘貼:http://tool.yuanrenxue.com/curl
14、之后將右側(cè)的代碼復(fù)制到Pycharm中即可用,非常便利。
15、之后就可以構(gòu)造請(qǐng)求了,加一個(gè)整體循環(huán),然后即可獲取翻頁(yè)的內(nèi)容,整體代碼如下所示。
#?coding:utf-8
#?@Time?:?2022/5/10?16:30
#?@Author:?皮皮
#?@公眾號(hào):?Python共享之家
#?@website?:?http://pdcfighting.com/
#?@File?:?頭jsrpc.py
#?@Software:?PyCharm
import?requests
import?json
import?urllib.parse
import?time
param_url?=?"http://127.0.0.1:12080/go?group=para&name=test&action=get_para"
response?=?requests.get(url=param_url).text
response_json?=?json.loads(response)
sign?=?response_json["get_para"]
print(sign)
behot_time?=?int(time.time())
params?=?{
????????????"offset":?0,
????????????"channel_id":?0,
????????????"max_behot_time":?1641416108,
????????????"category":?"pc_profile_recommend",
????????????"aid":?24,
????????????"app_name":?"toutiao_web",
????????????"disable_raw_data":?"true",
????????????"_signature":?sign
????????}
url?=?f'https://www.toutiao.com/api/pc/list/feed'
response_detail?=?requests.get(url,?params=params).json()
print(response_detail["data"])
運(yùn)行結(jié)果如下圖所示,和網(wǎng)頁(yè)上呈現(xiàn)的數(shù)據(jù)一模一樣。

16、至此,請(qǐng)求就已經(jīng)完美的完成了,如果想獲取全部網(wǎng)頁(yè),構(gòu)造一個(gè)range循環(huán)翻頁(yè)即可實(shí)現(xiàn)。
小伙伴們,快快用實(shí)踐一下吧!如果在學(xué)習(xí)過(guò)程中,有遇到任何問(wèn)題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。
-------------------?End?-------------------
往期精彩文章推薦:
分享一個(gè)使用Python網(wǎng)絡(luò)爬蟲(chóng)抓取百度關(guān)鍵詞和鏈接的代碼(xpath篇)
分享一個(gè)使用Python網(wǎng)絡(luò)爬蟲(chóng)抓取百度關(guān)鍵詞和鏈接的代碼(bs4篇)

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
