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.hqwc.cn/news/700074.html

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

相关文章

ORACLE ODA一体机存储节点电源故障的分析处理

近期,某用户的ORACLE ODA一体机在例行机房巡检时出现亮黄灯告警;用户反馈次问题后我们立刻通过远程方式,登陆ODA的控制台进行查看; 对于ODA一体机(2个计算节点1个存储节点),计算节点可以通过il…

HTTP协议及应用

一.HTTP协议 1.HTTP协议版本 HTTP1.0:服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态); HTTP1.1:KeepAlived长连接避免了连接建立和…

卷积神经网络CNN的运行过程、常见术语与问题

目录 一、CNN运行过程 1、卷积(Convolution) 2、激活函数(activation function) 3、池化(pooling) 3.1 池化操作 3.2 池化过程 3.3 池化后结果 4、Flatten 5、全连接层 Flatten层的操作 全连接层…

MyBatis常见报错:org.apache.ibatis.binding.BindingException

哈喽,大家好,我是木头左! 异常现象描述 当开发者在使用MyBatis进行数据库操作时,可能会遇到org.apache.ibatis.binding.BindingException: Parameter appId not found这样的错误提示。这个错误通常会让程序无法正常运行&#xff…

namenode启动失败 org.apache.hadoop.hdfs.server.common.InconsistentFSStateException:

小白的Hadoop学习笔记 2024/5/14 18:26 文章目录 问题解决报错浅浅分析一下core-ste.xml 问题 namenode启动失败 读日志 安装目录下 vim /usr/local/hadoop/logs/hadoop-tangseng-namenode-hadoop102.log2024-05-14 00:22:46,262 ERROR org.apache.hadoop.hdfs.server.namen…

ov通配符证书1590

OV通配符SSL证书也可以称之为OV企业型泛域名SSL证书,指的是专为企事业单位准备的通配符SSL证书,不仅可以用一张SSL证书保护主域名以及主域名下所有的子域名,还可以为多个域名网站进行身份认证服务。今天就随SSL盾小编了解性价比较高的OV通配符…

端口号查询进程PID

情况1:由于 idea 突然闪退,导致正在 debug 的 Java 进程没结束掉,端口还在占用,重新 debug 不了,所以需要到任务管理器把进程结束掉 但问题是如果当任务管理器进程同时有多个 Java 进程在运行(而且名字一样…

涨点神器:即插即用特征融合模块!超低参数,性能依旧SOTA

在写论文时,一些通用性模块可以在不同的网络结构中重复使用,这简化了模型设计的过程,帮助我们加快了实验的迭代速度。 比如在视觉任务中,即插即用的特征融合模块可以无缝集成到现有网络中,以灵活、简单的方式提升神经…

推荐5个实用的工具软件,提高效率

​ 现在,有很多实用的工具和软件可以帮助我们更高效地完成各种任务。以下是几个值得推荐的工具和软件,能够极大地提高我们的工作效率。 1.浏览器插件——SuperCopy ​ SuperCopy是一款浏览器插件,主要用于增强网页文本的复制功能。它解决了…

曲线救国:window 安装 docker

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

深入解析RedisJSON:在Redis中直接处理JSON数据

码到三十五 : 个人主页 JSON已经成为现代应用程序之间数据传输的通用格式。然而,传统的关系型数据库在处理JSON数据时可能会遇到性能瓶颈。为了解决这一问题,Redis推出了RedisJSON模块,它允许开发者在Redis数据库中直接存储、查询…

C语言(指针)7

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…