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

news2024/9/25 17:20:10

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

一、找出需要加密的参数
  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,并运行,数据获取成功,且已经解密,把解密结果和网页第一页数据在做对比会发现,结果相同
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

Notepad++ 安装TextFx插件失败

据说TextFx插件是Notepad常用插件之一;有很多格式化代码的功能;下面安装一下; 插件管理里面看一下,没有这个TextFx; 根据资料,先安装NppExec; 然后下一个5.9老版本的Notepad,如下图…

iptalbes firewalld

一、IPtables介绍Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤(对OSI模型的四层或者是四层以下进行过滤)的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细…

通讯录管理系统(基于C语言)

模块设计 本通讯录管理系统功能模块共包括9个部分:1.输入数据、2.显示数据、 3.插入数据、4.删除数据、5.查看数据、6.修改数据、7.保存数据、 8.返回主菜单、9.退出系统. 一.总体设计 通讯录的每一条信息包括:姓名、性别、住址、联系电话…

VirtualBox安装Centos7.9

目录 1、下载Centos7.9镜像 2、新建虚拟电脑 3、虚拟电脑配置 3.1、配置CPU 3.2、设置启动顺序(光驱放在第一个) 3.3、设置存储 3.4、设置网络(桥接网卡) 4、启动 启动 等待 选择安装过程中语言 安装位置 开始安装 设置root账号密码 重启 输入用户名和密码登录…

传统制造业企业如何实现数字化转型?

传统制造企业的数字化转型涉及利用数字技术来提高效率、生产力和整体业务流程。以下是实现制造业数字化转型的关键步骤和策略: 1.当前流程的评估: 确定可以从数字化转型中受益的领域。这可能包括生产流程、供应链管理、库存控制和客户关系。 评估技术集…

StarRocks上新,“One Data、All Analytics”还有多远?

K.K在《未来十二大趋势》中认为,我们正处于一个数据流动的时代。商业乃数据之商业。归根结底,你在处理的都是数据。 的确,当数据成为新的核心生产要素之际,数据分析就犹如最重要的生产工具之一,决定着企业在数字化时代…

Chrome清除特定网站的Cookie,从而让网址能正常运行(例如GPT)

Chrome在使用某些网址的时候,例如GPT的时候,可能会出现无法访问这个网址的情况,就是点不动啥的 只需要把你需要重置的网址删除就好了

【未解决】huggingface模型文件下载地址为什么会变?

问题描述 上次我们已经分析了huggingface加载模型时候的文件目录应该是怎么样的?(感兴趣的可以主页搜索“【经验分享】huggingface模型加载过程下载到cache文件目录具体是怎么组织的?以及都会有什么文件目录,每个文件目录是什么&a…

智能优化算法应用:基于黑猩猩算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于黑猩猩算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于黑猩猩算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黑猩猩算法4.实验参数设定5.算法结果6.参考文献7.…

分布式搜索引擎elasticsearch(一)

5.1 初始elasticsearch elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。 5.1.1正向索引 5.1.2elasticsearch采用倒排索引: 文档(document):每条数据就是一个…

hikvision SDK使用学习/实践

函数介绍 //1. 枚举设备int MV_CC_EnumDevices(unsigned int nTLayerType, MV_CC_DEVICE_INFO_LIST *pstDevList); //2. 创建设备句柄int MV_CC_CreateHandle(void **handle, const MV_CC_DEVIEC_INFO *pstDevInfo); //参数:handle  [out]  //设备句柄&#xf…

简单了解传输层协议之TCP和UDP

目录 一、什么是端口号? 二、TCP协议 2.1 TCP报文格式 2.2 三次握手 2.3 四次挥手 2.4 窗口流量控制 三、UDP协议 3.1 UDP报文格式 3.4 传输过程 一、什么是端口号? 我们自己的一台电脑上有时可能会同时运行多个进程软件来进行上网。那么当网络上的服务器响应我们电…

python中的进制转换和原码,反码,补码

python中的进制转换和原码,反码,补码 计算机文件大小单位 b bit 位(比特) B Byte 字节 1Byte 8 bit #一个字节等于8位 可以简写成 1B 8b 1KB 1024B 1MB 1024KB 1GB 1024MB 1TB 1024GB 1PB 1024TB 1EB 1024PB 进制分类 二进制:由2个数字组成,有0 和 1 pyth…

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(三)——serverless数据分析

3 serverless数据分析 大纲 3 serverless数据分析3.1 创建Lambda3.2 创建API Gateway3.3 结果3.4 总结 3.1 创建Lambda 在Lambda中,我们将使用python3作为代码语言。 步骤图例1、入口2、创建(我们选择使用python3.7)3、IAM权限(…

HarmonyOS引入其他包,以引入请求axios为例

安装文件 安装文件位置: 总目录的oh-package.json5文件 dependencies:生产环境–上线运行时候必须需要的包 devDependencies:开发环境–开发适合为了方便提高效率的包。 包管理工具 OHPM CLI 作为鸿蒙生态三方库的包管理工具,支持OpenHar…

基于Python自动化测试框架之接口测试

前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自动化框架,使用的…

ESP32 LVGL Gui-Guider的移植

使用参考: ESP32系列之LVGL(三):Gui-Guider的使用_esp32 lvgl-CSDN博客 1、拷贝文件: 按照上面的文章,使用Gui-Guider软件生成C代码之后,custom和generated是我们要使用到的文件,…

异常处理 springboot

全局异常处理 RestcontrollerAdvice Exceptonhandler package com.it.Exception;import com.it.pojo.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice;/*全局异常处理器…

鸿蒙4.0开发笔记之ArkTS装饰器语法基础之监听者模式@Watch案例讲解(十四)

1、Watch定义 Watch实际是指状态变量更改通知。如果开发者需要关注某个状态变量的值是否改变,可以使用Watch为状态变量设置回调函数(监听函数)。 Watch用于监听状态变量的变化,当状态变量变化时,Watch的回调方法将被…

华清远见嵌入式学习——C++——作业5

作业要求&#xff1a; 代码&#xff1a; #include <iostream>using namespace std;//沙发 类 class Sofa { private:string sitting; //是否可坐double *cost; //花费 public://无参构造函数Sofa(){}//有参构造函数Sofa(string s,double c):sitting(s),cost(new double(…