网站数据加密之Hook通用方案

文章目录

  • 1. 写在前面
  • 2. 请求分析
  • 3. 编写Hook
  • 4. 其他案例

【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章

1. 写在前面

  分析网站开发爬虫的时候,像头部信息参数加密与请求参数加密很常见,但是接口返回数据加密也不会少!作者过往的文章中数据加密的案例就不下三个,感兴趣的可以翻看作者早期的文章

那么好!本期作者也是找到了多个网站,均为响应数据加密。将针对此类场景做一个深度分析与讲解,并给出一个绝大部分场景下能够通杀的极简Hook方案,来辅助我们快速定位到解密入口

需要自行分析及学习的小伙伴可以向作者获取具体的网站集合(数据响应加密类网站

2. 请求分析

首先,打开网站点击下一页,进行一个发包调试,请求信息如下所示:

在这里插入图片描述
接口响应JSON中的data字段可以看到是一段密文。这里大家需要知道的一点就是(尤其新手小白),但凡这种情况,尽管它的网络传输都是通过密文在传输,但前端是一定有相应解密算法的,最终我们看到的页面正常数据都是通过算法解密再渲染到HTML中呈现给用户浏览的

3. 编写Hook

既然在上面我们知道接口返回的是JSON格式的数据,那么我们在编写Hook的时候直接在这上面操作。因为它后端返回这串含加密数据的JSON,前端就需要获取data字段进行解密,在此之前会将它转换成对象格式

所以我们需要编写一段极简的Hook脚本,具体代码如下所示:

var data_parse = JSON.parse;
JSON.parse = function (params){debugger;console.log("request data:",params);return data_parse(params);
}

Hook脚本可以直接放到控制台运行,只要响应的密文数据是JSON格式,上述Hook方案就会立马断住,将分别拦截到加密前与解密后的数据,如下所示:

在这里插入图片描述

在上面成功Hook到了加密数据响应,这里继续执行往下走,成功拦截解密数据,如下所示:

在这里插入图片描述

这个时候,密文如何解密是我们需要关注的!需要分析一下堆栈调用,找到具体的解密入口。然后剩下的就是扣代码算法还原了!如下所示er就是解密方法:

在这里插入图片描述

这里需要注意的是,解密数据Hook到之后,跟栈从前去查看就行,自下而上为入栈加密到出栈解密

4. 其他案例

既然说这是一个通杀的解决思路与方案,当然不会只是说说而已!这里作者也是找了多个网站的案例,它们的特征均为接口响应数据加密

接下来同样使用上面的极简Hook拦截,下面我们看一个的是一个Gov相关网站,点击翻页发包,显示响应数据是一堆密文,如下所示:

在这里插入图片描述

这里我们使用Hook脚本进行拦截,如下所示:

在这里插入图片描述

如上Hook到加密数据,继续执行再次拿到解密数据,如下所示:

在这里插入图片描述

找解密入口,这里我们跟一下栈,来到解密调用的地方,如下:

在这里插入图片描述

下个断点看看,断住后我们直接进入到上图中的b方法内部,查看具体的解密逻辑。可以看到很明显的AES.decrypt解密代码,如下所示:

decrypt

是不是就可以借助Hook辅助我们快速定位到数据的解密入口!接下来我们再看看其他的案例,本期作者不会讲到具体的加密算法还原、分析、甚至是扣代码。本文中的所有网站案例数据解密的还原难度还是很简单的,所有大家感兴趣可以自行研究!

下面我们来看看另一个网站,同样接口数据加密,如下所示:

在这里插入图片描述

可以看到接口响应数据是密文,Hook一下,如下所示:

在这里插入图片描述

最后我们再来看一个示例,这是一个图片网站,我们点击翻页查看接口加载,如下所示:

1696040

启动Hook,看一下是否可以拦截到加密数据,如下所示:

在这里插入图片描述

拦截到密文数据,继续执行一下,照常Hook解密数据,如下所示:

在这里插入图片描述

Hook到解密数据的时候我们就可以跟栈,去查看解密调用的入口,如下所示:

在这里插入图片描述

可以看到上图解密的时候,获取了JSON数据内的result字段,这个字段就是接口响应的加密JSON内的密文数据!

至此,针对网站接口响应数据加密的类似场景,以上的Hook方案或许能够成为你的好帮手!

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

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

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

相关文章

SpringBoot+Vue全栈开发-刘老师教编程(b站)(二)

创建SpringBoot项目 1.配置maven 出现bug java: 无法访问org.springframework.boot.SpringApplication 错误的类文件: /D:/maven/repository/org/springframework/boot/spring-boot/3.0.0/spring-boot-3.0.0.jar!/org/springframework/boot/SpringApplication.class 类…

FPGA高端项目:FPGA基于GS2971的SDI视频接收转HDMI输出,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI图像缩放应用本方案的SDI纯verilog图像缩放视频拼接应用本方案的SDI HLS图像缩放视频拼接应用本方案的SDI视频编码动态字符叠加输出应用本方案的SDI视频编码多路视频融合视频叠加应用本方案的SDI视频…

云计算与边缘计算:有何不同?

公共云计算平台可以帮助企业充分利用全球服务器来增强其私有数据中心。这使得基础设施能够扩展到任何位置,并有助于计算资源的灵活扩展。混合公共-私有云为企业计算应用程序提供了强大的灵活性、价值和安全性。 然而,随着分布在全球各地的实时人工智能应…

mac命令行下计算文件SHA-256散列值

源起 从国内的第三方网站下载了Android sutiod的zip包下载地址,为了安全起见还是得跟Android官网上的对应的zip包的SHA值做下对比。以前是经常使用md5命令的,所以理论在命令行下应该是有对应的命令行工具可以计算SHA值的。后来搜索到可以用 shasum命令来…

目标检测——车辆数据集

一、背景介绍 VOC2005车辆数据集是PASCAL VOC挑战赛中的一个重要组成部分,该挑战赛始于2005年,旨在为计算机视觉领域的研究者和开发者提供一个统一的、标准化的评估平台。PASCAL VOC挑战赛不仅推动了图像识别、目标检测、图像分割等技术的发展&#xff…

类和对象(1)——开启C++学习之旅

目录 一、过程性编程和面向对象编程 二、类的定义 2.1类的定义语法 2.2类的定义方式 三、类的访问限定符 四、封装 五、类对象模型 5.1类的实例化 5.2类对象的存储方式 六、this指针 6.1什么是this指针 6.2 this指针的特性 一、过程性编程和面向对象编程 C语言是面…

通过elementUI学习vue

<template><el-radio v-model"radio" label"1">备选项</el-radio><el-radio v-model"radio" label"2">备选项</el-radio> </template><script>export default {data () {return {radio: 1}…

南京观海微电子----Verilog基础(一)——数据类型、运算符

1. 数据类型 1.1 常量 整数&#xff1a;整数可以用二进制b或B&#xff0c;八进制o或O&#xff0c;十进制d或D&#xff0c;十六进制h或H表示&#xff0c;例如&#xff0c;8’b00001111表示8位位宽的二进制整数&#xff0c;4’ha表示4位位宽的十六进制整数。 X和Z&#xff1a;X…

算法沉淀——动态规划之子序列问题(下)(leetcode真题剖析)

算法沉淀——动态规划之子序列问题 01.最长定差子序列02.最长的斐波那契子序列的长度03.最长等差数列04.等差数列划分 II - 子序列 01.最长定差子序列 题目链接&#xff1a;https://leetcode.cn/problems/longest-arithmetic-subsequence-of-given-difference/ 给你一个整数数…

编码技巧——Springboot工程加密yml配置/Maven引入本地二方包

1. 背景 基于Springboot的工程项目&#xff0c;通常很多信息都是在application.yml中直接明文配置的&#xff0c;比如数据库链接信息&#xff0c;redis链接信息等&#xff1b; 为了安全考虑&#xff0c;公司打算将yml配置文件中的数据库连接信息的账号&#xff0c;密码进行加…

mini-spring|关于Bean对象作用域以及FactoryBean的实现和使用

需求 FactoryBean 直接配置FactoryBean 获取FactoryBean中的Bean对象 FactoryBean的getObject方法通过反射获取Bean对象 由此省去对实体Dao类的定义 解决方法 对外提供一个可以二次从 FactoryBean 的 getObject 方法中获取对象的功能即可 整体架构 整个的实现过程包括了两部…

Redis持久化的两种方式RDB和AOF详解

小伙伴们好&#xff0c;欢迎关注&#xff0c;一起学习&#xff0c;无限进步 以下内容为学习 Redis 过程中的笔记 文章目录 Redis持久化RDB&#xff08; Redis DataBase &#xff09;触发机制&#xff1a;如何恢复rbd文件&#xff1a;优点&#xff1a;缺点&#xff1a; AOF &…

【文献管理】zotero插件4——获取知网pdf、中文文献识别与目录生成

文章目录 zotero获取知网PDFzotero——中文文献识别&#xff08;茉莉花插件&#xff09;学位论文目录生成 zotero获取知网PDF zotero——中文文献识别&#xff08;茉莉花插件&#xff09; 为下载的学位论文添加目录中文文献识别&#xff1a;jasminum 下载pdflabs下载茉莉花插…

C++——类的6个默认成员函数

目录 类中的6个默认成员函数 构造函数 构造函数的特点 初始化列表 隐式类型转换 析构函数 拷贝构造函数 赋值重载 运算符重载 赋值重载 取地址重载 类中的6个默认成员函数 类中的6个默认成员函数根据不同的作用可以分为&#xff1a; 初始化和使用后清理&#xff1a;…

YOLOv8改进,添加GSConv+Slim Neck,有效提升目标检测效果,代码改进(超详细)

目录 摘要 主要想法 GSConv GSConv代码实现 slim-neck slim-neck代码实现 yaml文件 完整代码分享 总结 摘要 目标检测是计算机视觉中重要的下游任务。对于车载边缘计算平台来说&#xff0c;巨大的模型很难达到实时检测的要求。而且&#xff0c;由大量深度可分离卷积层构…

Java Web(十一)--JSON Ajax

JSON JSon在线文档&#xff1a; JSON 简介 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。轻量级指的是跟xml做比较。数据交换指的是客户端和服务器之间业务数据的传递格式。 它基于 ECMAScript (W3C制定的JS规范)的一个子集&#xff0c;采…

Stable Cascade发布:比SDXL更快、更强的图像生成模型

前言 StabilityAI在春节期间发布了新的一代文生图模型Stable Cascade&#xff0c;Stable Cascade是基于Wuerstchen架构包含三阶段的文生图扩散模型&#xff0c;为质量、灵活性、微调和效率设定了新的标准&#xff0c;着重于进一步消除硬件障碍。相比Stable Diffusion XL&#…

《Decoupling Representation and Classifier for Long-Tailed Recognition》阅读笔记

论文标题 《Decoupling Representation and Classifier for Long-Tailed Recognition》 用于长尾识别的解耦表示和分类器 作者 Bingyi Kang、Saining Xie、Marcus Rohrbach、Zhicheng Yan、 Albert Gordo、Jiashi Feng 和 Yannis Kalantidis 来自 Facebook AI 和 新加坡国…

Linux笔记--文件权限

一、相关概念 Linux最优秀的地方之一就在于多人多任务环境。为了让各个使用者有较为保密的文件数据&#xff0c;文件的权限管理尤为重要。 ●文件的可存取身份: owner:文件拥有者 group:文件所属用户组 others:其他人 ●文件权限: r: read&#xff0c;读 文件:是否能查看文件内…

Carla自动驾驶仿真八:两种查找CARLA地图坐标点的方法

文章目录 前言一、通过Spectator获取坐标二、通过道路ID获取坐标总结 前言 CARLA没有直接的方法给使用者查找地图坐标点来生成车辆&#xff0c;这里推荐两种实用的方法在特定的地方生成车辆。 一、通过Spectator获取坐标 1、Spectator&#xff08;观察者&#xff09;&#xf…