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

news2024/11/18 16:39:08

目录

正常写

反爬

逆向分析

关键字搜索

打断点&分析代码

得出 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的参数有了.

时间戳有了.

请求数据有了.

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

补全代码

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


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

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

相关文章

这些好玩的Ai网站你不知道我真的会哭

你可能想不到,AI已经发展到了这个程度。。文末提供 AI绘画关键词哦 目录 1.Midjourney 2.DeepFakes 3.StyleGAN 4.Runway AI绘画关键词哦 1.Midjourney Midjourney 是一款工具,更像是一位魔术师,但它的魔法来自人工智能技术的神奇。…

C语言中位运算介绍

在C语言中,位运算是一种对二进制位进行操作的运算方式,它可以对数据的二进制表示进行位级别的操作,包括按位与、按位或、按位异或、按位取反等。位运算常用于处理底层数据结构、优化代码性能以及实现各种算法。本文将深入介绍C语言中的位运算…

从汇编以及栈帧层面理解内联函数的原理

宏太复杂,所以弄出内联,内联适合小函数,把函数连到程序里面,这样就直接用,不需要调用,但是它占用空间。 C推荐 const和enum替代宏常量 inline去替代宏函数 宏缺点: 1、不能调试 2、没有类型安…

发现了一本超厉害的英语秘籍,绝对YYDS

昨天冷月小姐姐分享了一本书,她说是一位英语大神发她的。 我也打开了,很酷炫。 群友们也在与时俱进,随手截图,分享了大模型对文档的理解。 你可能会想,关注宏观经济有啥用,自己只是大海中的浪花一朵。 还有…

vue+Echarts实现多设备状态甘特图

目录 1.效果图 2.代码 3.注意事项 Apache ECharts ECharts官网,可在“快速上手”处查看详细安装方法 1.效果图 可鼠标滚轮图表和拉动下方蓝色的条条调节时间细节哦 (注:最后一个设备没有数据,所以不显示任何矩形)…

苹果手机突然黑屏打不开怎么办?多种方法合集

苹果手机突然黑屏无法打开是让人感到焦虑和困扰的常见问题。当遇到这种情况时,很多用户会感到手足无措,不知道该如何应对。苹果手机突然黑屏打不开怎么办?本文汇总了多种解决苹果手机突然黑屏打不开问题的方法,论是常见的手机重启…

Ceph——部署

Ceph简介 Ceph是一款开源的 SDS 分布式存储,它具备极高的可用性、扩展性和易用性,可用于存 储海量数据 Ceph的存储节点可部署在通用服务器上,这些服务器的 CPU 可以是 x86 架构的,也可以 是 ARM 架构的。 Ceph 存储节点之间相互…

国内ip怎么来回切换:操作指南与注意事项

在数字化时代,互联网已经成为我们日常生活、学习和工作中不可或缺的一部分。然而,随着网络应用的不断深化,用户对于网络环境的稳定性和安全性要求也越来越高。其中,IP地址作为网络中的关键标识,其切换与管理显得尤为重…

软件产品在哪个阶段容易产生缺陷

软件产品在哪个阶段容易产生缺陷 软件缺陷由许多原因造成,如果把这些缺陷按照整个软件研发周期归纳起来,统计发现,需求规格说明书是软件存在缺陷最多的地方。 软件研发周期:需求文档->需求规格说明书->设计文档->编码-&g…

Pillow教程04:学习ImageDraw+Font字体+alpha composite方法,给图片添加文字水印

---------------Pillow教程集合--------------- Python项目18:使用Pillow模块,随机生成4位数的图片验证码 Python教程93:初识Pillow模块(创建Image对象查看属性图片的保存与缩放) Pillow教程02:图片的裁…

大数据分析案例-基于决策树算法构建大学毕业生薪资预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

Web开发基本流程

Web是全球广域网,能够通过浏览器访问的网站。我们要访问网站,首先要在浏览器输入对应的域名。 浏览器也是一个程序,京东的网站也是一个程序,在京东那边电脑运行着,我们只是通过浏览器远程访问。京东的程序由三个部分组…

Redis入门到实战-第十六弹

Redis实战热身Cuckoo filter篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的(采用BSD许可证),用作数据库、缓存、消息…

Java毕业设计-基于springboot开发的学生就业管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、前台功能模块2、后台功能模块2.1 管理员功能2.2 学生功能2.3 企业功能 四、毕设内容和源代码获取总结 Java毕业设计-基于spring…

CDLF20-80_立式不锈钢多级泵

一、产品概述CDLF20-80 立式不锈钢多级泵是一款高效能、节能型的多级离心泵,它采用了先进的设计和制造技术,以确保泵的高效率和长期稳定运行。该泵主要用于城市供水、锅炉给水、高层建筑供水及消防系统等场合,能够处理清洁的或稍有污染的冷热…

智能医疗-方案优势

实时更新,信息展示更便利 电子标签床头信息卡可设计特定的信息模板展示病患信息,并可根据治疗进展实时更新,病患通过床头电子标签即可了解病情信息。 —签多能,医护管理更高效 电子墨水屏技术改进了传统院内展示内容单一、更换成…

Autosar Crypto Interface学习笔记

文章目录 前言Functional specificationError classificationError detection API specificationType DefinitionsFunction definitionsGeneral APICryIf_InitCryIf_GetVersionInfo Job Processing InterfaceCryIf_ProcessJobDispatch Key IDs匹配KeyId Job Cancellation Inter…

vmware,linux,centos7,NAT模式下的网络配置

centos7的NAT网络配置 NAT模式说明虚拟机网络配置工具本机配置net8网络(NAT的网域)本机的IP配置(用于net8局域网内解析主机IP和域名对应关系使用)(可选)虚拟机内的网络配置虚拟机ping不通www.baidu.com的情况下虚拟机ping可以ping…

【双指针】Leetcode 三数之和

题目解析 15. 三数之和 这道题有两个需要注意的地方:1. 三个数字也不可以是同一个位置上的 2. 最终结果里面的三元组不可以是重复的 所以这道题就需要对结果实现去重这一个逻辑,遇到相同的数字就需要往后面移动,忽略 算法讲解 1. 首先对数…

2024蓝桥杯每日一题(状压DP)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:毕业旅行问题 试题二:蒙德里安的梦想 试题三:最短Hamilton路径 试题四:国际象棋 试题一:毕业旅行问题 【题目描述】 小明目前在做一份毕…