mmz批量多页抓取数据-AES.CBC算法-爬虫

news2024/9/20 0:53:39

目标:mmz多页下载

方法:加一个for循环实现多页的下载

问题:浏览器传输服务器时对页码参数做了加密处理

解决方法:

1、判断加密算法模式(mmz是AES-CBC算法)

2、找到加密的key和iv

代码:

import json
import time

import requests
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad,unpad

for page in range(2, 10):
    # ==============================================第一部分(模仿浏览器对页码加密传输服务器)=================================
    # 获取到mmz网站加密的明文数据
    data = {"Type": 0, "page": page, "expire": 1710571993849}
    # dic转化为json字符串进行处理
    data = json.dumps(data)
    # print(type(data))
    fill_btext = pad(data.encode(), 16)
    # print(fill_btext)

    # 解析mmz网站js拿到kv,浏览器向服务器传送加密的kv
    key = '55b3b62613aef1a0'.encode()
    vi = key
    encry = AES.new(key, AES.MODE_CBC, vi)
    # AES加密
    encry_data = encry.encrypt(fill_btext)

    # 加密 b64
    b64encode_data = base64.b64encode(encry_data)
    # print(b64encode.decode())
    # ============================================第二部分(拿到加密的参数获取服务器返回的数据并解密)=================================
    # 解密服务器返回的数据

    cookies = {
        'PHPSESSID': '48nu182kdlsmgfo2g7hl6eufsa',
        'Hm_lvt_6cd598ca665714ffcd8aca3aafc5e0dc': '1710568549',
        'SECKEY_ABVK': 'FUnr+pnCS/p1Ou/WiS6a82jLBmKcwlQfvALD/bEpSYS0EV42eXkFNYpCmcekNiiKvyrlcEHfDw6QLw7GSqcv/w%3D%3D',
        'Hm_lpvt_6cd598ca665714ffcd8aca3aafc5e0dc': '1710568575',
        'BMAP_SECKEY': 'FUnr-pnCS_p1Ou_WiS6a82jLBmKcwlQfvALD_bEpSYRjgInAaoK-vELl57QFAxX-y1kv64ZfrWIegR6xAqZk5YPrHMNgpor4__VOFQ2YBt9ZLJyD0Ru3kQ8TLNDX9tgT2rE6la_DNO7NooPoKY8lg-7nkrw7RqULcxikq6qpjt72ToZ7LhtjeWs5kU5TcRy2ruVzAKFKBpjmyUlPmKeBwJM_HQkgSUF_-wJjonbLE8U',
    }
    headers = {
        'Accept': '*/*',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'Connection': 'keep-alive',
        'Content-Type': 'application/json; charset=UTF-8',
        # 'Cookie': 'PHPSESSID=48nu182kdlsmgfo2g7hl6eufsa; Hm_lvt_6cd598ca665714ffcd8aca3aafc5e0dc=1710568549; SECKEY_ABVK=FUnr+pnCS/p1Ou/WiS6a82jLBmKcwlQfvALD/bEpSYS0EV42eXkFNYpCmcekNiiKvyrlcEHfDw6QLw7GSqcv/w%3D%3D; Hm_lpvt_6cd598ca665714ffcd8aca3aafc5e0dc=1710568575; BMAP_SECKEY=FUnr-pnCS_p1Ou_WiS6a82jLBmKcwlQfvALD_bEpSYRjgInAaoK-vELl57QFAxX-y1kv64ZfrWIegR6xAqZk5YPrHMNgpor4__VOFQ2YBt9ZLJyD0Ru3kQ8TLNDX9tgT2rE6la_DNO7NooPoKY8lg-7nkrw7RqULcxikq6qpjt72ToZ7LhtjeWs5kU5TcRy2ruVzAKFKBpjmyUlPmKeBwJM_HQkgSUF_-wJjonbLE8U',
        'Origin': 'https://www.maomaozu.com',
        'Referer': 'https://www.maomaozu.com/',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
        'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
    }
    response = requests.post('https://www.maomaozu.com/index/build.json', cookies=cookies, headers=headers,
                             data=b64encode_data)
    res = response.text

    # 解密 b64
    b64decode = base64.b64decode(res)

    # 解析mmz网站js拿到kv,服务器向浏览器传送数据的解密kv
    key = '0a1fea31626b3b55'.encode()
    vi = key
    cry = AES.new(key, AES.MODE_CBC, vi)

    # print(cry.decrypt(b64decode).decode())
    # unpad去除填充
    mmz_text = unpad(cry.decrypt(b64decode),16).decode()
    print(mmz_text)
    time.sleep(1)

