python爬虫非对称加密RSA案例:某观鸟网站

声明:
该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关

一、找出需要加密的参数
  1. js运行 atob(‘aHR0cDovL2JpcmRyZXBvcnQuY24vaG9tZS9hY3Rpdml0eS9wYWdlLmh0bWw=’) 拿到网址,F12打开调试工具,点击分页发送请求,找到 front/activity/search 请求
  2. 分析请求头、参数、响应结果会发现响应结果 data、参数、header里面的sign、Requestid 加密
    在这里插入图片描述
  3. 鼠标右击请求找到Copy>Copy as cUrl(cmd),打开网站:https://spidertools.cn/#/curl2Request,把拷贝好的curl转成python代码,新建 guanniao.py,把代码复制到该文件
    在这里插入图片描述
  4. 新建 guanniao.js 文件,用于放扣下的代码
二、分析参数、requestId、sign加密
  1. 切换到sources,添加XHR拦截 front/activity/search
    在这里插入图片描述
  2. 点击分页发送请求,看到域中没有,显示参数的明文信息、headers中没有相关的加密字段,往上找代码,会发现 ajax 函数,ajax函数内部会发现 setRequestHeader 函数,在 setRequestHeader 内部打上断点
    在这里插入图片描述
  3. 结束此次调试,点击分页发送请求,进入刚才的 setRequestHeader 断点后,一直点击跳过断点,当发现 requestId 时,点击跳出该函数,会发现请求参数、sign、requestId都是在此处加密,在函数内部打上断点
    在这里插入图片描述
    在这里插入图片描述
  4. 结束此次调试,点击分页发送请求,点击跳过端点,一直到sign、requestId加密的断点,分析代码会发现请求参数是 b.data = encrypt.encryptUnicodeLong(e) 加密,requetId是 d = getUuid() 生成,sign是 f = MD5(e + d + c) 生成,e是明文参数、d是requetId、c是时间戳,sign从名字上看是 MD5 加密,把加密数据e + d + c、加密之后的值f在控制台打印,打开 https://spidertools.cn/#/crypto ,把打印成功的加密数据,通过该网站生成 MD5加密,会发现和MD5加密结果一样,说明 sign 确实是 MD5 加密,而且未被魔改,把 beforeSend 中的代码拷贝到 guanniao.js,并把 sign 的 MD5 替换成库里的MD5
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  5. 分析代码会发现 b.data = encrypt.encryptUnicodeLong(e) 中的 encrypt 是 var encrypt = new JSEncrypt(),new JSEncrypt是AES加密,把鼠标悬浮到 getUiid,点击蓝色部分找到该方法,会发现需要的函数都在同一个文件内,把代码复制到 guanniao.js,并引入 jsencrypt 库实现RSA加密
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
三、验证参数、requestId、sign加密结果
  1. 把断点打到 b.data,结束此次调试,点击分页发送请求,跳到该断点后,把 b.data 打印到控制台,把打印结果复制到 guanniao.js
    在这里插入图片描述
    在这里插入图片描述
  2. 运行 guanniao.js 会发现,报错 encrypt.encryptUnicodeLong is not a function ,把鼠标悬浮到 encrypt.encryptUnicodeLong,点击蓝色部分找到该方法,会发现文件内定义了 window.JSEncrypt 不是用 jsencrypt 标准库里的加密方法 encrypt.encrypt,把 encrypt.encryptUnicodeLong 替换成 encrypt.encrypt,运行guanniao.js,会发现没有报错,说明 encrypt.encryptUnicodeLong 就是 encrypt.encrypt,没有被魔改
    在这里插入图片描述
  3. 修改 guanniao.py,并运行文件,数据获取成功
    在这里插入图片描述
    在这里插入图片描述
