js逆向之实例某宝热卖(MD5)爬虫

目录

正常写

反爬

逆向分析

关键字搜索

打断点&分析代码

得出 sign 的由来

确定加密方式

写加密函数了

补全代码


免责声明:本文仅供技术交流学习,请勿用于其它违法行为.


正常写

还是老规矩,正常写代码,该带的都带上,我这种方法发现数据格式不完整.

应该后面也是大括号的.

--因为是get请求,所以我们看一下请求时的参数.

发现回调和一些类型.

那我们把那三个参数删了就行了.

然后直接 print(res.text) 拿到数据.(字符串)

转字典.

数据解析就OK啦...


那么,如何拿取多页数据呢???

通过分析,这是get请求,我们可以通过修改页数的参数获取数据.

反爬

但是...

--这里我们修改参数,发现竟然找不到此data键了,那是什么原因呢??!

逆向分析

那就分析数据包吧...

这里我们抓取三页的get请求载荷分析,

发现参数 t 和 sign 在变.

t 171开头,那就是时间戳了,肯定不同.

所以,我们就看看这个 sign 在搞什么鬼.

关键字搜索

所以,我们就要找 sign 关键字了.

打断点&分析代码

--继续,搜索,打断点,找'小偷'.

这里一个sign哎,好有问题,