浏览器和服务器之间关系示意图:

浏览器到服务器加密、服务器到浏览器加密,不一定一样

代码流程:

1、使用方法搜索到加密位置,并断点分析

2、拿到传输的明文数据和key、iv

3、模仿浏览器生成加密数据

4、将加密的数据写入“第二部分代码”的加密参数(data)中

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

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

相关文章

基于springboot+vue实现疫情防控物资调配系统项目【项目源码】计算机毕业设计

基于springbootvue实现疫情防控物资调配系统演示 B/S结构的介绍 在确定了项目的主题和研究背景之后,就要确定本系统的架构了。主流的架构有两种,一种是B/S架构,一种是C/S架构。C/S的全称是Client/Server,Client是客户端的意思&am…

HarmonyOS NEXT应用开发—Grid和List内拖拽交换子组件位置

介绍 本示例分别通过onItemDrop()和onDrop()回调,实现子组件在Grid和List中的子组件位置交换。 效果图预览 使用说明: 拖拽Grid中子组件,到目标Grid子组件位置,进行两者位置互换。拖拽List中子组件,到目标List子组件…

插入排序:一种简单而有效的排序算法

插入排序:一种简单而有效的排序算法 一、什么是插入排序?二、插入排序的步骤三、插入排序的C语言实现四、插入排序的性能分析五、插入排序的优化六、总结 在我们日常生活和工作中,排序是一种非常常见的操作。比如,我们可能需要对一…

MasterPDF 强大的多功能软件

哈喽呀,我是苏音今天给大家带来一期免费PDF的工具,可以实现你的大部分需求。 最近有PDF文档相关的的需求,但是之前一直在用WPS,就看能不能实现下面两个功能 1.导出指定页的PDF 2.在某一页PDF中加入指定图片 虽然WPS可以实现将…

免费接口调用 招标信息自动抽取|招标信息|招标数据解析接口

一、开源项目介绍 一款多模态AI能力引擎,专注于提供自然语言处理(NLP)、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大,支持本地化部署,并鼓励用户体验和开发者共同完善&#xf…

SpringBoot整合Seata注册到Nacos服务

项目引入pom文件 <!-- SpringCloud Seata 组件--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-seata</artifactId><version>${alibaba.seata}</version><exclusions><exc…

Postman接口测试之断言,全网最细教程没有之一!

一、断言 在 postman 中我们是在Tests标签中编写断言&#xff0c;同时右侧封装了常用的断言&#xff0c;当然 Tests 除了可以作为断言&#xff0c;还可以当做后置处理器来编写一些后置处理代码&#xff0c;经常应用于&#xff1a; 【1】获取当前接口的响应&#xff0c;传递给…

智慧城市革命,物联网技术如何改变城市治理与生活方式

随着科技的不断进步&#xff0c;智慧城市已经成为现代城市发展的重要方向之一。物联网技术作为智慧城市的重要支撑&#xff0c;正深刻改变着城市的治理模式和居民的生活方式。本文将探讨智慧城市革命&#xff0c;以及物联网技术如何改变城市治理与生活方式&#xff0c;同时介绍…

c++入门学习⑨——STL(万字总结,超级超级详细版)看完这一篇就够了!!!

