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

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

http://www.kler.cn/news/157535.html

相关文章:

  • 【离散数学】——期末刷题题库(集合)
  • 如何使用Node.js快速创建本地HTTP服务器并实现异地远程访问
  • 源码安装git
  • php之zip文件中压缩、解压、增加文件、删除
  • Linux系统下Nginx的安装步骤
  • 10、SQL注入——数据库基础
  • JS浮点数精度问题及解决方案
  • kk(kubeadmin)在麒麟与centos安装k8s集群踩坑记录
  • Unity优化篇:对于unity DrawCall/Mesh/纹理压缩/内存等方面的常规调试和优化手段
  • css实现正六边形嵌套圆心
  • 网络安全(二)-- Linux 基本安全防护技术
  • 丢掉破解版,官方免费了!!!
  • Mybatis相关API(Sqlsession和sqlsessionFactroy)
  • 海云安参与制定《信息安全技术 移动互联网应用程序(App)软件开发工具包(SDK)安全要求》标准正式发布
  • 电脑如何录音?适合初学者的详细教程
  • python获取阿里云云解析dns的域名解析记录
  • 互联网大厂技术活动+实践分享
  • MySQL中的存储引擎
  • C语言--求一个十进制整数中1的个数
  • 【qml入门教程系列】:qml列表控件ListView用法介绍
  • 4.grid_sample理解与使用
  • 【模电】基本共射放大电路的工作原理及波形分析
  • TCP/IP的体系结构
  • SCTransform normalization seurat
  • C++学习之路(十八)C++ 用Qt5实现一个工具箱(点击按钮以新窗口打开功能面板)- 示例代码拆分讲解
  • 深度学习模型部署与优化:关键考虑与实践策略
  • 重新定义页面滚动条
  • 常见的几种计算机编码格式
  • Oracle(2-9) Oracle Recovery Manager Overview and Configuration
  • IDEA构建springBoot新项目时JDK只有17和21,无法选择JDK8解决方案