当前位置: 首页 > news >正文

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.lryc.cn/news/326747.html

相关文章:

  • 7、jenkins项目构建细节-常用的构建触发器
  • 【前端学习——css篇】4.px和rem的区别
  • 深入解析Oracle数据库中的标量子查询(Scalar Subquery)及其等价改写方法
  • Pytorch多机多卡分布式训练
  • win11 环境配置 之 Jmeter
  • 蓝桥杯刷题之路径之谜
  • 【深度学习】图片预处理,分辨出模糊图片
  • 基础NLP知识了解
  • Android 性能优化(六):启动优化的详细流程
  • QT程序打包
  • ARMday7作业
  • Unity构建详解(4)——SBP的依赖后处理
  • 使用GO对PostgreSQL进行有意思的多线程压测
  • CI/CI实战-jenkis结合gitlab 4
  • 修复ubuntu引导
  • 11.Notepad++
  • 实现阻塞队列
  • MySQL8.X驱动datetime映射问题
  • 【Selenium】隐藏元素的定位和操作|隐藏与isDisplay方法
  • 视图的作用
  • 动态ip白名单频繁更改问题解决方案
  • 什么是物联网监控平台?部署物联网平台有什么作用?
  • netty构建udp服务器以及发送报文到客户端客户端详细案例
  • Selenium 学习(0.22)——软件测试之小结
  • 贪心算法问题
  • 深入理解 @Transactional 注解在 Spring 中的应用
  • Python爬虫之爬取网页图片
  • AI Agent(LLM Agent)入门解读
  • 自动化面试常见算法题!
  • CCF-CSP真题202206-2《寻宝!大冒险!》