爬虫websocket与RPC逆向案例:某建筑市场监管

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

声明:
该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关

一、websocket简介

WebSocket是一种在Web浏览器和服务器之间进行全双工通信的协议。它允许在客户端和服务器之间建立持久的连接,使得双方可以通过这个连接实时地交换数据。
与传统的HTTP请求-响应模式不同,WebSocket提供了一个长时间运行的连接,可以在客户端和服务器之间进行双向通信。这意味着服务器可以主动向客户端发送数据,而不需要客户端发起请求。这种实时性和双向通信的特性使得WebSocket在许多应用场景下非常有用,如实时聊天应用、在线游戏、股票市场报价等。
WebSocket协议建立在HTTP协议之上,使用HTTP的握手过程来建立连接,然后协议切换到WebSocket协议进行数据交换。WebSocket使用了一种轻量级的帧格式来传输数据,可以发送文本和二进制数据。它还支持心跳机制,以保持连接的活跃状态。
在Web开发中,通常使用WebSocket API来实现WebSocket通信。浏览器提供了WebSocket API,可以在JavaScript中使用它来创建WebSocket对象,建立连接并发送和接收数据。
总结起来,WebSocket是一种在Web浏览器和服务器之间实现实时、双向通信的协议,它允许长时间运行的连接,支持服务器主动推送数据,适用于许多实时性要求较高的应用场景。

二、websocket实现方式
  1. javascript websocket实现方式
//与服务器约定的连接 以及端口本机的   hosts
const socket = new WebSocket('ws://127.0.0.1:8080/')

//连接发生错误的回调方法
socket.onerror = () => {
    console.log("WebSocket连接发生错误");
};

//连接成功建立的回调方法
socket.onopen = function () {
    console.log("WebSocket连接成功");
}

//接收到消息的回调方法  接收服务器的数据
socket.onmessage = function (event) {
    console.log(event.data);
    socket.send('浏览器')
}

//连接关闭的回调方法
socket.onclose = function () {
    console.log("WebSocket连接关闭");
}
  1. python websocket实现方式
import asyncio
import websockets


async def echo(websocket):
    # 使用WebSocket在客户端和服务器之间建立全双工双向连接后,就可以在连接打开时调用send()方法。
    message = 'hello world'
    # 发送数据
    await websocket.send(message)
    return True


async def recv_msg(websocket):
    while 1:
        # 接收数据
        recv_text = await websocket.recv()
        print(recv_text)


async def main_logic(websocket, path):
    await echo(websocket)
    await recv_msg(websocket)


start_server = websockets.serve(main_logic, '127.0.0.1', 8080)
loop = asyncio.get_event_loop()
loop.run_until_complete(start_server)
# 创建了一个连接对象之后,需要不断监听返回的数据,则调用 run_forever 方法,要保持长连接即可
loop.run_forever()
三、websocket爬虫应用
  1. js运行 atob(‘aHR0cHM6Ly9qenNjLm1vaHVyZC5nb3YuY24vZGF0YS9jb21wYW55’) 拿到网址,F12打开调试工具,点击分页,找到dataservice/query/comp/list请求,分别切换headers、payload、preview会发现只有响应结果加密
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
  2. 打开网站:https://spidertools.cn/#/curl2Request,把拷贝好的curl转成python代码,新建jzsc.py,把代码复制到该文件
  3. XHR定位响应结果解密位置,调试工具切换到Sources,添加 dataservice/query/comp/list 请求拦截
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
  4. 点击分页重新发送请求,一直点击跳过当前函数执行,看到响应拦截器打个断点
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
  5. 结束调试,点击分页重新发送请求,点击跳过断点,找到刚才打的断点,在控制台输出 b(t.data),会发现响应结果已解密
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
  6. 结束调试,添加文件夹
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
  7. 右击刚才断点的文件,点击 override content,会在刚才的文件夹下生成一个相同的文件,并刷新页面
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
  8. 在刚才的文件内找到 b(t.data),打上断点,点击分页发送请求,如果进入该断点,说明本地文件替换成功
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
  9. 修改本地替换的文件 window.reponse_decrypt = b;,保存该文件,并刷新页面
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
  10. 新建 websocket.py,添加以下代码,并运行
import asyncio
import websockets


async def echo(websocket):
    # 使用WebSocket在客户端和服务器之间建立全双工双向连接后,就可以在连接打开时调用send()方法。
    message = 'socket连接成功'
    # 发送数据
    await websocket.send(message)
    return True


async def recv_msg(websocket):
    while 1:
        # 接收数据
        recv_text = await websocket.recv()
        print(recv_text)


async def main_logic(websocket, path):
    await echo(websocket)
    await recv_msg(websocket)


start_server = websockets.serve(main_logic, '127.0.0.1', 8080)
loop = asyncio.get_event_loop()
loop.run_until_complete(start_server)
# 创建了一个连接对象之后,需要不断监听返回的数据,则调用 run_forever 方法,要保持长连接即可
loop.run_forever()

  1. 新建 websocket hook,添加以下代码,并运行,控制台看到websocket连接成功说明,已经和python启动的websocket服务建立起连接
