十八:爬虫-JS逆向(下)

一:AESDES

DES对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者。和信息的接收者在进行信息的传输与处理时,必须共同持有该密钥(称为对称密码),是一种对称加密算法。一般来说加密用的是encrypt()函数,解密用的是decrypt()函数。
AES/DES加密解密网址: https://www.sojson.com/encrypt.html

1.AESDES的区别

  • 加密后密文长度不同
    • DES加密后密文长度是8的整数倍
    • AES加密后密文的长度是16的整数倍
  • 安全度不同
    • 一般情况下DES足够安全
    • 如果要求高可以使用AES
  • DESAES切换只需要修改CryptoJS.DES =>CryptoJS.AES

2.RSA介绍

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。有两把对应密钥,公钥和私钥。用公钥加密只能用私钥解开,用私钥加密只能用公钥解密。
RSA加密解密网址:https://oktools.net/rsa

  • 公开密钥(publickey:公钥)
  • 私有密钥(privatekey:私钥)
  • 公钥和私钥是一对

二:fiddler抓包工具

1.什么是fiddler

概念: Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯。
官网:https://www.telerik.com/fiddler
Windows安装fiddler:https://www.cnblogs.com/temari/p/13418037.html

2.fiddler的功能强大

  • 支持IEChromeFireFox等等浏览器
  • 可以在phonepad等移动设备进行连接
  • https://www.cnblogs.com/conquerorren/p/8472285.html
  • https://www.cnblogs.com/woaixuexi9999/p/9247705.html

3.fiddler抓包工具原理

图解:

image.png
具体步骤:
1、客户端 向服务器 发起 HTTPS 请求
2、fiddler拦截客户端请求,伪装成客户端向服务器进行请求
3 、服务器 向 客户端 返回服务器的 CA证书。 (实际上已经被fiddler拦截)
4、fiddler拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,替代服务器的证书后发给客户端。
5、客户端接收到服务器(实际上是fiddler的证书) 的证书后,生成一个对称秘钥,并用fiddler发送回来的证书公钥加密,发送给 服务器(实际发送给了fiddler)
6、fiddler拦截客户端的响应,用自己的私钥解密对称秘钥 (这里已经拿到了对称秘钥),然后用服务器证书公钥加密,发送给服务器。
7、服务器用自己的私钥解密对称秘钥,向客户端(实际是fiddler)发送 响应
8、fiddler拦截服务器响应,替换成自己的证书会后发送给客户端。
9、至此,链接建立, fiddler拿到了 服务器证书的公钥和客户端和服务器协商的对称秘钥,之后就可以解密或者修改加密的报文了。

4.fillder配置移动数据包

fiddler的配置:
  1. HTTPS
  • 1.1 让fiddler能够捕获https的请求

  • 1.2 安装证书




  • 1.3 检查证书是否安装成功


2. Connections


最后点击"OK", 重启fiddler
win7参考https://blog.csdn.net/qq_35189120/article/details/126514770

三:代码实例

1.需求

获取雪球热帖数据:
image.png

2.目标网址

https://xueqiu.com/today#/

3.详细步骤

(1)确定数据接口

image.png
image.png

(2)验证反爬并找到反爬参数

image.png
image.png

(3)确定cookie反爬参数
import requestsheaders = {"Accept": "*/*","Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8","Cache-Control": "no-cache","Connection": "keep-alive","Pragma": "no-cache","Referer": "https://xueqiu.com/today","Sec-Fetch-Dest": "empty","Sec-Fetch-Mode": "cors","Sec-Fetch-Site": "same-origin","User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36","X-Requested-With": "XMLHttpRequest","elastic-apm-traceparent": "00-be07869557648708e851c1c12256571e-02aff688370889e7-00","sec-ch-ua": "\"Chromium\";v=\"118\", \"Google Chrome\";v=\"118\", \"Not=A?Brand\";v=\"99\"","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "\"macOS\""
}
cookies = {"acw_tc": "2760827616983046343678048ecca70edab9018ffae9e3f803778ce02ed758","acw_sc__v2": "653a13fa088f0aa6583d357bc0b311b21f86ee76","xq_a_token": "e2f0876e8fd368a0be2b6d38a49ed2dd5eec7557","xqat": "e2f0876e8fd368a0be2b6d38a49ed2dd5eec7557","xq_r_token": "2a5b753b2db675b4ac36c938d20120660651116d","xq_id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcwMDY5OTg3NSwiY3RtIjoxNjk4MzA0OTk2MzgyLCJjaWQiOiJkOWQwbjRBWnVwIn0.R-BOElv8npRZjzcwE0es_6Ex1qIL2CGm3Rgr07o3E7BrTkmvLr83gliSH0JMVyqUKa80yJZQIdPODyNZIuGXcAZ0TUl4Hcl921wjExzlwI2LjuTuXkZRyi-0qEBOHUJUXR1f42naARFS35wytf-ptEzE70lDn60AXuYXS3Aa-jswDXwHKMwLBOX7w5K8Eyo8Oa6kzWapHHUqb5xNZ8m2FdLaWUEoKNzIXk_euqfFH2X37C4lSoFZY3P6Wf_vcca0vszGBLRXwtXM2Iu9e8-AIy_d2mZC-bCVQWdLuqJydgSGi9uo9SquQAEm_f7Y4jrQIPh_2SSUjVPzwXCx0_0zhw","cookiesu": "821698305020757","u": "821698305020757","device_id": "1dfbc883865d3be224360f9104867c1d","Hm_lvt_1db88642e346389874251b5a1eded6e3": "1698305021","Hm_lpvt_1db88642e346389874251b5a1eded6e3": "1698305333"
}
url = "https://xueqiu.com/statuses/hot/listV2.json"
params = {"since_id": "-1","max_id": "-1","size": "15"
}
response = requests.get(url, headers=headers,cookies=cookies,params=params)print(response.text)
print(response)

