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

爬虫实战进阶版【1】——某眼专业版实时票房接口破解

某眼专业版-实时票房接口破解

某眼票房接口:https://piaofang.maoyan.com/dashboard-ajax

前言

当我们想根据某眼的接口获取票房信息的时候,发现它的接口处的参数是加密的,如下图:

在这里插入图片描述

红色框框的参数都是动态变化的,且signKey明显是加密的一个参数。对于这种加密的参数,我们需要从它们的js文件中找到加密方式,因此我们需要找到signKey所在的位置。

解决方案

1.找到veri.js

如图所示:
在这里插入图片描述

首先需要根据这个路径找到veri.js文件,signKey这个参数就出现在这个里面

2.找到signKey所在位置

如图所示,signKey的位置
在这里插入图片描述

3.分析它所处的这个函数的内容

可以找到请求参数里面的几个变量,这说明我们找到的文件没有错。

在这里插入图片描述

index参数的获取

将其中的o(250)输出,如下图,得到floor:

在这里插入图片描述

说明Math[o(250)]其实是一个向下取整的函数,故index的获得方式就是:

Math.floor(1e3 * Math.random() + 1)

将它用Python实现就是:

math.floor(1000 * random.random() + 1)

signKey参数的获取

通过调式(加断点),可以发现signKey的值是由这个语句获得的:
在这里插入图片描述
而这个语句中含有另一个参数d和o(262),对于o(262),可以在控制台得到它的值,如下图所示:
在这里插入图片描述

对于参数d,我们继续寻找,发现d的产生位置:

在这里插入图片描述

然后d是和变量i相关的,i的定义如下:
在这里插入图片描述
然后在调试的时候可以知道d的值其实是一段变量i中的key和value的字符串,如图:
在这里插入图片描述
而i在还有一个变量key我们是不知道的,但是由于key的值是由o(260)产生的,则我们可以将它看出一个常量,控制台输出如下:
在这里插入图片描述

由此跟d相关的变量我们都可以知道了,跟它相关的变量如下:

  • User-Agent:代理
  • timeStamp:时间戳
  • index
  • channelId
  • method
  • sVersion
  • key
    由此可以生成跟d相关的字符串了,d的格式:
method=Get&index=123&...

d产生后,我们再回到生成signKey的位置:

在这里插入图片描述
此时需要注意是先对d进行了一些字符串替换,然后进行到加密函数中去的

继续调式,进入到加密函数当中:
在这里插入图片描述

这是一个md5加密的过程。

我们先对该函数进行验证,看是否会生成所需要的signKey:

在这里插入图片描述

以上图的d作为输入,得到结果如下:
在这里插入图片描述

最后的结果是一致的,说明就是这个函数。

综上所述,获取signKey的步骤为:

  • 将变量i中的参数全部获取
  • 将i中参数的key和value进行拼接,形成字符串d
  • 将d输入到加密函数中进行加密
  • 得到signKey

到此,signKey的获取也就结束了,那么接口破解也就完成了。

运行结果

在这里插入图片描述

关键代码

完整代码请前往:地址

def getIndex(self):return math.floor(1000 * random.random() + 1)def getD(self):# d是各种参数的组合,包括timeStamp,User-Agent,index,channelId,sVersion以及keyself.pay_loads['index'] = self.getIndex()self.pay_loads['timeStamp'] = int(time.time() * 1000)logger.info('timeStamp:' + str(self.pay_loads['timeStamp']))d = 'method=GET&timeStamp=' + str(self.pay_loads['timeStamp']) + '&User-Agent=' + self.pay_loads['User-Agent'] + '&index=' \+ str(self.pay_loads['index']) + '&channelId=' + str(self.pay_loads['channelId']) + '&sVersion=' + str(self.pay_loads['sVersion']) + \'&key=' + self.key# 找出目标字符串中的所有空白字符并用空格代替d = d.replace(r'/\s+/g'," ")return d# 得到signKeydef getSignKey(self):md5 = hashlib.md5()d = self.getD()md5.update(d.encode('utf-8'))signKey = md5.hexdigest()self.pay_loads['signKey'] = signKeylogger.info("signKey:" + signKey)

总结

本部分关键点在于找到请求参数所在文件的位置,然后逐步顺腾摸瓜即可。

http://www.lryc.cn/news/26566.html

相关文章:

  • 大话数据结构-普里姆算法(Prim)和克鲁斯卡尔算法(Kruskal)
  • UNet-肝脏肿瘤图像语义分割
  • 三周爆赚千万 电竞选手在无聊猿游戏赢麻了
  • BERT学习
  • 大话数据结构-图的深度优先遍历和广度优先遍历
  • c语言指针怎么理解 第一部分
  • 计算机网络安全基础知识2:http超文本传输协议,请求request消息的get和post,响应response消息的格式,响应状态码
  • Pytest自动化框架~权威教程03-原有TestSuite的执行方法
  • web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架
  • 【MyBatis】源码学习 05 - 关于 xml 文件解析的分析
  • 代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小子数组、59.螺旋矩阵II
  • Ethercat系列(10)用QT实现SOEM主站
  • 论文投稿指南——中文核心期刊推荐(科学、科学研究)
  • jQuery属性操作prop()、attr()和data()
  • git的使用
  • webpack生产环境配置
  • linux下安装jenkins
  • IGKBoard(imx6ull)-I2C接口编程之SHT20温湿度采样
  • MyBatis——配置文件完成增删改查
  • Python内置函数 — all,any
  • Pycharm配置QGIS环境
  • 【C++】stack 与 queue
  • ARC142E Pairing Wizards
  • Spark开发实战-主播打赏排行榜统计
  • python 如何存储数据 (python 的文件和异常)
  • 第三章-OpenCV基础-8-绘图函数
  • 逆约瑟夫问题
  • MySQL之三大日志(更新中)
  • 如何使用EvilTree在文件中搜索正则或关键字匹配的内容
  • 北京移动CM311-5s-ZG_GK6323V100C_2+8_免拆一键卡刷固件包