(function () {

    const websocket = new WebSocket('ws://127.0.0.1:8080');

    websocket.onopen = function () {
        console.log("WebSocket连接成功");
    };

    //  接收服务端发送的信息
    websocket.onmessage = function (event) {
        const data = window.reponse_decrypt(event.data);
        console.log("发送数据")
        // 发送解密数据给服务端
        websocket.send(data)
    }

})();

爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc

  1. 关闭所有soucket连接,修改 jzsh.py,并运行
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
  2. 运行 websocket hook,看 jzsh.py 控制台,会发现响应结果已解密
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
四、RPC逆向

RPC 在逆向中,简单来说就是将本地和浏览器,看做是服务端和客户端,二者之间通过 WebSocket 协议进行 RPC 通信,在浏览器中将加密函数暴露出来,在本地直接调用浏览器中对应的加密函数,从而得到加密结果,不必去在意函数具体的执行逻辑,也省去了扣代码、补环境等操作,可以省去大量的逆向调试时间。
这里使用 Sekiro-RPC 说明RPC在爬虫中的应用, Sekiro-RPC 官网:https://sekiro.iinti.cn/sekiro-doc/,文章来源地址https://www.toymoban.com/news/detail-813389.html

  1. Sekiro-RPC安装:https://sekiro.iinti.cn/sekiro-doc/01_manual/4.server_install.html#%E5%90%AF%E5%8A%A8-sekiro,访问该链接找到手动部署下载
  • Linux & Mac:bin/sekiro.sh 双击打开服务端
  • Windows:bin/sekiro.bat 双击打开服务端
  1. Sekiro-RPC需要java环境:https://repo.huaweicloud.com/java/jdk/8u201-b09/,下载对应系统的安装即可
  2. 客户端环境:http://file.virjar.com/sekiro_web_client.js?_=123
  3. 使用参数说明
