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

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

一、找出需要加密的参数
  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.hqwc.cn/news/233354.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【虚拟机】Docker基础 【二】

2.2.数据卷 容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。大家思考几个问题: 如果要升级MySQL版本,需要销毁旧容器,那么数据岂不是跟着被销毁了&#x…

Elasticsearch:对时间序列数据流进行降采样(downsampling)

降采样提供了一种通过以降低的粒度存储时间序列数据来减少时间序列数据占用的方法。 指标(metrics)解决方案收集大量随时间增长的时间序列数据。 随着数据老化,它与系统当前状态的相关性越来越小。 降采样过程将固定时间间隔内的文档汇总为单…

MATLAB中imbothat函数用法

目录 语法 说明 示例 使用底帽和顶帽滤波增强对比度 imbothat函数的功能是对图像进行底帽滤波。 语法 J imbothat(I,SE) J imbothat(I,nhood) 说明 J imbothat(I,SE) 使用结构元素 SE 对灰度或二值图像 I 执行形态学底帽滤波。底帽滤波计算图像的形态学闭运算&#…

idea类和方法模版

类模版 修改目标位置 class #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java")/*** ${Description}* author whc ${YEAR}/${MONTH}/${DAY}* version v1.0 */public class ${NAME} { }inte…

员工流动是机密泄露的大门?迅软DSE带您重新上锁!

对于员工离职行为管控是经常被忽视的内部威胁的一个来源,现在超过四分之一的员工在离职时窃取数据。无论他们这样做是出于疏忽还是恶意,这种情况只会对企业产生负面影响,包括失去竞争优势、因不遵守网络安全要求而受到处罚等。 数据盗窃的危险…

使用影刀指令+python实现简单的长文本乱序加密

本文意在利用影刀指令python代码,实现一种较为简单的长文本加密和解密,流程结构分为两步: 加密原理–是把字符转为列表,利用列表random模块中的shuffle函数做随机乱序。解密原理–是利用了列表的索引追踪,先前创建字典…

如何运用智能安全帽、执法记录仪等技术手段提高隧道施工人员定位和安全监管效率?

应用需求 隧道中通常没有4G网络,无法搜到GPS卫星, 而领导从安全生产监管的角度,又需要看到现场的视频、录像、人员定位等。这正是本方案需要解决的问题。 系统特点 在无网络的隧道内部录像,紧急情况可派人出隧道,把…

【精选】Spring框架介绍及Spirng各个版本的特性

Spring框架介绍 Spring框架英文全称Spring Framework,是由Spring团队研发的模块化、轻量级开源框架。其主要目的是为了简化项目开发。在项目开发中,可以说没有刻意使用Spring,却处处有着Spring存在。用官网对Spring框架的介绍:Sp…

深度学习——激活函数汇总

深度学习——激活函数汇总 一、ReLU 一、ReLU 参考资料: https://zhuanlan.zhihu.com/p/428448728

NX二次开发UF_CURVE_create_bridge_feature 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_bridge_feature Defined in: uf_curve.h int UF_CURVE_create_bridge_feature(UF_CURVE_bridge_data_p_t bridge_data, tag_p_t bridge_feature ) overview 概述 …

一文读懂Asyncio

什么是Asyncio asyncio 是用来编写并发代码的库,使用async/await语法。 asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。 asyncio 往往是构建 IO 密集型和高层级结构化…

【趣味篇】Scratch之像素版恐龙飞奔

【作品展示】像素版恐龙飞奔 操作:点击小绿旗进入游戏主页面,一只可爱的小恐龙会直接开跑。当看到前方障碍物之后,按下键盘空格键躲避障碍物。