爬虫逆向学习(五):使用RPC框架serkio解决逆向难题
serkio应用实战
- 前言
- 实战开发
- 多次调用加密方法破解失败
- 如何刷新加密方法
- 同一个浏览器的加密代码如何给不同用户使用
- 注意事项
- 总结
前言
最近在工作中遇到了一个反爬虫产品,处于技术能力和新产品迭代更新快的考虑,最后选择使用RPC技术解决问题,因为serkio框架帮我们封装好了服务,且自身具备一定的负载均衡能力,所以选择它作为RPC实现方案。
新手入门请参考K哥的文章,我也是通过这篇继续学习的。
RPC 技术及其框架 Sekiro 在爬虫逆向中的应用,加密数据一把梭
实战开发
由于是工作业务相关的开发,设计隐私问题,这里就不一一展示开发过程了,我大概罗列出开发过程中遇到的问题
多次调用加密方法破解失败
在部署好Sekiro后,调用RPC服务已经能够拿到加密参数生成结果了,但是在多次调试后发现生成的结果用于请求时会失败,根据浏览器抓包请求流程确定请求接口定期会返回419,结果会携带一个data,当出现419必须将data进行处理,因为这个data会作用于下一次加密结果生成,流程图如下:
如何刷新加密方法
419的data怎么刷新到加密方法里呢?这个需要在js处理响应数据中找到相关的处理代码(onResponse),然后只要将这段代码在RPC服务中执行即可。
if (request.hasOwnProperty('dunm_data')) {let _0x37561b = _0x365f28(request['dunm_data'], window);_0x37561b["run"]();window.localStorage.dunm_data = request['dunm_data'];
}
同一个浏览器的加密代码如何给不同用户使用
使用同一份加密代码加密到的结果,然后用不同cookie发起请求,发现不是浏览器登录用户的请求结果是419,重试也无效,确定加密过程会引用用户的信息,删除浏览器的登录信息后,原浏览器登录用户用加密结果发起请求也无效,但是在重新设置cookie后有效,确定只要动态设置cookie即可实现同一个浏览器的加密代码给不同用户使用。
使用Object.defineProperty动态设置cookie和ua
var client = new SekiroClient("ws://127.0.0.1:5612/business-demo/register?group=shanghai&clientId=" + guid());
client.registerAction("getLosEncrypt", function (request, resolve, reject) {if (request.hasOwnProperty('dunm_data')) {let _0x37561b = _0x365f28(request['dunm_data'], window);_0x37561b["run"]();window.localStorage.dunm_data = request['dunm_data'];}if (request.hasOwnProperty('cookie')) {Object.defineProperty(document, 'cookie', {value: request['cookie'],writable: true});}if (request.hasOwnProperty('userAgent')) {Object.defineProperty(navigator, 'userAgent', {value: request['userAgent'],writable: true});}let result = window["ssx91m$212"](request['hurl'], request['post_data'], {});resolve(result)
})
注意事项
- 浏览器弹窗会将浏览器瞄点定位到弹框,导致RPC服务连接不上,所以我们需要处理弹窗,让其无法弹出,只需要重写方法即可
window.alert = function(str){return true;
}
window.compile = function(str){return true;
}
- RPC其实不会产生太大的浏览器内存,我在三台服务器中部署了sekiro,通过监控资源情况确定不会产生过大的内存占用
- sekiro如何实现负载均衡呢?其实sekiro可以创建很多哥group,每个group有16个client可以动态使用,也就是对于一个group来说其实是有一定的负载均衡能力,但是如果对多个group进行负载均衡,非商用版的话需要自己实现
- 调用rpc服务时由于传参太大导致调用失败,这个时候可以使用post,能实现一样的效果
总结
当我们不考虑去逆向js来实现加密参数的话,可以考虑使用RPC 技术,它不需要加载多余的资源,稳定性和效率明显都更高,也不需要考虑浏览器指纹、各种环境。但是,由于服务时注入到浏览器js文件中的,所以需要维护浏览器窗口的稳定性,且如果网站对ua等浏览器信息进行强校验的话,其实RPC也很难使用。
相关文章:

爬虫逆向学习(五):使用RPC框架serkio解决逆向难题
serkio应用实战前言实战开发多次调用加密方法破解失败如何刷新加密方法同一个浏览器的加密代码如何给不同用户使用注意事项总结前言 最近在工作中遇到了一个反爬虫产品,处于技术能力和新产品迭代更新快的考虑,最后选择使用RPC技术解决问题,因…...

NumPy 秘籍中文第二版:三、掌握常用函数
原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们将介绍许多常用函数: sqrt(),log(),arange(),astype()和sum()ceil(),modf()&…...

