Python爬虫逆向——某公开数据网站实例小记(二)

注意!!!!某XX网站逆向实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!!

第一步:分析页面和请求方式

aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=

此网站经过分析,可以看出请求网址和参数均无加密,响应内容无加密。真正可以让我们进行学习的则是headers里两个比较明显的参数,可以看出是可以研究的。X-Dgi-Req-Nonce 和X-Dgi-Req-Signature

第二步:请求页面并分析请求,定位headers

经过分析,headers里的内容有加密参数,则我们开始全文找headers。经过 search 全文找,可以检索到N多的headers相关的内容。我们不能一个一个去验证,很麻烦。因此我暂时按照我的方式进行headers定位(不是最优方案,仅做参考)

在请求前,将请求段(不一定完整的请求)添加在XHR/fetch Breakpoints 中,进行请求。可以看到请求后,断点会在send 处停止,此刻我们在当前页可以 检索 headers = ,可以看到有17处,由于不确定真正位置,因此,我们将17处依次打了断点。清除cookie ,去掉 XHR/fetch Breakpoints 的断点。重新请求

第三步:headers定位,以及确定参数加密位置进行分析

重新请求后,依次查看headers断点,可以看到o.headers 中已经有加密后的内容。因此我们可以看到 a, l,c 均已生成

第四步:逆向分析加密信息

确定加密位置后,可以将headers相关的断点勾掉。对a, l, c处进行断点添加。重新请求。(这一步可以省略,主要是为了显示加密后内容)。

可以看到X-Dgi-Req-Nonce 是由l 生成的。l=hne(16)

而 X-Dgi-Req-Signature  是由t1 (p:s, t:a, n:l, k:c) 生成 ,s 是请求参数(在调试中会慢慢呈现,默认是undefined);a 是时间戳毫秒级;l 是 X-Dgi-Req-Nonce;c是常量 。【注意这部分经过调试即可】。注意!注意!注意! 调试过程中会遇到函数uk(),经过一步一步分析,可知函数uk 是sha256 的加密方法,所以确定加密方式可以直接使用 js crypto-sha256进行加密即可

第五步:代码展示

/* =====================
#@Time : 2024/5/9 15:58
#@Author: 水兵没月
#@File : XXXXXXXXXX.js
#@Software: PyCharm
=======================*/const crypto = require('crypto');//  X-Dgi-Req-Nonce
const lF = "zxcvbnmlkjhgfdsaqwertyuiop0987654321QWERTYUIOPLKJHGFDSAZXCVBNM", fne = lF + "-@#$%^&*+!";
function qu(e=[]) {return e.map(t=>fne[t]).join("")
}function dne(e, t) {switch (arguments.length) {case 1:return parseInt(Math.random() * e + 1, 10);case 2:return parseInt(Math.random() * (t - e + 1) + e, 10);default:return 0}
}function Nonce() {var e = 16return [...Array(e)].map(()=>lF[dne(0, 61)]).join("")
}// l = Nonce(e)
// X-Dgi-Req-Timestamp
function Timestamp (){return Date.now()
}// X-Dgi-Req-Signature
// c = qu([8, 28, 20, 42, 21, 53, 65, 6])
// d = {
//     [qu([56, 62, 52, 11, 23, 62, 39, 18, 16, 62, 54, 25, 25])]: qu([11, 11, 0, 21, 62, 25, 24, 19, 20, 15, 7]),
//     [qu([56, 62, 52, 11, 23, 62, 39, 18, 16, 62, 60, 24, 5, 2, 18])]: Nonce(),
//     [qu([56, 62, 52, 11, 23, 62, 39, 18, 16, 62, 40, 23, 6, 18, 14, 20, 15, 6, 25])]: Timestamp()
// }function pne(e) {let t = "";return typeof e == "object" ? t = Object.keys(e).map(n=>`${n}=${e[n]}`).sort().join("&") : typeof e == "string" && (t = e.split("&").sort().join("&")),t
}
function uK(str) {const hash = crypto.createHash('sha256');hash.update(str);return hash.digest('hex');
}
function Signature(e={}) {const {p: t, t: n, n: u, k: o} = e, r = pne(t);console.log(u + o + decodeURIComponent(r) + n)return uK(u + o + decodeURIComponent(r) + n)
}// console.log(Nonce())
// console.log(Timestamp())
// console.log(Signature({p: 'keyword=&openConvert=false&pageNo=1&pageSize=10&projectType=&publishEndTime=&publishStartTime=&secondType=A&siteCode=44&thirdType=%5B%5D&tradingProcess=&type=trading-type', t: Timestamp(), n: Nonce(), k: 'k8tUyS$m'}))

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

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

相关文章

Oracle21c数据库普通用户创建及授权,建表,创建存储过程、序列、触发器

一、Oracle数据库错误 ORA-65096 表示你尝试在多租户容器数据库(CDB)环境中创建一个公共用户(common user)或角色,但没有使用正确的前缀。在多租户架构中,公共用户的用户名必须以 C## 或 c## 开头。 若想…

【python】将json内解码失败的中文修改为英文(‘utf-8‘ codec can‘t decode,labelme标注时文件名未中文)

出现问题的场景: 语义分割数据集,使用labelme工具进行标注,然后标注图片存在中文名,导致json标签文件写入中文图片名,从而解析失败。 代码解析json文件时,出现报错: python脚本需求&#x…

uniapp日期区间选择器

uniapp日期区间选择器 在 uniapp 中创建一个简单的自定义日期范围的日期区间选择器: - 限制有效日期范围开始日期为 2024-01-01,结束日期为当日; - 默认日期区间为当日向前计算的7日区间; - 选择开始时间后,判断不可大…

