




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第websocket直接繞過JS加密示例及思路原理目錄websocket--hook服務(wù)端--WebSocketServer.js客戶端注入JS代碼python開端口get_data.py文件方式get_user_id.py文件方式get_data.py終端方式get_user_id.py終端方式爬蟲調(diào)用者
websocket--hook
大致思路
原理:
瀏覽器(客戶端):在瀏覽器中注入一段JS代碼,與服務(wù)端建立連接。調(diào)用瀏覽器中的js方法,把返回的數(shù)據(jù)發(fā)送給服務(wù)端
node啟動js代碼,監(jiān)聽某端口(客戶端):服務(wù)端把參數(shù)(python發(fā)過來的)發(fā)送給客戶端處理,并接收處理結(jié)果,再次把接收的結(jié)果返回給python處理
python(調(diào)用者):把參數(shù)發(fā)送給node,接收node傳回來的數(shù)據(jù)
優(yōu)點:
1.對于js混淆加密較深的,可以采用此方法。
2.不用扣js加密代碼,直接調(diào)用瀏覽器環(huán)境
缺點:
1.如果有selenium監(jiān)測,要想使用此方法,必須先繞過selenium監(jiān)測,否則只能使用真機進行js注入
2.需要node環(huán)境,寫一個websocket服務(wù)端和客戶端
3.速度沒有直接破解js快
服務(wù)端--WebSocketServer.js
leticonv=require('iconv-lite')
varws=require("nodejs-websocket");
console.log("開始建立連接...")
varserver=ws.createServer(function(conn){
letcached={};
conn.on("text",function(msg){
if(!msg)return;
//console.log("msg",msg);
varkey=conn.key;
if((msg==="Browser")||(msg==="Python")){
//browser或者python第一次連接
cached[msg]=key;
//console.log("cached",cached);
return;
if(Object.values(cached).includes(key)){
//console.log(server.connections.forEach(conn=conn.key));
vartargetConn=server.connections.filter(function(conn){
returnconn.key!==key;
//console.log("將要發(fā)送的實參:",msg);
targetConn.forEach(conn={
conn.send(msg);
conn.on("close",function(code,reason){
//console.log("關(guān)閉連接")
conn.on("error",function(code,reason){
console.log("異常關(guān)閉")
conn.on("connection",function(conn){
console.log(conn)
}).listen(10512)
console.log("WebSocket建立完畢")
客戶端注入JS代碼
createSocket();
functioncreateSocket(){
window.ws=newWebSocket('ws://:10512/');
window.ws.onopen=function(e){
console.log("連接服務(wù)器成功");
window.ws.send("Browser");
window.ws.onclose=function(e){
console.log("服務(wù)器關(guān)閉");
setTimeout(createSocket,60000);
window.ws.onerror=function(){
console.log("連接出錯");
window.ws.onmessage=function(e){
varxmlhttp=newglb.XMLHttpRequest();
functionstate_Change(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){
letresult=xmlhttp.responseText
result=JSON.parse(result)
result=JSON.stringify(result)
//result=String.fromCharCode(result)
//發(fā)送給Python
//console.log(result);
window.ws.send(result);
}else{
alert("ProblemretrievingXMLdata");
xmlhttp.onreadystatechange=state_Change;
xmlhttp.open('GET',e.data,true);
xmlhttp.send(null);
python開端口
#-*-coding:utf-8-*-
fromsanicimportSanic
fromsanic.responseimportjson
importos
importurllib3
fromtoutiao2_文件方式.get_dataimportget_data
fromtoutiao2_文件方式.get_user_idimportget_user
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
app=Sanic(__name__)
@app.route("/get_user_id",methods=["GET"])
defcaptcha_server(request):
try:
data=request.args
media_id=data['media_id'][0]
returnget_user_id(media_id)
exceptExceptionase:
pass
@app.route("/get_data",methods=["GET"])
defcaptcha_server(request):
try:
data=request.args
user_id=data['user_id'][0]
offset=data['offset'][0]
returnget_res(user_id,offset)
exceptExceptionase:
pass
defget_user_id(media_id):
html=get_user(media_id)
returnhtml
defget_res(user_id,offset):
html=get_data(user_id,offset)
returnhtml
if__name__=="__main__":
app.run(host="",port=4007)
get_data.py文件方式
#-*-coding:utf-8-*-
importtime
fromws4py.client.threadedclientimportWebSocketClient
import_locale
_locale._getdefaultlocale=(lambda*args:['zh_CN','utf8'])
importurllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
classCG_Client(WebSocketClient):
defopened(self):
self.max_cursor=0
self.send("Python")
defclosed(self,code,reason=None):
#print("Closeddown:",code,reason)
pass
defreceived_message(self,resp):
data=resp.data.decode("utf-8")
write_data(data)
ws.close()
defwrite_data(data):
withopen('./data.txt','w',encoding='utf-8')asf:
f.write(data)
f.close()
defget_data(user_id,offset):
ws=CG_Client('ws://:10512/')
ws.connect()
try:
real_arg=f"/api/feed_backflow/profile_share/v1/category=profile_articlevisited_uid={user_id}stream_api_version=82request_source=1offset={offset}user_id={user_id}appId=1286appType=mobile_detail_webisAndroid=trueisIOS=falseisMobile=truecookie_enabled=truescreen_width=288screen_height=511browser_language=zh-CNbrowser_platform=MacIntelbrowser_name=firefoxbrowser_version=85.0.4183.83browser_online=truetimezone_name=Asia%2FShanghai"
time.sleep(0.1)
ws.send(real_arg)
ws.run_forever()
exceptKeyboardInterrupt:
print('異常關(guān)閉')
ws.close()
get_user_id.py文件方式
#-*-coding:utf-8-*-
importtime
fromws4py.client.threadedclientimportWebSocketClient
import_locale
_locale._getdefaultlocale=(lambda*args:['zh_CN','utf8'])
importio
importsys
importurllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
#sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
#media_id=sys.argv[1].split(',',1)[0]#sys.argv--[get_attention.py,user_id,cursor]
classCG_Client(WebSocketClient):
defopened(self):
self.max_cursor=0
self.send("Python")
defclosed(self,code,reason=None):
#print("Closeddown:",code,reason)
pass
defreceived_message(self,resp):
data=resp.data.decode("utf-8")
write_user(data)
ws.close()
defwrite_user(data):
withopen('./user.txt','w',encoding='utf-8')asf:
f.write(data)
f.close()
defget_user(media_id):
ws=CG_Client('ws://:10512/')
ws.connect()
try:
real_arg=f"/user/profile/homepage/share/v7/media_id={media_id}request_source=1appId=1286appType=mobile_detail_webisAndroid=trueisIOS=falseisMobile=truecookie_enabled=truescreen_width=393screen_height=882browser_language=zh-CNbrowser_platform=MacIntelbrowser_name=Chromebrowser_version=85.0.4183.83browser_online=truetimezone_name=Asia%2FShanghai"
time.sleep(0.1)
ws.send(real_arg)
ws.run_forever()
exceptKeyboardInterrupt:
print('異常關(guān)閉')
ws.close()
get_data.py終端方式
#-*-coding:utf-8-*-
importtime
fromws4py.client.threadedclientimportWebSocketClient
import_locale
_locale._getdefaultlocale=(lambda*args:['zh_CN','utf8'])
importio
importsys
importurllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
user_id=sys.argv[1].split(',',1)[0]#sys.argv--[get_attention.py,user_id,cursor]
offset=str(sys.argv[2])
classCG_Client(WebSocketClient):
defopened(self):
print("連接成功")
self.max_cursor=0
self.send("Python")
defclosed(self,code,reason=None):
print("Closeddown:",code,reason)
defreceived_message(self,resp):
data=resp.data.decode("utf-8")
print(data)
ws.close()
ws=CG_Client('ws://:10512/')
ws.connect()
real_arg=f"/api/feed_backflow/profile_share/v1/category=profile_articlevisited_uid={user_id}stream_api_version=82request_source=1offset={offset}user_id={user_id}appId=1286appType=mobile_detail_webisAndroid=trueisIOS=falseisMobile=truecookie_enabled=truescreen_width=288screen_height=511browser_language=zh-CNbrowser_platform=MacIntelbrowser_name=firefoxbrowser_version=85.0.4183.83browser_online=truetimezone_name=Asia%2FShanghai"
time.sleep(0.1)
ws.send(real_arg)
ws.run_forever()
exceptKeyboardInterrupt:
ws.close()
get_user_id.py終端方式
#-*-coding:utf-8-*-
importtime
fromws4py.client.threadedclientimportWebSocketClient
import_locale
_locale._getdefaultlocale=(lambda*args:['zh_CN','utf8'])
importio
importsys
importurllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
media_id=sys.argv[1].split(',',1)[0]#sys.argv--[get_attention.py,user_id,cursor]
classCG_Client(WebSocketClient):
defopened(self):
print("連接成功")
self.max_cursor=0
self.send("Python")
defclosed(self,code,reason=None):
print("Closeddown:",code,reason)
defreceived_message(self,resp):
data=resp.data.decode("utf-8")
#data=resp.data.decode("gbk")
print(data)
ws.close()
ws=CG_Client('ws://:10512/')
ws.connect()
real_arg=f"/user/profile/homepage/share/v7/media_id={media_id}request_source=1appId=1286appType=mobile_detail_webisAndroid=trueisIOS=falseisMobile=truecookie_enabled=truescreen_width=393screen_height=882browser_language=zh-CNbrowser_platform=MacIntelbrowser_name=Chromebrowser_version=85.0.4183.83browser_online=truetimezone_name=Asia%2FShanghai"
time.sleep(0.1)
ws.send(real_arg)
ws.run_forever()
exceptKeyboardInterrupt:
ws.close()
爬蟲調(diào)用者
importtime
importrequests
importjson
importurllib3
fromtoutiao2_文件方式.get_user_idimportget_user,CG_Client
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
defopen_user():
withopen('./user.txt','r',encoding='utf-8')asf:
user=json.loads(f.read())
f.close()
returnuser
defopen_data():
withopen('./data.txt','r',encoding='utf-8')asf:
data=json.loads(f.read())
f.close()
returndata
#media_id換user_id
defstart_ocean_toutiao_user_id(media_id):
data={
'media_id':media_id,
requests.get(':4007/get_user_id',params=data,timeout=3)
time.sleep(2)
response=open_user()
res_media_id=response.get('data').ge
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國磨砂膠行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國電影行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國電動汽車用太陽能電池板及充電器行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國生鮮牛乳行業(yè)發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030年中國環(huán)??咕瑝|行業(yè)市場發(fā)展分析及發(fā)展趨勢與投資研究報告
- 2025-2030年中國狗窩行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國物流園區(qū)行業(yè)現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025-2030年中國牙鉆機行業(yè)發(fā)展分析及投資風(fēng)險預(yù)測研究報告
- 2025-2030年中國熱空氣消毒器行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國煙道和煙囪行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 70歲以上老人考駕照,三力測試題庫答案
- 2023年副主任醫(yī)師(副高)-中醫(yī)婦科學(xué)(副高)考試上岸歷年考點真題演練含答案
- 醫(yī)院預(yù)算業(yè)務(wù)流程圖
- ALeader 阿立得 ALD515使用手冊
- 政教主任國旗下的講話稿-講話稿
- 國學(xué)文化古典中國風(fēng)模板
- 國民經(jīng)濟核算司精講GDP核算
- 畢業(yè)論文PLC在機械手控制系統(tǒng)中的應(yīng)用
- HY/T 0331-2022綠潮生態(tài)調(diào)查與監(jiān)測技術(shù)規(guī)范
- GB/T 7064-2017隱極同步發(fā)電機技術(shù)要求
- GB/T 31928-2015船舶用不銹鋼無縫鋼管
評論
0/150
提交評論