目录 &#x1f384;前言 &#x1f384;概念 引入 定义 优点 &#x1f384;六大组件 容器 算法 迭代器 仿函数 适配器 空间配置器 &#x1f384;三大组件 迭代器&#xff08;iterator&#xff09; 定义 分类&#xff1a; 正向迭代器&#xff1a; 常量正向迭代…

c语言:操作符详解(上)

目录 一、操作符的分类二、二进制和进制转换1.2进制转10进制2.10进制转2进制3.2进制转8进制4.2进制转16进制 三、原码、反码、补码四、算术操作符、-、*、/、%1.**和-**2.*3./4.% 五、移位操作符1.左移操作符2.右移操作符 六、位操作符&#xff1a;&、|、^、~七、赋值操作符…

口腔管理平台 |基于springboot框架+ Mysql+Java+B/S结构的口腔管理平台 设计与实现(可运行源码+数据库+lw文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 会员功能 系统功能设计 数据库E-R图设计 lunwen参考…

操作系统知识-操作系统作用+进程管理-嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记&#xff0c;未经本人许可&#xff0c;请勿转载&#xff0c;如发现本笔记内容的错误还望各位不吝赐教&#xff08;笔记内容可能有误怕产生错误引导&#xff09;。 本章的主要内容见下图&#xff1a; 1、操作系统的作用…

7. 字符串和集合(重点)

常见API API &#xff08;全称 Application Programming Interface&#xff1a;应用程序编程接口&#xff09;就是别人写好的一些程序&#xff0c;给咱们程序员直接拿去调用即可解决问题的。 1 包 1.1 什么是包&#xff1f; 包是用来分门别类的管理各种不同程序的&#xff…

电源适配器

电源适配器 1. 选购指南2. 接口测量方法3. 电源接口4. 抗干扰磁环&#xff0c;稳定输出References 1. 选购指南 插头尺度相同&#xff0c;供电电压 (V) 相同&#xff0c;电流 (A) > 原来的电流 (A) INPUT (输入)&#xff0c;OUTPUT (输出) 2. 接口测量方法 3. 电源接口 外…

sqllab第二十五A关通关笔记

知识点&#xff1a; 数值型注入双写绕过 oorranand这里不能用错误注入&#xff08;固定错误回显信息&#xff09;联合注入 测试发现跟25关好像一样&#xff0c;就是过滤了and or # 等东西 构造payload:id1/0 发现成功运算了&#xff0c;这是一个数值型的注入 构造payload:id…

Arthas使用案例(二)

说明&#xff1a;记录一次使用Arthas排查测试环境正在运行的项目BUG&#xff1b; 场景 有一个定时任务&#xff0c;该定时任务是定时去拉取某FTP服务器上的文件&#xff0c;进行备份、读取、解析等一系列操作。 而现在&#xff0c;因为开发环境是Windows&#xff0c; 线上项…

pta上的几个例题

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

9.用FFmpeg测试H.264文件的解码时间

1. Essence of Method 要测试对H.264文件的解码时间&#xff0c;可以使用FFmpeg进行操作。FFmpeg是一个开源的多媒体处理工具&#xff0c;可以用来处理视频和音频文件&#xff0c;包括解码H.264文件。以下是使用FFmpeg的命令行来测试解码时间的方法&#xff1a; ffmpeg -i in…

四连杆机构运动学仿真 | 【Matlab源码+理论公式文本】

【程序简介】&#x1f4bb;&#x1f50d; 本程序通过matlab实现了四连杆机构的运动学仿真编程&#xff0c;动态展现了四连杆机构的运动动画&#xff0c;同时给出了角位移、角速度和角加速度的时程曲线&#xff0c;除了程序本身&#xff0c;还提供了机构运动学公式推导文档&…

更安全的C gets()和str* 以及fgets和strcspn的用法

#include <stdio.h>int main() {char *str;gets(str);puts(str);return(0); }可以说全是错误 首先char *str没有指向一个分配好的地址&#xff0c;就直接读入&#xff0c;危险 ps: 怎么理解char *str "Hello World" 是将一个存储在一个只读的数据段中字符串常…