【Gaea+UE5】创建基本的大型世界场景

目录 效果 步骤 一、在Gaea中生成地形 二、确定导出的地形规模 三、在UE中创建地形 四、验证UE创建的地形规模是否正确 五、使用M4自动地形材质 效果 步骤 一、在Gaea中生成地形 1. 打开Gaea官网下载软件 2. 打开Gaea软件,我们可以选择一个预设的山体 创…

C++哈希(个人笔记)

C哈希 1.unordered_mapd1.1unordered_map的构造函数1.2unorder_map的容量1.3unordered_map的迭代器1.4unordered_map的元素访问1.5unorder_map的查找1.6unordered_map的修改操作1.7unordered_map的桶操作 2.unordered_set3.unordered_set和unordered_set的笔试题4.哈希4.1哈希概…

Java全局异常处理,@ControllerAdvice异常拦截原理解析【简单易懂】

https://www.bilibili.com/video/BV1sS411c7Mo 文章目录 一、全局异常处理器的类型1-1、实现方式一1-2、实现方式二 二、全局异常拦截点2-1、入口2-2、全局异常拦截器是如何注入到 DispatcherServlet 的 三、ControllerAdvice 如何解析、执行3-1、解析3-2、执行 四、其它4-1、设…

CorelDRAW2024新特性全解析!

CorelDRAW2024是一款备受赞誉的图形设计软件,它以其强大的功能和用户友好性赢得了全球数百万设计师的青睐。该软件提供了丰富的绘图、排版、图像处理、矢量编辑以及网页设计工具,无论是初学者还是专业设计师,都能在这款软件中找到满足自己需求…

精品录播|电磁场数值仿真技术及天线设计与应用

电磁场数值仿真技术及天线设计与应用

【技术分享】 OPC UA安全策略证书简述

那什么是OPC UA证书?用途是什么? 简单来说它是身份验证和权限识别。 OPC UA使用X.509证书标准,该标准定义了标准的公钥格式。建立UA会话的时候,客户端和服务器应用程序会协商一个安全通信通道。数字证书(X.509&#x…

Android Compose四: 常用的组件 Text

Text Composable fun Text(text: String, //用于设置显示文本modifier: Modifier Modifier, //设置形状大小点击事件等color: Color Color.Unspecified, //fontSize: TextUnit TextUnit.Unspecified,fontStyle: FontStyle? null,fontWeight: FontW…

RockChip Android8.1 EthernetService分析

一:概述 本篇文章将围绕RK Android8.1 SDK对Ethernet做一次框架分析,包含Framework层和APP层。 当前版本SDK默认只支持一路Ethernet,熟悉Ethernet工作流程后通过修改最终会在系统Setting以太网中呈现多路选项(可以有多种实现方式),博主通过增加ListPreference实现的效果…

Linux 操作系统网络编程1

目录 1、网络编程 1.1 OSI 网络七层模型 1.1.1 OSI 参考模型 1.1.2 网络数据传输过程 2 传输层通信协议 2.1 TCP 2.1.1 TCP的3次握手过程 2.1.2 TCP四次挥手过程 2.2 UDP 3 网络编程的IP地址 4 端口 5 套接字 1、网络编程 1.1 OSI 网络七层模型 1.1.1 OSI 参考模型…

5月13号作业

使用消息队列实现的2个终端之间的互相聊天 并使用信号控制消息队列的读取方式: 当键盘按ctrlc的时候,切换消息读取方式,一般情况为读取指定编号的消息,按ctrlc之后,指定的编号不读取,读取其他所有编号的消息…

【江南大学×朗汀留学】部分留学录取案例合集

朗汀留学 X 江南大学 尽管客观条件如此艰难,朗汀留学的同学们还是斩获众多名校的录取。成绩属于过去,我们继续努力创造更好未来。 以下为我们摘取的江南大学部分学生案例供大家参考,再次恭喜所有获得理想大学offer的学生们,你们…

C# OpenCvSharp Demo - Mat格式化输出、Mat序列化和反序列化

C# OpenCvSharp Demo - Mat格式化输出、Mat序列化和反序列化 目录 效果 项目 代码 下载 效果 直接输出:Mat [ 3*2*CV_8UC3, IsContinuousTrue, IsSubmatrixFalse, Ptr0x1eb73ef9140, Data0x1eb73ef91c0 ]格式化输出:默认风格[ 91, 2, 79, 179, …

【计算机网络】http协议的原理与应用,以及https是如何保证安全传输的

HTTP 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆伯纳斯-李于1989年在欧洲核子研究组织…

Web3Tools - 助记词生成

Web3Tools - 助记词生成工具 本文介绍了一个简单的助记词生成工具,使用 React 和 Material-UI 构建。用户可以选择助记词的语言和长度,然后生成随机的助记词并显示在页面上 功能介绍 选择语言和长度: 用户可以在下拉菜单中选择助记词的语言&…

Linux x86_64 dump_stack()函数基于FP栈回溯

文章目录 前言一、dump_stack函数使用二、dump_stack函数源码解析2.1 show_stack2.2 show_stack_log_lvl2.3 show_trace_log_lvl2.4 dump_trace2.5 print_context_stack 参考资料 前言 Linux x86_64 centos7 Linux:3.10.0 一、dump_stack函数使用 dump_stack函数…

大模型prompt实例:知识库信息质量校验模块

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模…

DRF 纯净版创建使用

【一】介绍 (1)使用原因 在Django中,contrib 包包含了许多内置的app和中间件,如auth、sessions、admin等,这些app在创建新的Django项目时默认是包含在内的。然而,在开发RESTful API时,可能不需…