蓝桥杯基础17:BASIC-02试题 序列求和
资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 求123...n的值。 输入格式 输入包括一个整数n。 输出格式 输出一行,包括一个整数,表示123...n…...
vue移动端实现vue-pdf在线预览与展示,并且解决页面汉字空白的问题
vue移动端实现pdf的页面在线预览展示,CMapReaderFactory可以解决文字不展示、空白问题 //1、安装依赖vue-pdf npm install --save vue-pdf//2、使用组件 <pdf v-for"i in numPages" ref"pdfs" :src"pdfUrl" :key"i" …...
代码随想录算法训练营第四十九天 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
打卡第49天,买卖股票系列了 今日任务 ● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II 121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#x…...
【职场篇】程序员是否吃青春饭?程序员在35岁之后是否需要转行?
你们好 那么众所周知呢像空姐 还有模特这种职业呢 都是吃青春饭的 那么到了一定年龄呢 他们可能就不做这一行了 那么其实程序员这个职业呢 有的人认为他也是吃青春饭的 普遍人都认为呢 如果程序员做到35岁呢 没有转管理岗位 可能以后就没有什么前途了 可能就要考虑换别的行业了…...

( “树” 之 DFS) 226. 翻转二叉树 ——【Leetcode每日一题】
226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root [2,1,3] 输出:[…...

实验7---myBatis和Spring整合
实验七 myBatis和Spring整合 一、实验目的及任务 通过该实验,掌握mybatis和spring整合方法,掌握生成mapper实现类的两种生成方式。 二、实验环境及条件 主机操作系统为Win10,Tomcat,j2sdk1.6或以上版本。 三、实验实施步骤 略 四、实验报告内…...

DJ3-4 传输层(第四节课)
目录 一、TCP 概述 二、TCP 报文段的首部字段格式 三、TCP 往返时延的估计和超时 1. 估计往返时间 2. RTT 估计例子 3. 估计往返时间的偏差 4. 设置重传超时间隔 一、TCP 概述 全双工服务:允许在同一时间同一连接上,数据能够双向传输。注意&#…...

2023爱分析·商业智能应用解决方案市场厂商评估报告:数聚股份
目录 1. 研究范围定义 2. 商业智能应用解决方案市场分析 3. 厂商评估:数聚股份 4. 入选证书 1. 研究范围定义 商业智能(BI)是在实现数据集成和统一管理的基础上,利用数据存储和处理、分析与展示等技术,满足企…...
Kotlin方法执行顺序
方法的执行顺序 主构造函数init代码块次构造函数...

Ubuntu系统配置SonarQube + cppcheck + Jenkins
SonarQube1. postgresql安装及配置1.1 安装postgresql1.2 创建sonarqube用户1.3 设置数据库2. 安装sonarqube2.1 设置sonarqube2.2 修改sonarqube目录权限2.3 sonar.properties2.4 设置systemd管理sonarqube2.5 web3. 配置sonarscanner3.1 下载3.2 配置4. 配置cppcheck4.1 下载…...
Spring @Valid 不生效 问题记录
校验的简单使用: 在Spring中,我们可以使用Valid注解对实体进行校验。在Controller的方法参数中添加Valid注解,然后在实体类的属性上添加校验注解,例如NotNull、Size等。例如: RestController public class UserContr…...

五步教你如何注册一个公司网站
在今天的数字化时代,每个公司都需要一个强大的线上存在感。注册一个公司网站是实现这一目标的第一步。但是,对于许多公司而言,这个过程可能有些困难。因此,在本文中,我将介绍一个五步计划,让您轻松注册一个…...

CSS绘制气泡对话框样式(有边框)
1、效果图 2、难点和思路 难点:上面那个带边框的小三角不好实现 思路:画两个不同大小的div,使其基本重叠(两个大小不同,不完全重叠,让红色的露出一点边边),让白色div放到最上层&…...

12款 Macmini A1347 跑 Stable Diffusion,20多分钟一张图
设备 2012款 Macmini A1347 12款 mini A1347 跑 Stable Diffusion 要20多分钟一张图 来欣赏一下20分钟画出来的图片 a black and white cat 环境:...

流量控制和拥塞控制的原理和区别
文章目录先介绍下重传机制和滑动窗口超时重传快速重传SACK方法Duplicate SACK滑动窗口发送方缓存窗口接收方缓存窗口流量控制小结拥塞控制慢开始算法拥塞避免算法快重传快恢复先介绍下重传机制和滑动窗口 超时重传 重传机制的其中一个方式,就是发送数据时…...
金融机构断卡行动中外部数据
“断卡行动”,近几年逐渐走入大众视野,是国家在从根源上整治网络及金融犯罪层面的重大举措。相信很多朋友在日常生活中已经有所体会了,比如我们在办理电话卡及银行卡的时候要经过很多审核机制,同时发卡后还会限制卡片的一些转账等…...

携程总监的单元测试是怎么样写的?
大家都知道,开发软件的时候为代码编写单元测试是很好的。但实际上,光有测试还不够,还要编写好的测试,这同样重要。 要做到这一点,考虑遵循一些固执的原则,对测试代码给予一些关爱: 1. 保持测试…...

算法每日一题:P2089 烤鸡 -DFS练习
😚一个不甘平凡的普通人,日更算法学习和打卡,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘 🤗专栏:每日算法学习 💬个人…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...