WebSocket爬虫与JS逆向实战

这篇具有很好参考价值的文章主要介绍了WebSocket爬虫与JS逆向实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

声明:本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!由于本人水平有限,如有理解或者描述不准确的地方,还望各位大佬指教!!


练习网站:

Q3JhenkgUHJvTW9ua2V5IGh0dHBzOi8vd3d3LnBhbnpob3UuZ292LmNuL3p3Z2tfMTU4NjEvemZ4eGdremwvZmR6ZGdrbnJfNTgzNTQxNi9senlqXzU4MzU0MTcvemZ3al81ODM1NDE4L2luZGV4Lmh0bWw=

网站分析:

打开开发者工具,发现数据走的是wss协议,如图

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

 前面的文章中也有介绍过,以下特征就是代表着wss协议

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

既然知道了数据走的wss协议,那么我们就看他的wss链接,如图。但是我们发现wss链接是由几个加密值拼接的,那么我们的任务就是破解加密值以及寻找解密方法和入口

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

实战操作:

想必细心的大佬们都能发现,在ajax接口中,其响应的cookie值是和wss链接是吻合的,如图,那么,我们就可以大胆的请求这个接口了

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

然后接口还需要传参,参数值是加密的,那么我们就需要破解加密参数

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

又经过跟栈,找到了参数的加密入口,i 即为加密值,我们又发现请求接口时,请求头有对Fetch-Mode(为定值)和etag两个值有校验,那么我们同时还要拿到etag的值

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

而 i 的值是有 r 函数对 L 进行操作的,那么我们可以模拟 L 的生成(对url进行改变即可),但是我们却没有 r 函数

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

 往上检查js代码,发现了 r 的生成位置

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

看到 r = n(42),并跟进去,就知道 r 是由webpack生成的,这里的webpack的处理可以参考前面文章,这里就不做过多介绍了

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python 当 r 和 etag 复原之后,就可以正常生成加密参数了, 如图

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

运行结果如图

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

 那么我们就能拿到ajax接口的响应cookie值了,就可以生成wss链接了,如图

import execjs
from spider_util.utils import *

def data_sign():
    # 读取js文件
    with open('./2.js', 'r', encoding='utf-8') as f:
        reader = f.read()
    # 加载编译读取内容
    loader = execjs.compile(reader)
    # 调用js文件中的方法
    r = loader.call('fjm_panzhou_sdk')
    # 返回结果
    return r

data_sign = data_sign()
etag = data_sign[0]
param = data_sign[1]

headers = {
    "content-type": "application/json; charset=UTF-8",
    "etag": etag,
    "fetch-mode": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
}
url = "https://www.panzhou.gov.cn/1ywuKELSO2ahQuWZ/api/v1/sessions"
data = {
    "data": param
}
data = json.dumps(data, separators=(',', ':'))
response = requests.post(url, headers=headers, data=data)
wss_param1 = response.cookies.get('dGg2aCfMMK97Ro270mqBFu5qjC8TQbL2opnHvbEpM', '')
wss_param2 = response.cookies.get('FW9uCWqlVzC22m1KfCMCjfvFHpRMsgt', '')
print(wss_param1, wss_param2)
wss_url = f"wss://www.panzhou.gov.cn/1ywuKELSO2ahQuWZ/pr/{wss_param1}/b/ws/m01j9wq8pw/{wss_param2}" # oiysmb2g7k
print(wss_url)

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

 然后用wss协议发送请求链接,接收服务器响应结果,就能拿到数据了,但是却请求失败了

import websocket
import _thread as thread
import time

cookie = f'FW9uCWqlVzC22m1KfCMCjfvFHpRMsgt={wss_param2};dGg2aCfMMK97Ro270mqBFu5qjC8TQbL2opnHvbEpM={wss_param1}'

headers2 = {
    "Pragma": "no-cache",
    "Origin": "https://www.panzhou.gov.cn",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Sec-WebSocket-Key": "krDSpbfAbFkDxWiFXTQWxA==",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
    "Upgrade": "websocket",
    "Cache-Control": "no-cache",
    "Cookie": cookie,
    "Connection": "Upgrade",
    "Sec-WebSocket-Version": "13",
    "Sec-WebSocket-Extensions": "permessage-deflate; client_max_window_bits"
}

def on_message(ws, message):
    """收到对方消息处理方法"""
    print("对方发来的消息:", "".join(url_unquote(message)))
    time.sleep(5)   # 控制发送频率
    ws.send('ping')        # 我方决定再回一个消息

def on_error(ws, error):
    """ 错误处理方法 """
    print(error)

def on_close(ws,code,msg):
    """ 关闭处理方法 """
    print("代号:",code)
    print("对方关闭发来的消息:", msg)
    print("### 程序结束 ###")

def on_open(ws):
    """ 运行入口 """
    def run(*args):
        ws.send('ping')    # 我方发送第一个消息
    thread.start_new_thread(run, ())   # 开启线程
    
