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'
    #24046e79bde126ac3fee2e8508fd0da6
    t = 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的参数有了.

时间戳有了.

请求数据有了.

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

补全代码

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


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity3d使用Jenkins自动化打包(Windows)(二)

文章目录 前言一、Unity工程准备二、Unity调取命令行实战一实战二实战三实战四实战五 总结 前言 自动化打包的价值在于让程序员更轻松地创建和管理构建工具链,提高编程效率,将繁杂的工作碎片化,变成人人(游戏行业特指策划&#x…

JavaEE:网络原理——协议(应用层+传输层)

应用层 协议就是一种约定 应用层:对应应用程序,是程序员打交道最多的一层,调用系统提供的网络api写出的代码都是属于应用层的。应用层有很多现成的协议,但程序员一般用的还是自定义协议 自定义协议要约定好哪些内容&#xff1f…

PPT没保存怎么恢复?3个方法(更新版)!

“我刚做完一个PPT,正准备保存的时候电脑没电自动关机了,打开电脑后才发现我的PPT没保存。这可怎么办?还有机会恢复吗?” 在日常办公和学习中,PowerPoint是制作演示文稿的重要工具。我们会在各种场景下使用它。但有时候…

第18篇:4位二进制数到2位十进制数的转换

Q:上一篇我们是将4位二进制数转换为十六进制数在1个数码管显示,本期我们转换为2位十进制数显示在2个数码管上。 A:设计基本思路:4位二进制数转换后的十进制数小于10时,代表个位数的数码管显示0-9,代表十位…

R 药物经济学评价:Markov模型构建及markov轨迹图绘制

All models are wrong, but some are useful-Box,1976 前言 药物经济学评价中比较常用的模型包括决策树(Decision tree)模型、马尔科夫(Markov)模型、分区生存模型(Partitioned Survival Model,PSM)、微观…

IDEA MyBatisCodeHelper Pro最新版(持续更新)

目录 0. 你想要的0.1 包下载0.2 使用jh 1. 功能介绍2. 下载安装2.1 在idea中插件市场安装2.2 在jetbrains插件市场下载安装 3. 简单使用3.1 创建一个SpringBoot项目3.2 配置数据库3.3 一键生成实体类、mapper 0. 你想要的 0.1 包下载 测试系统:Windows&#xff08…

Python+selenium 初体验

PythonSelenium初体验:自动化网页测试与爬虫技术的新里程 引言 在Java领域久了, 偶然间接触到Pythonselenium还是感觉挺神奇的. 自己在这段时间也尝试了使用他们做一些自动化网页的测试. 觉得着实不错. 解放自己的双手, 可以做到网页自动点击,上传文件, 上传图片, …

接口自动化之 + Jenkins + Allure报告生成 + 企微消息通知推送

接口自动化之 Jenkins Allure报告生成 企微消息通知推送 在jenkins上部署好项目,构建成功后,希望可以把生成的报告,以及结果统计发送至企微。 效果图: 实现如下。 1、生成allure报告 a. 首先在Jenkins插件管理中&#x…

【QT】:基本框架

基本框架 一.创建程序二.初识函数1.main2.Widget.h3.Wight.cpp4.Wight.ui5.文件名.pro 三.生成的中间文件 本系列的Qt均使用Qt Creator进行程序编写。 一.创建程序 二.初识函数 1.main 2.Widget.h 3.Wight.cpp 4.Wight.ui 此时再点击编辑,就看到了ui文件的本体了。…

国内IP切换软件:解锁网络世界的新钥匙

在数字化快速发展的今天,互联网已成为我们生活中不可或缺的一部分。然而,伴随着网络使用的深入,许多用户逐渐意识到,不同的IP地址可能会带来截然不同的网络体验。为了应对这一问题,国内IP切换软件应运而生,…

Python(django)之单一接口展示功能前端开发

1、代码 建立apis_manage.html 代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>测试平台</title> </head> <body role"document"> <nav c…

Django Cookie和Session

Django Cookie和Session 【一】介绍 【1】起因 HTTP协议四大特性 基于请求响应模式&#xff1a;客户端发送请求&#xff0c;服务端返回响应基于TCP/IP之上&#xff1a;作用于应用层之上的协议无状态&#xff1a;HTTP协议本身不保存客户端信息短链接&#xff1a;1.0默认使用短…

重塑未来:Web3如何改变我们的数字生活

引言 随着科技的飞速发展&#xff0c;Web3已经成为数字时代的新潮流&#xff0c;其革命性的变革正在渐渐改变着我们的数字生活。本文将深入探讨Web3如何改变我们的数字生活&#xff0c;涉及其意义、应用场景、对未来的影响&#xff0c;以及我们如何适应这一变革&#xff0c;为…

Vue 二次封装组件的艺术与实践

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

[flask]执行上下文的四个全局变量

flask上下文全局变量&#xff0c;程序上下文、请求上下文、上下文钩子 -- - 夏晓旭 - 博客园 (cnblogs.com) 执行上下文 执行上下文&#xff1a;即语境&#xff0c;语意&#xff0c;在程序中可以理解为在代码执行到某一行时&#xff0c;根据之前代码所做的操作以及下文即将要…

macos下 jupyter服务安装和vscode链接密码设置 .ipynb文件

最近收到了一些后缀为.ipynb的文件&#xff0c; 这个文件就是使用jupyter编辑的&#xff0c;于是就需要安装一个jupyter服务&#xff0c; 对于最新版本的jupyter 网上很多的资料都已经过期了&#xff0c;这里以最新版本的jupyter为例。 jupyter lab安装 jupyter 这个工具包含…

基于遗传算法的智能天线最佳阵列因子计算matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于遗传算法的智能天线最佳阵列因子计算。智能天线技术利用自适应阵列处理技术改善无线通信系统的性能&#xff0c;尤其是提高接收信号质量、抑制干扰和增强定位能力。在智能…

集合系列(十六) -集合知识回顾整理

一、摘要 在 Java 中&#xff0c;集合大致可以分为两大体系&#xff0c;一个是 Collection&#xff0c;另一个是 Map&#xff0c;都位于java.util包下。 Collection &#xff1a;主要由 List、Set、Queue 接口组成&#xff0c;List 代表有序、重复的集合&#xff1b;其中 Set…

C语言:文件操作详解

什么是文件 文件是是计算机硬盘存储的数据的集合&#xff0c;它可以是文本文档&#xff0c;也可以是图片&#xff0c;程序等等。将数据存储进文件内可以很好的保存数据&#xff0c;方便程序员对文件的操作。 文件的类型 一般根据存储数据类型的不同可以分为二进制文件和文本文…

python的神奇bug2

今天测试出一个很诡异的bug&#xff0c; 这个错误还真的很难发现 测试1 a [1,10,100] for i in a:print(i)if(i10):a[20,30,-1]一般来说我们在进行迭代时&#xff0c;a这个值时不能改动的&#xff0c;但是现在的问题时如果我不小心给改动了呢&#xff0c;结果如下 也就是说…