image.png
image.png

(4)寻找xqatxq_a_token参数值

image.png
清空cookie 刷新页面 过掉debuger filter查找分析:
image.png
image.png
image.png

(5)分析acw_sc__v2的参数生成

由于acw_sc__v2是在cookie中生成的,所以咱们直接下hook_cookie脚本
清空缓存、数据包、打上script断点、刷新页面、遇到无限debugger
image.png
image.png
image.png
混淆代码详细解读:
image.png
image.png

image.png

(6)详细推演acw_sc__v2的生成逻辑

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

(7)arg1_0x5e8b26变量值的寻找

image.png
_0x5e8b26为固定生成的值,没必要去分析怎么生成的原理了 但是arg1是每次变化的 所以咱们继续分析
image.png
发现就是一变量 实际上就是咱们对gettoday1发请求的js代码中的值:
image.png
获取arg1的值:
image.png

(8)重构python代码 进行逆向还原

image.png
image.png
image.png

(9)对获取json数据进行解析提取 提取出目标字段

解析这一块就很简单我就不说了 提醒一点 如果要在详情页中获取数据 找这个参数即可:
image.png

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

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

相关文章

thinkadmin安装步骤

一,先cmd运行安装命令 ### 创建项目( 需要在英文目录下面执行 ) composer create-project zoujingli/thinkadmin二,在confing中的database.php配置数据库 三,将仓库的data复制到app目录下 https://gitee.com/zoujingli/think-plugs-data 四,在cmd运行命令安装数据库 //…

第二百五十二回

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了如何在页面中添加图片相关的内容,本章回中将介绍如何给组件添加阴影.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的阴影类似影子,只是它不像影子那么明显&a…

PTA | 6-2 使用函数实现字符串部分复制

题目 本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。 函数接口定义: void strmcpy( char *t, int m, char *s );函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串…

C++/OpenGL应用程序

图像应用程序大部分是 C 编写,OpenGL 调用实现与 3D 渲染相关任务将会使用一些扩展库: GLEW、GLM、GLFW、SOLL2 等。 GLFW 库包含 GLFWwindow 类,我们可以在其上进行 3D 场景绘制。OpenGL 也向我们提供了用于 GLSL 程序载入可编程着色阶段并对其进行编译…

YOLOv5改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)