# websocket.enableTrace(True)    # 是否打开日志信息
ws = websocket.WebSocketApp(wss_url,
                            header=headers2,       # 设置请求头
                            on_open=on_open,     # 设置运行入口
                            on_message=on_message,   # 设置收到消息处理
                            on_close=on_close,  # 发生关闭处理
                            on_error=on_error,    # 错误处理
                            )
ws.run_forever()

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

这个问题基本上有两种原因,第一是wss_url不完全正确,第二就是请求头有其他检测。而小编已经对可能校验的cookie进行处理了,那目前只剩下wss_url的准确性了。经过仔细观察链接发现,如图参数值也是有变动的

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

而该参数就与上面ajax请求传参的tabId长度相等,且该值也是变动的。那么小编就且将两者值保持对应,再次进行wss请求

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

这次请求就能正常返回数据了,结果如图

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

WebSocket爬虫与JS逆向实战,javascript,websocket,爬虫,webpack,python

实战总结:

js逆向的过程就是这样,是一个不断研究和自我推敲的过程,不过是大佬还是新手小白,都是需要一步一步去入口,定位加密参数,寻找解密方法,完成参数复原,模拟正常浏览器请求服务器。所以小编还是希望大家在这个过程中能不断尝试,不断进步

那么,今日的分享就到这里,想要学习更多的python爬虫和js逆向的相关技巧和知识的小伙伴们一定要点下关注哟,后期会不定时分享相关干货内容文章来源地址https://www.toymoban.com/news/detail-734378.html

到了这里,关于WebSocket爬虫与JS逆向实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring boot + mybatis + websocket + js实战

    项目技术:spring boot + mybatis + websocket + js 需求背景:当添加一个女孩时,页面的socket收到消息,打印最新的所有女生list,这样可以进一步在react/vue前端框架下,实现当A用户新增了某业务数据后,B用户的该业务list页面能自动将最新的业务数据list清单刷新出来,而不是需要点

    2024年01月25日
    浏览(44)
  • 【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程

    【作者主页】: 吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建

    2024年02月22日
    浏览(52)
  • autox.js链接WebSocket实战,需要的老铁直接拿走

     昨天写脚本的时候需要用到sockcet接口,在网上苦寻一番之后发现这个段代码还是比较ok的,今天拿出来给大家分享一下,需要的直接取!!

    2024年04月16日
    浏览(46)
  • websocket逆向

    本章节主要介绍websocket逆向的 实际用途 、 直播间常见通信技术 、 websocket逆向技术 以及 学习路线 。 websocket逆向技术偏向于直播间互动玩法 语言播报 刷礼物加播 自动点歌 弹幕互动插件 和游戏交互 和硬件交互 整盅玩法 数字人 … 下面章节会详细讲解 以前直播间大多采用

    2024年01月18日
    浏览(34)
  • JS逆向 webpack解密

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 前言:我技术可能不是很牛逼,但我很会偷懒,怎么简单怎么来,所以有更好的解密方法可以在评论区评论~ 目标网站:这个网站很坑,那个验证字段搜不到,XHR断点也断不到,就

    2024年02月06日
    浏览(34)
  • js逆向——webpack扣法

    01 webpack讲解 webpack 是个静态模块打包工具,目的是为了让前端工程师写的前端代码变成浏览器可以识别的代码,并且可以达到前端项目的模块化,也就是如何更高效地管理和维护项目中的每一个资源。 但无疑是对 js逆向 造成了妨碍。但如果掌握了扣取 webpack 的一些技巧也是

    2024年02月03日
    浏览(41)
  • JS逆向之Webpack自吐

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢 在这篇文章里面,我们重新利用两个方法来实现扣出代码优化代码。webpack自吐所有方法和webpack精减代码法。把这两个方法结合起来使用。 一、 Webpack 是什么? ? webpack是一个基于模

    2024年02月01日
    浏览(53)
  • 【JS逆向学习】36kr登陆逆向案例(webpack)

    webpack 是一个基于模块化的打包(构建)工具, 它把一切都视作模块 webpack 数组形式,通过 下标 取值 webpack 对象形式,通过 key 取值 接口 : https://gateway.36kr.com/api/mus/login/byMobilePassword 加密参数 : - mobileNo - password 老规矩,先输入 账号、密码 ,点击登录,分析网络请求,如下

    2024年01月19日
    浏览(113)
  • 【python】webpack是什么,如何逆向出webpack打包的js代码?

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开

    2024年03月25日
    浏览(60)
  • web逆向笔记:js逆向案例四 QQ音乐 sign值(webpack打包代码如何扣取)

    一、webpack介绍: ​ Webpack 是一个模块打包工具,主要用于 JavaScript 应用程序。它可以将许多模块打包成一个或多个 bundle,从而优化加载速度和减少加载时间。Webpack 可以处理各种资源,包括 JavaScript、CSS、图片、字体等,并且可以将其转换为浏览器可以理解的格式。 Webpack

    2024年04月25日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包