爬虫实战进阶版【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)
总结
本部分关键点在于找到请求参数所在文件的位置,然后逐步顺腾摸瓜即可。
相关文章:
爬虫实战进阶版【1】——某眼专业版实时票房接口破解
某眼专业版-实时票房接口破解 某眼票房接口:https://piaofang.maoyan.com/dashboard-ajax 前言 当我们想根据某眼的接口获取票房信息的时候,发现它的接口处的参数是加密的,如下图: 红色框框的参数都是动态变化的,且signKey明显是加密的一个参数。对于这种加密的参数,我们需要…...
大话数据结构-普里姆算法(Prim)和克鲁斯卡尔算法(Kruskal)
5 最小生成树 构造连通网的最小代价生成树称为最小生成树,即Minimum Cost Spanning Tree,最小生成树通常是基于无向网/有向网构造的。 找连通网的最小生成树,经典的有两种算法,普里姆算法和克鲁斯卡尔算法。 5.1 普里姆ÿ…...
UNet-肝脏肿瘤图像语义分割
目录 一. 语义分割 二. 数据集 三. 数据增强 图像数据处理步骤 CT图像增强方法 :windowing方法 直方图均衡化 获取掩膜图像深度 在肿瘤CT图中提取肿瘤 保存肿瘤数据 四. 数据加载 数据批处理 编辑编辑 数据集加载 五. UNet神经网络模型搭建 单张图片…...
三周爆赚千万 电竞选手在无聊猿游戏赢麻了
如何用3个星期赚到1千万?普通人做梦都不敢想的事,电竞职业选手Mongraal却用几把游戏轻易完成,赚钱地点是蓝筹NFT项目Bored Ape Yacht Club(BAYC无聊猿)出品的新游戏Dookey Dash。 这款游戏类似《神庙逃亡》࿰…...
BERT学习
非精读BERT-b站有讲解视频(跟着李沐学AI) (大佬好厉害,讲的比直接看论文容易懂得多) 写在前面 在计算MLM预训练任务的损失函数的时候,参与计算的Tokens有哪些?是全部的15%的词汇还是15%词汇中真…...
大话数据结构-图的深度优先遍历和广度优先遍历
4 图的遍历 图的遍历分为深度优先遍历和广度优先遍历两种。 4.1 深度优先遍历 深度优先遍历(Depth First Search),也称为深度优先搜索,简称DFS,深度优先遍历,是指从某一个顶点开始,按照一定的规…...
c语言指针怎么理解 第一部分
不理解指针,是因为有人教错了你。 有人告诉你,指针是“指向”某某某的,那就是误导你,给你挖了个坑。初学者小心不要误读这“指向”二字。 第一,“指针”通常用于保存一个地址,这个地址的数据类型在定义指…...
计算机网络安全基础知识2:http超文本传输协议,请求request消息的get和post,响应response消息的格式,响应状态码
计算机网络安全基础知识: 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤…...
Pytest自动化框架~权威教程03-原有TestSuite的执行方法
前言TestSuite一直是unittest的灵活与精髓之处, 在繁多的测试用例中, 可以任意挑选和组合各种用例集, 比如smoke用例集, level1用例集, webtest用例集, bug回归用例集等等, 当然这些TestSuite需要我们提前定义好, 并把用例加载进去.Pytest采取的是完全不同的用例组织和运行方式…...
web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架
1、 开发环境 win7 64 PyCharm 4.0.5 setuptools-29.0.1.zip 下载地址:setuptools-29.0.1.zip_免费高速下载|百度网盘-分享无限制 官方下载地址:setuptools PyPI python 3.3.2 mysql-connector-python-2.1.4-py3.3-win64 下载地址:mysq…...
【MyBatis】源码学习 05 - 关于 xml 文件解析的分析
文章目录前言参考目录学习笔记1、章节目录概览2、14.3:SqlSourceBuilder 类与 StaticSqlSource 类3、14.4.2:ResultMapResolver 类3.1、测试代码说明3.2、结果集 userMap 解析流程3.3、结果集 getGirl 解析流程3.4、鉴别器 discriminator 解析流程4、14.…...
代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小子数组、59.螺旋矩阵II
977 有序数组的平方题目链接:977 有序数组的平方介绍给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。思路看到题目的第一反应,首先负数的平方跟正数的平方是相同的&…...
Ethercat系列(10)用QT实现SOEM主站
首先将SOEM编译成静态Lib库可以参考前面的博文(83条消息) VS2017下编译SOEM(Simle Open EtherCAT Master)_soem vs_CoderIsArt的博客-CSDN博客make_libsoem_lib.bat "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build" x86用QT创建…...
论文投稿指南——中文核心期刊推荐(科学、科学研究)
【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...
jQuery属性操作prop()、attr()和data()
jQuery 提供了一些属性操作的方法,主要包括 prop()、attr() 和 data() 等。通过这些方法,能够实现不同的需求。下面我们分别进行详细讲解。 1.prop() 方法 prop0 方法用来设置或获取元素固有属性值。元素固有属性是指元素本身自带的属性,如 …...
git的使用
1.git的四个区域: 2.常规git命令 git status 查看working directory哪些文件被更改了git add .把更改add到staging area,缓存的地方。改一个地方可以就先暂存一下,最后确认是哪些改动后再一起commit,以免不必要的版本。 在暂存区域ÿ…...
webpack生产环境配置
3 webpack生产环境配置 由于笔记文档没有按照之前的md格式书写,所以排版上代码上存在问题😢😢😢😢 09 提取css成单独文件 使用下载插件 npm i mini-css-extract-plugin0.9.0 -D webpack配置此时a,b提取成单独文件,并且…...
linux下安装jenkins
1.初始化Jenkins安装环境 系统版本:Red Hat Enterprise Linux 8.7 将脚本文件jenkins_install_env.sh 、 jenkins_install.sh和apache-maven-3.6.2-bin.tar.gz、jdk-8u251-linux-x64.tar.gz都上传到/usr/local/src目录下执行jenkins_install_env.sh脚本初始化Jenki…...
IGKBoard(imx6ull)-I2C接口编程之SHT20温湿度采样
文章目录1- 使能开发板I2C通信接口2- SHT20硬件连接3- 编码实现SHT20温湿度采样思路(1)查看sht20从设备地址(i2cdetect)(2)获取数据大体流程【1】软复位【2】触发测量与通讯时序(3)返…...
MyBatis——配置文件完成增删改查
1.首先先创建一个新的表,使用下面的sql语句 -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand (-- id 主键id int primary key auto_increment,-- 品牌名称brand_name varchar(20),-- 企业名称company_name varchar(20…...
终极Windows安卓应用安装指南:告别模拟器,拥抱轻量级体验
终极Windows安卓应用安装指南:告别模拟器,拥抱轻量级体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了笨重的安卓模拟器&#x…...
别再折腾了!STM32CubeMX+Keil 5+Proteus 8.9保姆级联调配置,一次搞定
STM32开发环境联调实战:从零搭建CubeMXKeilProteus高效工作流 第一次接触STM32开发时,我被各种工具链的配置折磨得焦头烂额——CubeMX生成的工程在Keil里报错、Proteus仿真时芯片毫无反应、Debug选项神秘消失...如果你也经历过这种绝望,这篇文…...
PetaLinux下为ZynqMP配置GMII2RGMII驱动:从设备树修改到内核编译的完整指南
PetaLinux下为ZynqMP配置GMII2RGMII驱动的实战指南 在嵌入式Linux开发中,以太网驱动的配置往往是系统集成的关键环节。对于使用Xilinx ZynqMP芯片的开发者来说,当硬件设计采用GMII2RGMII IP核实现PL端以太网功能时,如何在PetaLinux环境下正确…...
从磁路对称性到电感差异:深度解析永磁同步电机凸极与隐极的本质
1. 永磁同步电机的两种面孔:凸极与隐极 第一次拆解永磁同步电机时,我被转子铁芯上那些凹凸有致的磁极结构吸引了——有的像连绵的山丘(凸极),有的则平整得像镜面(隐极)。这两种结构看似只是外观…...
初次使用Taotoken模型广场进行选型与切换的直观体验
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初次使用Taotoken模型广场进行选型与切换的直观体验 对于开发者而言,接入大模型API后,面对的第一个现实问题…...
C语言编写轻量爬虫工具
当我们要使用C语言编写一个定制化轻量爬虫工具,得需要结合网络请求、HTML解析和数据处理等步骤。由于是轻量级,正常情况下我们将使用C语言标准库以及一些第三方库来简化开发。这样省时省力,生态丰富可以帮助大家少走很多弯路。具体细节可以看…...
别再只写客户端了!用C语言搞定聊天室全栈开发:客户端+服务端联调避坑指南
别再只写客户端了!用C语言搞定聊天室全栈开发:客户端服务端联调避坑指南 在C语言全栈开发中,客户端和服务端的联调往往是开发者最容易踩坑的环节。很多初学者能够独立完成客户端或服务端的代码编写,但当两者需要协同工作时&#x…...
连开车回家都靠肌肉记忆——芯片工程师到底有多累
下班开车,到家的时候不记得路上发生了什么。这件事很多芯片工程师都经历过。那种精神层面的透支——脑子里塞满了太多东西,意识没有余量去关注开车这件事,只能交给身体的自动驾驶。体力劳动的疲惫,睡一觉就好了。芯片研发的疲惫不…...
多核架构下的实时高性能计算优化与实践
1. 多核架构下的实时高性能计算革命五年前还需要超级计算机才能解决的计算密集型问题,如今在嵌入式多核处理器上就能实时完成。这一技术突破正在彻底改变工程计算的格局。作为从业十余年的高性能计算工程师,我见证了从传统集群计算到现代多核实时计算的演…...
规划求解(Solver)实战:利用Excel的Solver工具进行投资组合优化
投资界有句老话:"别把鸡蛋放在一个篮子里。"但很少有人告诉你后半句:“每个篮子放多少鸡蛋,才是大学问。“Solver就是投资组合的"营养师”,帮你配出最佳"营养比例”。就像投资界的红绿灯,约束条件告诉你什么可以做,什么不可以碰。 一、什么是规划求解…...