// 生成唯一标记uuid编号
function guid() {
    function S4() {
        return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
    }
    return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
// 连接服务端
var client = new SekiroClient("ws://127.0.0.1:5620/business-demo/register?group=ws-group&clientId="+guid());
// 业务接口 
client.registerAction("clientTime",function(request, resolve, reject){
    resolve(""+new Date());
})
  • group:业务类型(接口组),每个业务一个 group,group 下面可以注册多个终端(SekiroClient),同时group 可以挂载多个 Action;
  • clientId:指代设备,多个设备使用多个机器提供 API 服务,提供群控能力和负载均衡能力;
  • SekiroClient:服务提供者客户端,主要场景为手机/浏览器等。最终的 Sekiro 调用会转发到 SekiroClient。每个 client 需要有一个惟一的 clientId;
  • registerAction:接口,同一个 group 下面可以有多个接口,分别做不同的功能;
  • resolve:将内容传回给服务端的方法;
  • request:服务端传过来的请求,如果请求里有多个参数,可以以键值对的方式从里面提取参数然后再做处理。
  1. Sekiro API
  • 查看分组列表:http://127.0.0.1:5620/business-demo/groupList
  • 查看队列状态:http://127.0.0.1:5620/business-demo/clientQueue?group=rpc-test
  • 调用转发:http://127.0.0.1:5620/business-demo/invoke?group=rpc-test&action=clientTime
五、RPC爬虫应用
  1. 以websocket爬虫应用中的网站为例,直到webscoket的部分不同,其他步骤相同
  2. 打开油猴,https://extfans.com/ 可通过该网站安装油猴
  3. 新建油猴脚本
  • @name:UserScript的名称。
  • @namespace:UserScript的命名空间。
  • @version:UserScript的版本号。
  • @description:UserScript的描述信息。
  • @author:UserScript的作者。
  • @homepage:UserScript的主页。
  • @icon:UserScript的图标。
  • @include:适用于UserScript的网页地址模式。
  • @exclude:排除不适用于UserScript的网页地址模式。
  • @match:适用于UserScript的网页地址正则表达式。
  • @grant:UserScript请求的权限,比如访问某个特定的API。
  • @require:UserScript所依赖的其他脚本文件。
  • @resource:UserScript所使用的资源文件,比如图像、样式表等。
  • @run-at:UserScript的执行时机,比如document-start(页面加载前)或document-end(页面加载后)。
  • @noframes:指定UserScript不在框架(iframe)中执行。
// ==UserScript==
// @name         Sekiro-RPC
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Sekiro-RPC爬虫应用
// @author       You
// @match        https://extfans.com/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=extfans.com
// @grant        none
// @require   http://file.virjar.com/sekiro_web_client.js?_=123
// @run-at       document-start
// @author       CC11001100
// @match       *://*/*
// ==/UserScript==

(function() {
    'use strict';

    function guid() {
        function S4() {
            return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
        }

        return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
    }

    var client = new SekiroClient("ws://127.0.0.1:5620/business-demo/register?group=sekiro&clientId=" + guid());

    client.registerAction("rpc", function (request, resolve, reject) {
        resolve(window.reponse_decrypt(request.param));
    })
})();
  1. 启动Sekiro-RPC服务端,bin/sekiro.bat 双击打开服务端(windows)
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
  2. 在网站中启动油猴,并刷新页面,控制台显示这些信息说明Sekiro-RPC连接成功
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc
  3. 修改 jzsc.py,并运行,会发现响应结果已解密
    爬虫websocket与RPC逆向案例:某建筑市场监管,python,爬虫,websocket,rpc

到了这里,关于爬虫websocket与RPC逆向案例:某建筑市场监管的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【爬虫逆向案例】某易云音乐(评论)js逆向—— params、encSecKey解密

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 今天逆向的这个网站 某易云音乐 歌曲的评论列表 而要拿到评论列表爬虫发送的表单需要两个参数 params 和 encSecKey。这两个玩意是加密的,所以重点就是怎么搞定这两个参数。 话

    2024年02月14日
    浏览(37)
  • Python爬虫逆向实战案例(五)——YRX竞赛题第五题

    题目:抓取全部5页直播间热度,计算前 5 名直播间热度的 加和 地址:https://match.yuanrenxue.cn/match/5 cookie中m值分析 首先打开开发者工具进行抓包分析,从抓到的包来看,参数传递了查询参数 m 与 f ,同时页面中给了提示说cookie仅有50秒的有效期,所以逆向参数可以直接通过co

    2024年02月11日
    浏览(38)
  • python爬虫之JS逆向基础小案例:网抑云数据获取

    嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 所用软件 解释器: python 3.8 编辑器: pycharm 2022.3 使用的模块 第三方模块: requests 数据请求 execjs pip install pyexecjs 内置模块(无需安装): nodejs 模块安装: win + R 输入cmd 输入安

    2024年01月20日
    浏览(39)
  • 【Python爬虫案例】抖音下载视频+X-Bogus参数JS逆向分析

    选择自己感兴趣的抖音博主,本次以“经典老歌【车载U盘】”为例 每次请求的页面会有很多接口,需要对接口进行筛选: 第一步筛选XHR筛选 第二步筛选URL中带有post 通过筛选play_add值找到视频的地址 通过对比两次请求发现只有X-Bogus数值会有变化,max_cursor是用翻页,后文再

    2024年03月15日
    浏览(101)
  • 爬虫案例-使用Session登录指定网站(JS逆向AES-CBC加密+MD5加密)

    总体概览:使用Session登录该网站,其中包括对password参数进行js逆向破解                 (涉及加密:md5加密+AES-CBC加密) 难度:两颗星 目标网址:aHR0cHM6Ly93d3cuZnhiYW9nYW8uY29tLw== 下面文章将分为四个部分:         1、定位主体加密函数,进行断点         2、分

    2024年02月09日
    浏览(64)
  • 安卓协议逆向 咸鱼 frida rpc 调用方案

    通过frida rpc调用真机获取指定的搜索结果数据。 本文仅供大家学习及研究使用、切勿用于各种非法用途。 frida 提供了一种跨平台的 rpc (远程过程调用)机制,通过 frida rpc 可以在主机和目标设备之间进行通信,并在目标设备上执行代码,可实现功能如下: 1、动态地

    2024年02月07日
    浏览(31)
  • websocket逆向

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

    2024年01月18日
    浏览(30)
  • 抓取网络请求Network中的响应JSON数据,不用JS逆向和RPC,python selenium+browser-proxy

    显然上面的红框是加密数据。   下面正式开始 首先要检查电脑是否安装了JDK8,高版本的好像不行,如果没有安装,则需要进行安装。这里不介绍了。下面下载两个东西: (1)python包的安装:pip3 install browsermob-proxy (2)组件下载地址:https://github.com/lightbody/browsermob-proxy/r

    2024年02月15日
    浏览(51)
  • Python爬虫市场简单分析

    Python爬虫是目前互联网行业中最重要的组成部分之一。Python作为一门易学易懂的编程语言,不需要过多的软件环境和部署条件,基本覆盖了爬虫开发的大部分需求,是网络数据爬取和处理的首选技术之一。Python通过一系列优秀的爬虫框架和库的支持,例如Scrapy、BeautifulSoup、

    2024年02月08日
    浏览(35)
  • 逆向爬虫进阶实战:突破反爬虫机制,实现数据抓取

    随着网络技术的发展,网站为了保护自己的数据和资源,纷纷采用了各种反爬虫机制。然而,逆向爬虫技术的出现,使得我们可以突破这些限制,实现对目标网站的深入分析和抓取。本文将介绍逆向爬虫进阶实战的一些技巧和代码片段,帮助读者更好地理解和掌握这一技术。

    2024年02月04日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包