当前位置: 首页 > news >正文

【学习心得】网站运行时间轴(爬虫逆向)

一、网站运行时间轴 

        掌握网站运行时间轴,有助于我们对“请求参数加密”和“响应数据加密”这两种反爬手段的深入理解。

网络运行时间轴

二、从网站运行的时间轴角度来理解两种反爬手段

1、加载HTML
        这是浏览器访问网站时的第一步,服务器会返回基础的HTML结构。在这个阶段,爬虫可以直接获取到HTML内容。

2、加载JS并初始化
        随后,浏览器会加载并执行网页中的JavaScript代码。这些代码可能包含重要的逻辑,比如数据加密、页面动态渲染等。

3、用户触发某个事件
        用户可能会在网页上进行一些操作,如点击按钮、填写表单等。这些操作会触发JavaScript事件。

4、调用某段JS加密参数
        在用户触发事件后,JavaScript可能会执行加密函数,对即将发送到服务器的数据进行加密。这是请求参数加密的关键步骤。加密后的参数对于爬虫来说难以理解,因为它们不再是明文形式。

5、给服务器发信息(XHR-SEND)
        加密后的参数会通过XMLHttpRequest(XHR)或其他方式发送到服务器。这一步对于爬虫来说是一个挑战,因为即使能够截获请求,也难以解析加密的参数。

6、接收服务器数据
        服务器处理请求后,会返回响应数据。这些数据可能是加密的,特别是在响应数据加密的情况下。

7、调用某段JS解密响应
        浏览器接收到加密的响应数据后,会使用JavaScript中的解密函数将其解密为可读的形式。这一步对于爬虫来说同样是困难的,因为它们需要模拟执行JavaScript代码来解密数据。

8、刷新网页渲染
        最后,解密后的数据会被用来更新网页的内容或状态,用户可以看到新的信息。对于爬虫来说,如果能够成功解密数据并模拟网页的渲染过程,就能够获取到这些信息。

三、破解请求参数加密和响应数据加密思路

请求参数加密和响应数据加密的逆向思路,我专门出了两篇文章来说明,下面是文章的链接:

【学习心得】请求参数加密的原理与逆向思路icon-default.png?t=N7T8http://t.csdnimg.cn/iXC8e【学习心得】响应数据加密的原理与逆向思路icon-default.png?t=N7T8http://t.csdnimg.cn/Jr8oa

        回顾之前的文章中,我提到的两种逆向思路的第一步都是【寻找入口,快速定位】,可见找到加解密的JS函数非常关键,但往往在逆向过程中面对众多JS文件,成千上万行JS代码时毫无头绪。因此我写这篇网络运行时间轴的目的就是给破解这两种反爬手段一个通用的思考路径。那就是深刻理解其加解密时机。

(1)请求参数加密反爬的加密时机

        加密通常在用户触发某个事件后、发送请求之前进行。例如,在填写表单并提交时,JS代码可能会拦截表单提交事件,加密表单数据后再发送到服务器。加密的内容通常包括用户输入的数据、查询参数、API密钥等敏感信息。

于是可以通过这样的步骤来进行破解(寻找入口,快速定位的方法有很多这里介绍的步骤只起到一个抛砖引玉的作用):

  1. 第一步:寻找加密参数
  2. 第二步:定位发起程序
  3. 第三步:查看调用堆栈
  4. 第四步:分析加密入口
  5. 第五步:模拟加密过程

(2)响应数据加密反爬的解密时机

        解密通常在接收到服务器响应后进行,但在将数据呈现给用户之前。例如,某小说网站的小说加密内容,就是在渲染给读者之前,通过JS代码解密成明文再呈现。响应数据加密通常涵盖服务器返回的所有数据类型,包括HTML内容、JSON数据、图片、视频等。

于是可以通过这样的步骤来进行破解(寻找入口,快速定位的方法有很多这里介绍的步骤只起到一个抛砖引玉的作用):

  1. 第一步:寻找加密数据
  2. 第二步:定位发起程序
  3. 第三步:查看调用堆栈
  4. 第四步:分析解密入口
  5. 第五步:模拟解密过程

相关文章:

  • C# Winform画图绘制圆形
  • c 函数 memset使用注意事项
  • Spring中最常用的11个扩展点
  • Vue+SpringBoot打造超市账单管理系统
  • [最佳实践] conda环境内安装cuda 和 Mamba的安装
  • 详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
  • leetcode 热题 100_找到字符串中所有字母异位词
  • 计算机组成原理-第七章 输入/输出系统【期末复习|考研复习】
  • 企业数字人虚拟形象定制解决方案
  • [SpringCloud] OpenFeign核心架构原理 (一)
  • 『运维备忘录』之 RegEx 正则表达式实例汇总
  • 学习JAVA的第十三天(基础)
  • 芋道项目部署问题指南
  • 常用“树”数据结构
  • 通信棒自动化测试工具
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • LintCode 31. partitionArray 数组划分
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • vue数据传递--我有特殊的实现技巧
  • 程序员该如何有效的找工作?
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 聊聊directory traversal attack
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 微信小程序--------语音识别(前端自己也能玩)
  • ​低代码平台的核心价值与优势
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #QT项目实战(天气预报)
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $forceUpdate()函数
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)构建dubbo分布式平台-平台功能导图
  • (七)c52学习之旅-中断
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (原)Matlab的svmtrain和svmclassify
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • .htaccess配置常用技巧
  • .htaccess配置重写url引擎
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net framework4与其client profile版本的区别
  • .Net 高效开发之不可错过的实用工具
  • .NET 使用 XPath 来读写 XML 文件
  • .Net 应用中使用dot trace进行性能诊断
  • .net6+aspose.words导出word并转pdf
  • .net连接MySQL的方法
  • .so文件(linux系统)
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • ::前边啥也没有
  • @Autowired标签与 @Resource标签 的区别
  • @Bean, @Component, @Configuration简析
  • @Transactional类内部访问失效原因详解