一、本文介绍 本文给大家带来的改进机制是融合改进,最近有好几个读者和我反应单独的机制都能够涨点,一融合起来就掉点,这是大家不了解其中的原理(这也是为什么我每一个机制都给大家讲解一下原理,大家要明白其中的每个单独的机制涨点原理然后才能够更好的融合,有一些结构是…

【微服务】springcloud集成skywalking实现全链路追踪

目录 一、前言 二、环境准备 2.1 软件环境 2.2 微服务模块 2.3 环境搭建 2.3.1 下载安装包 2.3.2 解压并启动服务 2.3.3 访问web界面 三、搭建springcloud微服务 3.1 顶层公共依赖 3.2 用户服务模块 3.2.1 准备测试使用数据库 3.2.2 添加依赖 3.2.3 添加配置文件 …

how2heap-2.23-11-poison_null_byte

什么是poison_null_byte 当然不止这一种&#xff0c;下面最简单的形式 #include <malloc.h> int main() {char * a malloc(0x200);char * b malloc(0x200);size_t real_size malloc_usable_size(a);a[real_size] 0;return 0; }影响&#xff1a; chunk a&#xff0…

OpenVINS学习6——VioManagerHelper.cpp,VioManagerOptions.h学习与注释

前言 VioManager类里还有VioManagerHelper.cpp,VioManagerOptions.h这两个文件&#xff0c;也包含了一些函数&#xff0c;这次接着看这个 。 整体分析 void VioManager::initialize_with_gt(Eigen::Matrix<double, 17, 1> imustate) 给一个状态&#xff0c;然后初始化…

【C语言】段错误、内存溢出、内存泄漏(区别)、堆溢出、栈溢出

目录 段错误内存溢出内存泄漏栈溢出堆溢出栈溢出和堆溢出区别 段错误 什么时候会发生段错误&#xff1f; 段错误通常发生在访问非法内存地址的时候&#xff0c;即使用了野指针&#xff08;指向一个已删除的对象或者未申请访问受限内存区域的指针&#xff09;或这试图修改字符串…

【Matplotlib】基础设置之图像处理05

图像基础 导入相应的包&#xff1a; import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np %matplotlib inline导入图像 我们首先导入上面的图像&#xff0c;注意 matplotlib 默认只支持 PNG 格式的图像&#xff0c;我们可以使用 mpimg.im…

MySQL深入——9

如何正确的显示随机信息&#xff1f; 我们来模拟在英语单词app当中随机出现三个英语单词的情况&#xff0c;我们首先创建一张表words&#xff0c;然后给这个表当中插入10000条信息进行量化。 select word from words order by rand() limit 3&#xff1b; order by rand&…

基础数据结构第七期 Trie树

前言 Trie树大家能够掌握即可&#xff0c;其实用到的地方并不多&#xff0c;本文将为大家介绍一下。 一、Trie树的基本内容 1、根节点不包含字符&#xff0c;除根结点之外每一个结点都只包含一个字符&#xff1b; 2、字典树用边表示字母表示 3、从根节点到某一结点&#xff…

游戏服务器整体架构思考

1.启动层 不管是单体架构还是微服务架构&#xff0c;其实服务器本身都是要启动的。 不管是用grpc实现远程调用&#xff0c;还是dubbo&#xff0c;还是说就一个简单的tcp监听&#xff0c;都是要启动的。 启动的时候&#xff0c;肯定要整合下controller接入层&#xff0c;不管是叫…

React07-路由管理器react-router

react-router 是一个流行的用于 React 应用程序路由的库。它使我们能够轻松定义应用程序的路由&#xff0c;并将它们映射到特定的组件&#xff0c;这样可以很容易地创建复杂的单页面应用&#xff0c;并管理应用程序的不同视图。 react-router 是基于 React 构建的&#xff0c;…

通过盲对抗性扰动实时击败基于DNN的流量分析系统

文章信息 论文题目&#xff1a;Defeating DNN-Based Traffic Analysis Systems in Real-Time With Blind Adversarial Perturbations 期刊&#xff08;会议&#xff09;&#xff1a;30th USENIX Security Symposium 时间&#xff1a;2021 级别&#xff1a;CCF A 文章链接&…

C# 的SequenceEqual

SequenceEqual 是 LINQ 扩展方法之一&#xff0c;用于比较两个序列&#xff08;如数组、列表等&#xff09;的元素是否相等。 该方法的详细定义如下&#xff1a; public static bool SequenceEqual<TSource>(this IEnumerable<TSource> first, IEnumerable<TS…

Spring之代理模式

1、概念 1.1 介绍 二十三种设计模式中的一种&#xff0c;属于结构型模式。它的作用就是通过提供一个代理类&#xff0c;让我们在调用目标方法的时候&#xff0c;不再是直接对目标方法进行调用&#xff0c;而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中…

H266/VVC率失真优化与速率控制概述

率失真优化技术 率失真优化&#xff1a; 视频编码的主要目的是在保证一定视频质量的条件下尽量降低视频的编码比特率&#xff0c;或者在一定编码比特率限制条件下尽量地减小编码失真。在固定的编码框架下&#xff0c;为了应对不同的视频内容&#xff0c;往往有多种候选的编码方…

126基于matlab的孪生支持向量机(Twin support vector machine,TWSVM)是SVM的一种变形算法

基于matlab的孪生支持向量机&#xff08;Twin support vector machine,TWSVM&#xff09;是SVM的一种变形算法。该采用WSVM进行二分类&#xff0c;程序已注释数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 126matlabTWSVM模式识别 (xiaohongshu.com)

【sklearn练习】鸢尾花

一、 import numpy as np from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier 第二行&#xff1a;导入datasets数据集 第三行&#xff1a;train_test_split 的作用是将数据集随机分配…