一个断点,果然,停住了,说明调用了. 接着分析.

 if (d.H5Request === !0) {var f = "//" + (d.prefix ? d.prefix + "." : "") + (d.subDomain ? d.subDomain + "." : "") + d.mainDomain + "/h5/" + c.api.toLowerCase() + "/" + c.v.toLowerCase() + "/", g = c.appKey || ("waptest" === d.subDomain ? "4272" : "12574478"), i = (new Date).getTime(), j = h(d.token + "&" + i + "&" + g + "&" + c.data), k = {jsv: w,appKey: g,t: i,sign: j}#sign等于一个j值.#j值由h函数生成.

这里我们进入断点的时候,c.data断点不一样,需要我们进入.(别找错了值)

得出 sign 的由来

j = h(d.token + "&" + i + "&" + g + "&" + c.data)
d.token----->"144f4ba1ed9c3944eb03e90991372484"
i--------->1711435532424
g---------->12574478
c.data--->data的载荷
144f4ba1ed9c3944eb03e90991372484&1711435532424&12574478&data的载荷
#h()生成字符串,就是上面这一大坨.

选中h函数,有一个超链接,点进去.

确定加密方式

兄弟,我说这个怎么这么眼熟,js逆向入门那节我还特意截了图...

...怎么又是MD5加密.

怎么???不确定?? O.0

就是你!!! MD5

写加密函数了

j = h(d.token + "&" + i + "&" + g + "&" + c.data)
​
token:144f4ba1ed9c3944eb03e90991372484
此token在cookie里啊-->
_m_h5_tk=144f4ba1ed9c3944eb03e90991372484_1711444131624;
#因为cookie有时效性,所以过一段时间我们就要修改一下此参数值.(在cookie里面的_m_h5_tk)
------------------------------------------------------------------------------------------------------
i--------->1711435532424
​
import time
​
a = time.time()
#i--------->1711435532424
#           1711437621
#           1711437658229
​
print(int(a*1000))
#这个时间戳,我们保证位数相同就OK了.
------------------------------------------------------------------------------------------------------
g---------->12574478
#这个g是固定的,不信就多发几次请求.
--------------------------------------------------------------------------------------------
c.data--->#这个就是我们上面的载荷,太长了,不复制了.
​
​
def jiami(i):token = '4b075d78ac2dcffff8b11d4698b6188c'#24046e79bde126ac3fee2e8508fd0da6t = str(int(time.time()*1000))g = '12574478'
​c_data = '{"biz":"sem_single_pc","query":"{\\"keyword\\":\\"女装\\",\\"pid\\":\\"430673_1006\\",\\"sbid\\":\\"pcrm\\",\\"refpid\\":\\"mm_26632258_3504122_32538762\\",\\"clk1\\":\\"front_lu8bx4ug1n50nuva1ljh\\",\\"page\\":' + str(i) + ',\\"count\\":60,\\"offset\\":0}","feature":"predict_desc,promotion_price","spm":"a2e0b.20350158.31919782","app_pvid":"201_33.51.94.81_26284301_1711454667348","ctm":"spm-url:;page_url:https%3A%2F%2Fuland.taobao.com%2Fsem%2Ftbsearch%3Frefpid%3Dmm_26632258_3504122_32538762%26keyword%3D%25e5%25a5%25b3%25e8%25a3%2585%26clk1%3Da8eba43425e1e5ec18b3b33d575a5619%26upsId%3Da8eba43425e1e5ec18b3b33d575a5619"}'
​code = token + '&' + t + '&' + g + '&' + c_data# print('这是第%s页数据'%i)return hashlib.md5(code.encode()).hexdigest(),t,c_data# .hexdigest()   拿到密文值.

--这里我们写出加密函数.

sign的参数有了.

时间戳有了.

请求数据有了.

--最后补全代码就行了.

补全代码

--这里循环拿数据有点问题,希望有懂的佬指点一下,谢谢~~


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

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

相关文章

R语言学习——Rstudio软件

R语言免费但有点难上手,是数据挖掘的入门级别语言,拥有顶级的可视化功能。 优点: 1统计分析(可以实现各种分析方法)和计算(有很多函数) 2强大的绘图功能 3扩展包多,适合领域多 …

C#使用Stopwatch类来实现计时功能

前言 在 C# 中,Stopwatch 类是用于测量经过的时间的工具类,提供了高精度的计时功能。Stopwatch 类位于 System.Diagnostics 命名空间中。通常情况下,使用 Stopwatch 的流程是创建一个 Stopwatch 对象,然后调用 Start 方法开始计时…

C语言数据结构基础————二叉树学习笔记(四)简单的OJ题目练习

1.单值二叉树 965. 单值二叉树 - 力扣(LeetCode) 建立一个新的函数,用函数传参的方法来记录val的值 如上一篇最后的对称二叉树的习题,建立新的函数来传参 多采用使用反对值的方法,因为如果是相等return true的话&am…

UE4_旋转节点总结一

一、Roll、Pitch、Yaw Roll 围绕X轴旋转 飞机的翻滚角 Pitch 围绕Y轴旋转 飞机的俯仰角 Yaw 围绕Z轴旋转 飞机的航向角 二、Get Forward Vector理解 测试: 运行: 三、Get Actor Rotation理解 运行效果: 拆分旋转体测试一&a…

Spring05 SpringIOC DI

名词解释 今天我们来介绍Spring框架的最重要的part之一 SpringIOC 和 DI 这里的SpringIOC 其实是容器的意思,Spring是一个包含了很多工具方法的IOC容器 什么是IOC呢? IOC其实是Spring的核心思想 Inversion of Control (控制反转) 可能这里你还是不理解这个是啥意思 其实就…

【LeetCode】128. 最长连续序列(Java自用版)

哈希集合 class Solution {public int longestConsecutive(int[] nums) {Set<Integer> set new HashSet<>();for (int num : nums) {set.add(num);}int ans 0;for (int num : set) {int cur num;if (!set.contains(cur - 1)) {while (set.contains(cur 1)) {c…

程序运行之ELF文件的段

更多精彩内容在公众号。 我们将之前的代码增加下变量来具体看下 在代码中增加了全局变量以及静态变量&#xff0c;还有一个简单的函数。 #include <stdio.h> int global_var1; int global_init_var; void func1(int i){ printf("%d\n",i); } int main(vo…

C++入门(一)

目录 命名空间&#xff1a; 为什么要提出命名空间&#xff1f; 命名空间的定义&#xff1a; 命名空间的使用&#xff1a; 加命名空间名称及作用域限定符&#xff1a; 使用using将命名空间中某个成员引入&#xff1a; 使用using namespace命名空间名称引用&#xff1a; C…

【c++】类和对象(四)深入了解拷贝构造函数

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好啊&#xff0c;本篇内容带大家深入了解拷贝构造函数 目录 1.拷贝构造函数1.1传值调用的无限调用1.2浅拷贝1.3深拷贝1.4深拷贝的实现 1.拷贝构造函数 拷贝构造函数是一种特殊的…

yolov5+pyside6+登录+用户管理目标检测可视化源码

一、软件简介 这是基于yolov5目标检测实现的源码&#xff0c;提供了用户登录功能界面&#xff1b; 用户需要输入正确的用户名和密码才可以登录。如果是超级管理员&#xff0c;可以修改普通用户的信息&#xff0c;并且在检测界面的右上角显示【管理用户】按钮。 支持图片、视频、…

程序员快速上手一门技术

1 明确需求 明确学这个技术的需求&#xff1a;如工作需求或职业发展 2 了解技术 2.1 这个技术是做什么&#xff1f; 2.2 这个技术的优缺点&#xff1f; 2.3 这个技术适用什么场景&#xff1f; 3 去官网文档查看技术 4 快速上手 4.1 快速学习增删改查&#xff0c;写出一…

访问二维数组本质

先从一维数组讲起 int main() {int arr[5] { 1,2,3,4,5 };for (int i 0; i < 5; i) {printf("%d",arr[i]); //对数组进行访问}return 0; } 其实 arr [ i ] * (arr i) 这两个是完全相等的&#xff0c;在c语言指针&#xff08;1&#xff09;8.数组名与 …

机器人深度学习IMU和图像数据实现焊接精细操作

在双电极气体保护金属弧焊 &#xff08;DE-GMAW&#xff09; 中&#xff0c;对焊枪和旁路电极位置的精确控制是至关重要的。为了这一过程&#xff0c;科研团队提出了安装微型惯性测量单元&#xff08;IMU&#xff09;传感器和摄像头&#xff0c;来记录焊工控制焊枪的移动和微调…

如何配置高质量的告警

运维工程师吐槽起告警问题&#xff0c;人人都是BBKing&#xff01; 每天应对花式告警问题&#xff0c; 无关紧要的、短时急剧爆发的 被疲劳告警淹没的重要告警 和每天崭新的太阳一样&#xff0c; 每次的告警也是独一无二的&#xff01; 想躺平&#xff0c;不可能 下一秒…

01背包(acwing闫氏DP分析法)

题目描述&#xff1a; 有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式&#xff1a…

MATLAB:微分方程(组)数值解

一、显式微分方程 clc,clear tspan [0:10]; y0 2; [t1,y1] ode23(odefun_1,tspan,y0); %求数值解&#xff0c;精度相对低 [t2,y2] ode113(odefun_1,tspan,y0); %求数值解&#xff0c;精度相对高 yt sqrt(tspan1)1; %求精确解 subplot(1,2,1) plot(t1,y1,bo,t2,y2,r*,tspa…

C语言:动态内存管理(malloc,calloc,realloc,free)

目录 前言 malloc函数 free函数 calloc函数 realloc函数 前言 在这一章节将讲解动态内存分配&#xff0c;它可以在程序的堆区创建一块内存&#xff0c;在这块内存中存什么值就是由自己决定的了 开辟的空间有两个特点&#xff1a; 1. 空间开辟的大小是固定的 2. 数组在…

视频 | 轨迹模型及其它潜变量模型理论与实践

2024年3月20日&#xff0c;郑老师开办了“春分”临床统计学沙龙&#xff0c;本期沙龙和诸位分享了轨迹增长模型&#xff0c;以及其它潜变量模型包括潜类别模型和潜剖面模型的详细介绍和文献解读&#xff0c;R语言代码实践也有分享&#xff01; 非常感谢各位朋友在忙碌的工作生活…

线性数据结构----(数组,链表,栈,队列,哈希表)

线性数据结构 数组链表栈使用场景 队列应用场景 哈希表特点哈希函数&#xff0c;哈希值&#xff0c;哈希冲突键值对 Entry 开放寻址法和拉链法 参考文档 数组 数组(Array) 是一种很常见的数据结构。由相同类型的元素组成&#xff0c;并且是使用一块连续的内存来存储的。 在数组…

安装redis时候修改过的配置文件

只要是石头&#xff0c;到哪里都不会发光的 bind 绑定主机某个网卡对应的IP地址&#xff0c;如果某个主机有两个网卡A和B&#xff0c;那么绑定了A&#xff0c;通过B连接就会无法访问protected-mode 保护模式 Yes为只能本地访问port 启动的端口号pidfile pid存放的位置&#xff…