【瑞数补环境实战】某网站Cookie补环境与后缀分析还原

文章目录

  • 1. 写在前面
  • 2. 特征分析
  • 3. 接口分析
  • 3. 补JS环境
  • 4. 补后缀参数

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

1. 写在前面

  瑞数相关的教程在网上可以说是层出不穷,各种技术方案均有!开源社区上多款针对瑞数定制的补环境框架,现在的过瑞数难度相比较于以前难度已经大大降低了!人均瑞数的成就人均可达成,本次我们使用补环境框架来过一下瑞数

2. 特征分析

在分析网站之前,我们需要去了解瑞数防护的一些特征。首先就是开局的无限debugger,然后4代的话请求是两次,一次的话是一个202状态码!在返回HTMl内容中包含动态加载的meta标签包含contentscript标签,如下图所示:

在这里插入图片描述

可以看到有一个外链的JS地址,_ts=window[…]可以直接请求获取JS代码,如下所示:

在这里插入图片描述

3. 接口分析

第一次请求页面我们可以监测一下,FSSBB…就是JS代码生成的Cookie,开头的数字表示它是瑞数几,如下所示:

在这里插入图片描述

这里我们可以直接在浏览器Curl请求出来,进行一下重放请求验证。如下所示:

在这里插入图片描述

标准的202,其实到这一步我们现在需要解决的一个问题就是过瑞数的反爬虫防护,让我们的请求能够正常的拿到页面的响应信息

3. 补JS环境

既然是使用补环境的框架(开源的rs框架很多,大家可以自行去查找测试),环境相关的东西基本都是借助Proxy模式让它自吐出来!

有时候使用框架并页不一定就好使,可能拿到的结果会跟你浏览器的不一样,这个时候就需要再回过头去分析JS,将框架监测到的环境尽可能跟浏览的一致!

这个地方还会有很多的细节坑,也是很多初学者或者rs新手经常补不出来的一个原因!JS的检测点很多,多次补的结果都跟浏览器的不一样,那就需要继续去分析,肯定是JS中没有补到或者监测到的环境

这里的补环境的JS源码很长。文章内作者不对其进行贴出,有需要的小伙伴可以找作者获取学习

这里我们直接运行补环境的框架,检测对象并进行自动代理。然后打印可以看到所有对象的属性信息,如下所示:

在这里插入图片描述

这里我们先使用Python来构造请求,将开始分析得到的content跟自执行JS提取出来(需要放到补出来的JS中执行调用),代码实现如下:

import requests
import re
import logginglogger = logging.getLogger(__name__)class WebScraper:def __init__(self, head_url, headers):self.head_url = ""self.headers = headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Accept-Language": "zh-CN,zh;q=0.9","Cache-Control": "no-cache","Connection": "keep-alive","Pragma": "no-cache","Upgrade-Insecure-Requests": "1","User-Agent": "" # 自行获取}def fetch_page(self):response = requests.get(self.head_url, headers=self.headers, verify=False)logger.info(f"请求响应状态: {response.status_code}")meta_content_match = re.search(r'<meta content="(.*?)">', response.text)js_code_match = re.search(r'r="m">(.*?)</s', response.text)if not meta_content_match or not js_code_match:logger.error("未能找到所需的meta内容或JavaScript代码")return Nonemeta_content = meta_content_match.group(1)js_code = js_code_match.group(1)logger.info(f"获取meta_content: {meta_content}")logger.info(f"获取自执行JS: {js_code}")

运行上面的程序,在第一次请求响应失败时,提取信息,运行效果如下所示:

在这里插入图片描述

将第一次请求提取到的信息塞到补环境的JS中,全局导出后可直接拿最到新的Cookie信息,如下所示:

在这里插入图片描述

拿到生成的Cookie信息携带发送新的请求,可以看到上图已成功过了瑞数反爬。请求状态码已是200,成功拿到了页面信息

4. 补后缀参数

绕过瑞数反爬虫后,我们需要处理的另一个问题则是后缀!拿接口数据,参数是有加密的,也就是后缀的那个MmEwMD,如下所示:

在这里插入图片描述

