




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第websocket直接绕过JS加密示例及思路原理目录websocket--hook服务端--WebSocketServer.js客户端注入JS代码python开端口get_data.py文件方式get_user_id.py文件方式get_data.py终端方式get_user_id.py终端方式爬虫调用者
websocket--hook
大致思路
原理:
浏览器(客户端):在浏览器中注入一段JS代码,与服务端建立连接。调用浏览器中的js方法,把返回的数据发送给服务端
node启动js代码,监听某端口(客户端):服务端把参数(python发过来的)发送给客户端处理,并接收处理结果,再次把接收的结果返回给python处理
python(调用者):把参数发送给node,接收node传回来的数据
优点:
1.对于js混淆加密较深的,可以采用此方法。
2.不用扣js加密代码,直接调用浏览器环境
缺点:
1.如果有selenium监测,要想使用此方法,必须先绕过selenium监测,否则只能使用真机进行js注入
2.需要node环境,写一个websocket服务端和客户端
3.速度没有直接破解js快
服务端--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("将要发送的实参:",msg);
targetConn.forEach(conn={
conn.send(msg);
conn.on("close",function(code,reason){
//console.log("关闭连接")
conn.on("error",function(code,reason){
console.log("异常关闭")
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("连接服务器成功");
window.ws.send("Browser");
window.ws.onclose=function(e){
console.log("服务器关闭");
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)
//发送给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('异常关闭')
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('异常关闭')
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()
爬虫调用者
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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络攻击防御及响应方案
- 电力设备及安装工程承包合同协议
- 环境评估与治理专业证明书(8篇)
- 文化旅游推广项目合作协议
- 人工智能技术合作开发项目合同
- 农产品销售与供应链优化合作协议
- 详尽的社会保险缴纳及工作证明(7篇)
- 技术服务合作合同书
- 2025汽车融资租赁合同模板
- 2025闲置土地承包合同模板
- 2025江苏中考:物理高频考点
- 餐饮抽成合同协议书
- 2025年江西省安福县事业单位公开招聘辅警36名笔试题带答案
- 大神心理测试题及答案
- 2025初级《银行业法律法规与综合能力》高分必会试题库1000题-单选500题
- 低值易耗品试题及答案
- 2025春季学期国开河南电大本科《行政管理理论与实践专题讲座》一平台无纸化考试(作业练习+我要考试)试题及答案
- 2025年新高考地区数学名校地市选填压轴题好题汇编(八)(解析版)
- 全球汽车产业发展现状与趋势
- 机械制造质量整改报告范文
- 2025贵州毕节市七星关区招聘城市社区工作者186人笔试备考题库及答案解析
评论
0/150
提交评论