python爬虫AES案例:某招聘网站

news2025/1/16 15:51:29

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

一、找出需要加密的参数
  1. js运行 atob(‘aHR0cHM6Ly93d3cua2Fuemh1bi5jb20vc2VhcmNoLz9xdWVyeT1weXRob24mdHlwZT0w’) 拿到网址,F12打开调试工具,点击搜索,找到 api_to/search/comprehensive.json 请求
  2. 分析请求头、参数、响应结果会发现只有参数中的 b、kiv加密,还有响应结果加密,请求头中 cookie 也有一些看起来也像加密,暂时不管cookie中的,先去扣响应结果的加密,再通过代码注释 cookie 参数判断是否cookie需要加密
    在这里插入图片描述
  3. 鼠标右击请求找到Copy>Copy as cUrl(cmd),打开网站:https://spidertools.cn/#/curl2Request,把拷贝好的curl转成python代码,新建 kanzhun.py 文件,把代码拷贝进去
    在这里插入图片描述
  4. 新建 kanzhun.js 文件,用于放扣下的代码
二、定位响应结果解密位置
  1. 因为响应结果完全是加密的,这里采用XHR拦截请求的方法定位解密位置,想尝试关键字的可以采用:JSON.parse、decrypt符合AES加密的关键字进行搜索
  2. 切换到sources,添加XHR拦截api_to/search/comprehensive.json
    在这里插入图片描述
  3. 点击搜索发送请求,一直点击跳过下一个函数,看到响应拦截器,分析代码会发现 t = (0,M.gy)(e.data, {iv: “string” == typeof n ? JSON.parse(n).kiv : n.kiv} 响应结果经过了这行代码的转换,又经过 JSON.parse 的转换,在 JSON.parse 打上断点,并把代码复制到 kanzhun.js 文件
    在这里插入图片描述
    在这里插入图片描述
  4. 结束本次调试,点击搜索发送请求,点击跳过断点调试,会定位到 JSON.parse 上的断点,分析 t = (0, )(e.data, {iv: “string” == typeof n ? JSON.parse(n).kiv : n.kiv} 会发现 M.gy、e.data、iv是需要注意的,鼠标分别悬浮上去会发现,M.gy 方法、e.data是加密参数、iv 是请求参数的kiv,分别把e.data、iv在控制台输出,把 e.data、iv 输出的值分别复制到 kanzhun.js 文件
    在这里插入图片描述
    在这里插入图片描述
  5. 鼠标悬浮到 M.gy 点击蓝色位置,找到该方法,会看到 m 方法,分析 m 方法会发现 c 方法,而e、t.iv参数是 M.gy 方法传过来的 ,在 m 方法内部打断点
    在这里插入图片描述
    在这里插入图片描述
  6. 结束本次调试,点击搜索发送请求,点击跳过断点调试,直到看到 m 方法,鼠标悬浮到 c 方法,点击蓝色部分找到该方法的位置,会发现 c 方法,分析内部代码得知是 AES 解密。而 iv 、e是经过 M.gy 传过来的,key、mode、padding 取得是 变量 n 中的,变量 n 是由 u() 方法实现,把代码复制到 kanzhun.js 文件,把方法名改为 decrypt,并导入 crypto-js 库,把代码中的 AES 相关的替换成库里面的,把 M.gy 替换成 ddecrypt
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  7. 鼠标悬浮到 u 方法,点击蓝色部分找到该方法的位置,不想分析里面的代码可以完全复制到 kanzhun.js 文件,并把里面的 o.enc、o.mode、o.pad 替换成crypto-js 库的,有代码洁癖的可以只把 s = function() 拷贝出来命名成 u 方法,再把里面的 o.enc、o.mode、o.pad 替换成crypto-js 库的
    在这里插入图片描述
  8. 验证结果,运行代码打印出 解密后的值,把 t 在控制台输出,会发现里面的值是一样的
    在这里插入图片描述
    在这里插入图片描述
三、python 解密验证结果,并分析 cookie 中是否又加密参数
  1. 修改 kanzhun.py 文件,把参数中的b、kiv换成对应请求中的,运行文件会发现结果已经解密,我这里遇到了编码问题,加了 subprocess.Popen = partial(subprocess.Popen, encoding=“utf-8”) 以及 open(‘kanzhun.js’,‘r’,encoding=‘UTF-8’) 解决,没遇到的可以忽略
    在这里插入图片描述在这里插入图片描述
  2. 分析 cookie 中是否又加密参数,把cookie中的字段全部注释,会发现加密数据依然可以解密成,说明 cookie 中的字段无加密参数影响请求
    在这里插入图片描述
四、定位b、kiv加密位置
  1. 删除所有断点,点击搜索发送请求,关键字搜索 kiv,会发现有 kiv 赋值的地方,右击请求,点击在 sources 中打开,在打开的文件Ctrl+F搜索kiv,找到对应的位置并断点
    在这里插入图片描述在这里插入图片描述
  2. 点击搜索发送请求,点击跳过断点调试,直到看到 api_to/search/comprehensive.json 停下,分析代码,由此代码可看出 b、kiv 都在这个位置,分别对应 t、a ,而 a = (0,M.A)()、t = (0,M.mA)(n, {iv: a}).replace(///g, "").replace(///g, “_”).replace(/+/g, “-”).replace(/=/g, “~”),分析两段代码,会发现 a 是有 M.mA 函数生成,t 是由 M.mA、n、a生成,把 n 在控制台输出,会发现是参数的 明文信息,根据分析把代码复制到 kanzhun.js
    在这里插入图片描述在这里插入图片描述
  3. 分析 M._A 方法,鼠标悬浮 M._A,点击蓝色部分找到该方法,会发先 p 方法,把该方法复制到 kanzhun.js,并把 M._A 替换成 p
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  4. 分析 M.mA 方法,鼠标悬浮 M.mA,点击蓝色部分找到该方法,会发现 h 方法,在该方法内部断点
    在这里插入图片描述在这里插入图片描述
  5. 结束此次调试,点击搜索发送请求,一直点击跳过断点调试,直到看到刚才的 h 方法,分析该方法内部e、t是由M.mA传参过来的,只有一个 l 方法需要分析,鼠标悬浮 l 方法,点击蓝色部分找到该方法,会看到一个 l 方法,方法内部是 AES 加密,而在代码下方是之前的请求解密方法,加密里面的 n 也是之前的 u 方法生成,把代码复制到 kanzhun.js,把方法名改为 encrypt,并导入 crypto-js 库,把代码中的 AES 相关的替换成库里面的,把 M.mA 替换成 encrypt,点击运行 kanzhun.js,会发现 b、kiv5可以生成成功
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
五、python 加密结果
  1. 修改 kanzhun.py 文件,运行后会发现接口请求成功,且解密后的数据正常
    在这里插入图片描述

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

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

相关文章

sqlserver12 数据库的安装步骤

点击独立安装或向现有安装添加功能 点击下一步: 点击我接受许可条款,然后点击下一步: 点击包含SQL server产品更新,然后点击下一步: 继续点击下一步: 点击SQL server(功能安装) 最后…

Thrift RPC Java、Go、PHP使用例子

文章目录 1、Thrift RPC介绍1.1、Protocol 支持的数据传输协议1.2、Transport 支持的数据传输方式1.3、Server 支持的服务模型1.4、IDL语法数据类型1.5、开发步骤 2、接口定义文件2.1、创建接口定义文件2.2、生成对应平台语言代码2.2.1、下载生成工具2.2.2、生成各平台语言代码…

Spring-事务支持

目录 一、事务概述 二、引入事务场景 三、Spring对事务的支持 Spring实现事务的两种方式 声明式事务之注解实现方式 1.在Spring配置文件中配置事务管理器 2. 在Spring配置文件引入tx命名空间 3. 在Spring配置文件中配置“事务注解驱动器”,通过注解的方式控…

一文了解什么是GIS

地理信息系统(GIS)是捕捉、存储、分析和呈现空间数据的强大工具。通过将地理信息与其他数据源相结合,GIS为有效决策至关重要的模式、关系和趋势提供了有价值的见解。 一、GIS的关键概念 1.空间数据:GIS依赖于空间数据&#xff0c…

RabbitMQ消息模型之Routing-Direct

Routing Direct 在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 在Direct模型下: 队列与交换机的绑定,不能是任意…

记录创建粒子的轻量级JavaScript库——particles.js(可用于登录等背景显示)

文章目录 前言一、下载particles.js二、引入particles.js并使用三、配置数据说明如有启发,可点赞收藏哟~ 前言 本文记录使用创建粒子的轻量级JavaScript库 particles.js 可用于登录等背景显示 一、下载particles.js 先下载particles.js库,放在项目libs…

504. 七进制数

这篇文章会收录到 : 算法通关第十三关-青铜挑战数学基础问题-CSDN博客 七进制数 描述 : 给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。 题目 : LeetCode 504. 七进制数 : 504. 七进制数 分析 : 我们先通过二进制想一下7进制数的变化特…

剑指 Offer(第2版)面试题 9:用两个栈实现队列

剑指 Offer(第2版)面试题 9:用两个栈实现队列 剑指 Offer(第2版)面试题 9:用两个栈实现队列解法1:模拟拓展:用队列模拟栈 剑指 Offer(第2版)面试题 9&#xf…

Flutter 控件查阅清单

为了方便记录和使用Flutter中的各种控件,特写此博客以记之,好记性不如烂笔头嘛:) 通过控件的首字母进行查找,本文会持续更新 控件目录 AAppBar BCContainerColumn (列) DDivider (分割线) EElev…

数据结构day4作业

1.单链表任意位置删除 datetype pos;printf("please input pos");scanf("%d",&pos);headdelete_all(head,pos);Output(head);Linklist delete_all(Linklist head,datetype pos) {if(pos<1||pos>length(head)||headNULL)return head;if(head->…

Android中实现RecyclerView,并对item及其多个子控件的点击事件监听

目录 背景 实现RecyclerView 第一步、 新建item的xml 第二步、在activity的布局中引入 RecyclerView 第三步、新建一个adapter 第四步、在activity中初始化绑定adapter即可 实现item及其多个子组件点击事件监听 第一步、 适配器中创建监听对象 第二步、适配器中绑定监听…

【Git】ssh: connect to host github.com port 22: Connection refused

错误展示&#xff1a; 错误原因&#xff1a;22端口被拒绝访问 解决办法 在~/.ssh/config文件&#xff08;有就直接编辑&#xff0c;没有就创建&#xff09;里添加以下内容&#xff0c;这样ssh连接GitHub的时候就会使用443端口。 Host github.comHostname ssh.github.comPort…

mac 聚焦搜索不显示

我是连搜索框都不显示&#xff0c;不是搜索结果显示异常 点右上角的搜索按钮都毫无反应 我检查过快捷键之类的设置&#xff0c;都正常&#xff0c;最后是通过删除文件解决的 cd ~/Library/Preferences/ rm com.apple.Spotlight.plist 重启 mac 参考 Spotlight Search Not W…

串口理解小结(UART)

串口作为单片机的必备外设&#xff0c;主要用于单片机与其它模块的信息通讯、程序烧录和升级作用。 UART全称为通用异步收发器。 可分为&#xff1a; 一、串行和并行 串行指数据位只能一位一位地发送 并行之多个数据位同时发送 二、同步和异步 同步和异步是相当于时钟而…

linux 服务 下 redis 安装和 启动

官网下载 https://redis.io/download/ 安装步骤&#xff1a; 1.安装redis 所需要的依赖 yum install -y gcc tcl2.上传安装包并解压&#xff0c;下载安装包&#xff0c;上传到/usr/local/src目录&#xff0c;解压 tar -zxvf redis-7.2.3.tat.gz进入安装目录&#xff0c;运行…

基于Java SSM框架实现美食推荐管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现美食推荐管理系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&a…

zookeeper 客户端常用命令简单记录(实操课程系列--watcher功能测试)(发布订阅功能测试)

本系列是zookeeper相关的实操课程&#xff0c;课程测试环环相扣&#xff0c;请按照顺序阅读测试来学习zookeeper。阅读本文之前&#xff0c;请先阅读----zookeeper 单机伪集群搭建简单记录&#xff08;实操课程系列&#xff09; 1、命令行工具切换到zookeeper的bin目录下面&am…

【计算机网络笔记】交换机

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

Java零基础——docker篇

1.【熟悉】docker简介 1.1 什么是docker Docker是一个开源项目&#xff0c;诞生于2013年初&#xff0c;最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的Go语言实现。项目后来加入了Linux基金会&#xff0c;遵从了Apache2.0协议&#xff0c;项目代码在GitHub上进…

【开源视频联动物联网平台】流媒体传输协议HLS,FLV的功能和特点

HLS&#xff08;HTTP Live Streaming&#xff09;和FLV&#xff08;Flash Video&#xff09;都是用于视频流传输的协议或容器格式&#xff0c;但它们在某些方面有着显著的区别和特点。 HLS是一种由苹果公司开发的用于流媒体传输的协议&#xff0c;而FLV则是Adobe公司开发的用于…