四、解密请求参数 data
  1. 取消所有断点,点击分页发送请求,一直点击跳过函数调用,直到看到 ajax 的 success 方法,看不到该函数的可以再点击跳过函数调用后,看看上下的代码,栈的位置在 F.pullData,在 success 方法内部打上断点
    在这里插入图片描述
  2. 点击跳过断点,会发现 a.parseData(t),响应结果 t 经过了 a.parseData 处理,鼠标悬浮 a.parseData,点击蓝色部分找到该方法位置,会发现 parseData 函数,鼠标悬浮到 BIRDREPORT_APIJS.decode,点击蓝色部分找到该方法位置,会发现是 AES 加密 this.key、this.iv 说明 this.url、key、iv 在该文件,往上找代码会发现这三个的值,把代码复制到 guanniao.js
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 验证解密结果,把 t.data 在控制台打印出来,把打印结果复制到 guanniao.js,运行 guanniao.js,调试工具点击跳过函数调用,再把解密后的 t.data 打印出来,两个结果比会发现相同
    在这里插入图片描述
    在这里插入图片描述
五、python验证结果
  1. 修改 guanniao.py,并运行,数据获取成功,且已经解密,把解密结果和网页第一页数据在做对比会发现,结果相同
    在这里插入图片描述
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3+ts项目中导入组件时报错has no default export

下面这句会报错has no default export import Button from "./components/Button.vue";使用vetur这个插件(我目前的版本是0.37.3,应该是这个版本之前的都不支持)。但是依旧报错,所以我选择禁用了,就不报错了…

2024清理软件排名第一的是CCleaner

CCleaner2024版是一款专业好用的系统优化和隐私保护工具。CCleaner官方版主要用来清除Windows系统不再使用的垃圾文件和使用者的上网记录以空出硬盘容量,按工具同时注重保护用户隐私,被誉为“世界上最受欢迎的PC清洁剂”。 CCleaner下载如下&#xff1a…

龙迅分配器LT86102UXE/LT86104UX,HDMI一分二/HDMI一分四

龙迅LT86102UXE描述; Lontium LT86102UXE HDMI2.0分配器具有1:2的分配器,符合HDMI2.0/1.4规范,最大6Gbps高速数据速率,自适应均衡RX输入和预先强调的TX输出,以支持长电缆应用程序,内部TX通道交换灵活的PCB…

【自习室预约系统源码】基于springboot框架的自习室管理和预约系统设计

🍅 简介:500精品计算机源码学习 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 文末获取源码 目录 一、以下学习内容欢迎领取: 二、文档资料截图: 三想了解更多,请收藏、评论、留言:…

在windows server系统下,快速部署自己的网站

目录 xampp简介xampp的作用xampp的安装方法Apache简介Apache的作用 本文主要介绍使用xampp软件包在windows server系统下,快速部署自己的网站。 xampp简介 XAMPP是一款基于Apache、MySQL、PHP和Perl的开源Web服务器软件包。XAMPP支持多个操作系统,包括W…

活动回顾|德州仪器嵌入式技术创新发展研讨会(上海站)成功举办,信驰达科技携手TI推动技术创新

2023年11月28日,德州仪器(TI)嵌入式技术创新发展研讨会在上海顺利举办。作为TI中国第三方IDH,深圳市信驰达科技有限公司受邀参加,并设置展位,展出CC2340系列低功耗蓝牙模块及TPMS、蓝牙数字钥匙解决方案,与众多业内伙伴…

网络层之无分类编址CIDR(内涵计算例题)

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

openGauss学习笔记-141 openGauss 数据库运维-例行维护-例行重建索引

文章目录 openGauss学习笔记-141 openGauss 数据库运维-例行维护-例行重建索引141.1 背景信息141.2 重建索引141.3 操作步骤 openGauss学习笔记-141 openGauss 数据库运维-例行维护-例行重建索引 141.1 背景信息 数据库经过多次删除操作后,索引页面上的索引键将被…

ai绘画Midjourney绘画提示词Prompt教程

一、Midjourney绘画工具 SparkAi【无需魔法使用】: SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!本系统使用NestjsVueTypescript框架技术,持续集成AI能力到…

理论与实践相结合之交换机通信(数据链路层)