这个参数的还原其实有多种方案,第一个就是分析JS对其进行算法还原。有一定的难度!第二个则比较简单,直接在补环境的基础之上,对XMLHttpRequest对象的open方法进行修改并对其进行拦截,以此获取到完整的URL(含后缀

重写open方法的这种方案目前看是比较常见的,针对部分瑞数的反爬虫场景,至少作者在开源社区看到了多种此类的方案

(function() {// 保存原始的open方法var originalOpen = XMLHttpRequest.prototype.open;// 创建一个变量来保存URLvar lastURL;// 重写open方法XMLHttpRequest.prototype.open = function(method, url, async, user, password) {// 记录URLlastURL = url;// 调用原始的open方法return originalOpen.apply(this, arguments);};// 提供一个函数来获取记录的URLwindow.getLastRequestURL = function() {return lastURL;};
})();

作者给出了一个示例,通过这个例子我们可以拦截到XMLHttpRequest对象的open方法,以此来记录传入的URL,并通过getLastRequestURL拿到完整的URL,使用示例如下所示:

// 创建一个XMLHttpRequest对象并调用open方法
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://www.xxx.com.cn/service/xxx/xxx.actionId", true);// 获取最后一次请求的URL
console.log(getLastRequestURL());

最终作者对整个网站的请求进行了一个封装,测试了一下完整的流程,如下所示:

在这里插入图片描述

成功拿到后缀参数并提交接口获取到结构化数据,我们可以在此框架的基础去拓展,让其可以适用与所有瑞数的环境场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/42218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二分查找2

1. 山脉数组的峰顶索引&#xff08;852&#xff09; 题目描述&#xff1a; 算法原理&#xff1a; 根据题意我们可以将数组分为两个部分&#xff0c;一个部分是arr[mid-1]<arr[mid]&#xff0c;另一个部分为arr[mid-1]>arr[mid]&#xff0c;此时不难发现我们可以将二分…

Flink,spark对比

三&#xff1a;az 如何调度Spark、Flink&#xff0c;MR 任务 首先&#xff0c;使用java编写一个spark任务&#xff0c;定义一个类&#xff0c;它有main方法&#xff0c;里面写好逻辑&#xff0c;sparkConf 和JavaSparkContext 获取上下文&#xff0c;然后打成一个jar包&#xf…

数据结构——二叉树相关题目

1.寻找二叉树中数值为x的节点 //寻找二叉树中数值为x的节点 BTNode* TreeFind(BTNode* root, BTDataType x)//传过来二叉树的地址和根的地址&#xff0c;以及需要查找的数据 {if (root Null){return Null;}//首先需要先判断这个树是否为空&#xff0c;如果为空直接返回空if (…

【JavaWeb程序设计】JSP实现购物车功能

目录 一、结合之前所学的相关技术&#xff0c;编写代码实现以下购物车功能 1. 我实现的功能运行截图如下 &#xff08;1&#xff09;商品列表页面home.jsp &#xff08;2&#xff09;登录账号页面/未登录点击结账页面 &#xff08;3&#xff09;重新登录页面&#xff08;记…

昇思25天学习打卡营第18天|ShuffleNet图像分类

一、简介&#xff1a; ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Poin…

如何在centos7安装Docker

在centOS7中我们可以使用火山引擎镜像源镜像安装Docker,以下是具体的安装步骤。 step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils Step 2: 添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.ivolces.com/docker/linux/centos/docker-ce.r…

力扣双指针算法题目:二叉树的层序遍历(BFS)

目录 1.题目 2.思路解析 3.代码 1.题目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 对二叉树进行层序遍历&#xff0c;顾名思义&#xff0c;就是按每一层的顺序对二叉树一层一层地进行遍历 思路如下 从第一层开始&#xff0c;先将二叉树地头放入队列q&#xff0…

2007-2022年中国各企业数字化转型与供应链效率

企业数字化转型与供应链效率是现代企业管理和发展的两个关键方面。以下是对中国各企业数字化转型与供应链效率数据的介绍&#xff1a; 数据简介 企业数字化转型&#xff1a;指企业通过采用数字技术与创新方法&#xff0c;改造业务流程、组织结构和产品服务&#xff0c;以提升…

UCOS-III 系统移植

1. 移植前准备 1.1 源码下载 UCOS-III Kernel Source&#xff1a; https://github.com/weston-embedded/uC-OS3.git Micriμm CPU Source &#xff1a; https://github.com/weston-embedded/uC-CPU.git Micriμm Lib Source&#xff1a; https://github.com/weston-embedded…

多方SQL计算场景下,如何达成双方共识,确认多方计算作业的安全性

安全多方计算在SQL场景下的限制 随着MPC、隐私计算等概念的流行&#xff0c; 诸多政府机构、金融企业开始考虑参与到多方计算的场景中&#xff0c; 扩展数据的应用价值。 以下面这个场景为例&#xff0c; 银行可能希望获取水电局和税务局的数据&#xff0c;来综合计算得到各…

DolphinScheduler-3.1.9 资源中心实践

前言 目前DolphinScheduler最新的稳定版本是 3.1.9 &#xff0c;基于此做些探索&#xff0c;逐渐深化学习路径&#xff0c;以便于加深理解。 3.2.1 是最新的版本。目前的稳定版本是 3.1.9 基础环境&#xff1a;Hadoop3.3, Java 8, Python3, MacOS14.2.1 一、本地伪分布式安装…

学习笔记——动态路由——IS-IS中间系统到中间系统(开销)

四、IS-IS开销 1、IS-IS 开销简介 在IS-IS协议刚面世时&#xff0c;互联网网络结构还非常简单&#xff0c;因此IS-IS早期的版本中只使用了6bit来描述链路开销&#xff0c;链路开销的取值范围是1-63。一条路由的开销范围只有10bit&#xff0c;取值范围是0-1023。 随着计…

前端实现无缝自动滚动动画

1. 前言: 前端使用HTMLCSS实现一个无缝滚动的列表效果 示例图: 2. 源码 html部分源码: <!--* Author: wangZhiyu <w3209605851163.com>* Date: 2024-07-05 23:33:20* LastEditTime: 2024-07-05 23:49:09* LastEditors: wangZhiyu <w3209605851163.com>* File…

【ubuntu】安装(升级)显卡驱动,黑屏|双屏无法使用问题解决方法

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 ubuntu 安装(升级)显卡驱动&#xff0c;黑屏|双屏无法使用问题解决方法 由于项目需要&#xff0c;对显卡驱动进行升级。升级完就黑屏。。。。&#xff0…

Fast R-CNN(论文阅读)

论文名&#xff1a;Fast R-CNN 论文作者&#xff1a;Ross Girshick 期刊/会议名&#xff1a;ICCV 2015 发表时间&#xff1a;2015-9 ​论文地址&#xff1a;https://arxiv.org/pdf/1504.08083 源码&#xff1a;https://github.com/rbgirshick/fast-rcnn 摘要 这篇论文提出了一…

BAT-致敬精简

什么是bat bat是windows的批处理程序&#xff0c;可以批量完成一些操作&#xff0c;方便快速。 往往我们可以出通过 winR键来打开指令窗口&#xff0c;这里输入的就是bat指令 这里就是bat界面 节约时间就是珍爱生命--你能想象以下2分钟的操作&#xff0c;bat只需要1秒钟 我…

考虑数据库粒度的设计-提升效率

目录 概要 场景 设计思路 小结 概要 公开的资料显示&#xff0c;数据库粒度是&#xff1a;“在数据库领域&#xff0c;特别是数据仓库的设计中&#xff0c;粒度是一个核心概念&#xff0c;它直接影响到数据分析的准确性和存储效率。粒度的设定涉及到数据的详细程度和精度&…

【JVM基础篇】Java的四种垃圾回收算法介绍

文章目录 垃圾回收算法垃圾回收算法的历史和分类垃圾回收算法的评价标准标记清除算法优缺点 复制算法优缺点 标记整理算法&#xff08;标记压缩算法&#xff09;优缺点 分代垃圾回收算法&#xff08;常用&#xff09;JVM参数设置使用Arthas查看内存分区垃圾回收执行流程分代GC算…

【SpringBoot】IDEA查看spring bean的依赖关系

前因&#xff1a;在研究springcloud config组件时&#xff0c;我发现config-server包下的EnvironmentController可以响应客户端的请求&#xff0c;但EnvironmentController并不在启动类所在的包路径下&#xff0c;所以我推测它是作为某个Bean方法在生效&#xff0c;寻找bean的依…

DAY1: 实习前期准备

文章目录 VS Code安装的插件C/CCMakeGitHub CopilotRemote-SSH收获 VS Code 下载链接&#xff1a;https://code.visualstudio.com 安装的插件 C/C 是什么&#xff1a;C/C IntelliSense, debugging, and code browsing. 为什么&#xff1a;初步了解如何在VS Code里使用C输出…