前提 本文所使用的演示工具是“Cisco Packet Tracer”,没有安装的请参考以下链接进行安装 理论与实践相结合之Cisco Packet Tracer网络模拟器安装教程-CSDN博客 交换机简介 交换机是一种网络硬件设备,每个交换机都维护了一个mac地址和端口的对应表&a…

【C进阶】C程序是怎么运作的呢?-- 程序环境和预处理(上)

前言: 由于c语言的程序编译链接的这块知识点不清楚,回来复习一遍,以便于好理解c知识,我会尽快更新下一篇文章。 目录 1.程序的翻译环境和执行环境 2.翻译环境(编译链接) 编译(编译器&#xf…

Mybatis异常org.apache.ibatis.binding.BindingException: Parameter “xxx“ not found

问题1: 可能是 mybatis 的xml,对应的mapper接口缺少Param注解,或者Param注解的value与xml的不一致 切记只要参数不是一个集合类型向下图或者多个参数值就要加Param注解 问题2: mybatis的xml,存在多余的注释。注释中包含#{}、${}。注释掉的代…

【C#】读取ini配置文件的内容

一、编写ini配置文件 ini文件时初始化文件,通常是系统配置文件所采用的存储格式。ini文件有自己的固定格式,是由若干个“节”(section)组成,每个节由若干个“键”(key)组成,每个key…

【Cesium】实现卷帘对比

一、创建滑块 <style>import url(../Build/CesiumUnminified/Widgets/widgets.css);import url(./Sandcastle/templates/bucket.css);#slider {position: absolute;left: 50%;top: 0px;background-color: #d3d3d3;width: 5px;height: 100%;z-index: 9999;}#slider:hover…

STM32使用SIM900A、SIM800C、SIM800A完成短信发送、连接onenet上传数据、拨打电话_完整教程

一、前言 本篇文章介绍SIM800C 、SIM800A、SIM900A 等等系列的模块的常用AT指令,讲解模块的使用方法,演示短信发送、拨打电话、网络连接,与服务器通信等常用案例。 如果只是用到发送短信、拨打电话、连接网络通信、这些模块的AT指令是兼容的。 文章最后贴了完整的STM32代码…

学习极市开发平台

这是官网的链接&#xff1a;极市开发者平台-计算机视觉算法开发落地平台-极市科技 (cvmart.net) 第一次用这个平台有很多问题&#xff0c;首先在使用这个平台之前&#xff0c;我大部分时候使用的是百度的飞浆平台&#xff0c;也就是BML&#xff0c;去训练一些深度学习的模型。 …

DevOps 中 API 治理的工程问题和落地实践案例

近日&#xff0c;中国 DevOps 社区峰会在广州成功召开&#xff0c;Eolink 作为 API 管理领域代表受邀出席。来自各地的讲师与华南区本土开发者朋友们齐聚一堂&#xff0c;共同探讨了 DevOps 转型、AI、API 管理&#xff0c;以及 SRE 稳定性工程、平台工程、混沌工程、可观测性工…

uniapp自定义进度条组件

目标效果 原型设计为这样的样式&#xff0c;但是现有的进度条组件样式都无法满足需求&#xff0c;于是编写组件实现。 设计引用格式为 <zLineProgress :total"15" :val"7" title"你好吗" />定义组件 <template><view style&…

晶圆测试技术

晶圆探针测试也被称为中间测试&#xff08;中测&#xff09;&#xff0c;是集成电路生产中的重要一环。晶圆探针测试的目的就是确保在芯片封装前&#xff0c;尽可能地把坏的芯片筛选出来以节约封装费用。这步测试是晶圆生产过程的成绩单&#xff0c;它不仅是节约芯片封装成本的…

Linux下安装MySQL 5.7

1、下载安装包 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 2、安装MySQL包 yum -y install mysql57-community-release-el7-10.noarch.rpm 3、安装MySQL yum -y install mysql-community-server 如果出现下图失败情形&#xff0c;则…