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.rhkb.cn/news/205681.html

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

相关文章

基于Java web的多功能游戏大厅系统的开发与实现

摘 要 目前,国内游戏市场上的网络游戏有许多种类,游戏在玩法上也越来越雷同,形式越来越单调。这种游戏性系统给玩家带来的成就感虽然是无穷的,但是也有随之而来的疲惫感,尤其是需要花费大量的时间和精力,这…

【Docker】从零开始:8.Docker命令:Commit提交命令

【Docker】从零开始:8.Docker命令:Commit命令 基本概念镜像镜像分层什么是镜像分层为什么 Docker 镜像要采用这种分层结构 本章要点commit 命令命令格式docker commit 操作参数实例演示1.下载一个新的ubuntu镜像2.运行容器3.查看并安装vim4.退出容器5提交自己的镜像…

机器学习笔记 - 3D数据的常见表示方式

一、简述 从单一角度而自动合成3D数据是人类视觉和大脑的基本功能,这对计算机视觉算法来说是比较难的。但随着LiDAR、RGB-D 相机(RealSense、Kinect)和3D扫描仪等3D传感器的普及和价格的降低,3D 采集技术的最新进展取得了巨大飞跃。与广泛使用的 2D 数据不同,3D 数据具有丰…

FDTD方法与其他数值方法有哪些区别?(案例分享)

FDTD方法是一种时域方法,它直接在时间域上模拟电磁波的传播和散射过程。相比之下,其他常见的数值方法,如有限元法(FEM)和有限积分法(FIT),则是在空间域上进行离散化,将电…

运维笔记111

运维笔记 Navicat中查询指定字段名所在的表名tomcat设置JVM的初始堆内存修改catalina.sh文件修改完保存并关闭tomcat启动tomcat 查询数据库连接数查询是否存在死锁 Navicat中查询指定字段名所在的表名 SELECT * FROM information_schema.COLUMNS WHERE COLUMN_NAME‘替换成你要…

redis-cluster集群模式

Redis-cluster集群 1 Redis3.0引入的分布式存储方案 2集群由多个node节点组成,redis数据分布在节点之中,在集群之中分为主节点和从节点3集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读4集群模式自带哨兵模式,可…

SourceInsight - Relation Windows

磨刀不误砍柴工,你使用的工具决定了你的下限。我平时使用较多的代码编辑工具就是SourceInsight,这个工具速度快,操作方便,但处理非常大的项目的性能不是很理想,比如你要是添加整个Linux Kernel的源代码的话。 在使用SI…

微信小程序本地和真机调试文件上传成功但体验版不成功

可能是微信小程序ip白名单的问题,去微信公众平台(小程序)上设置小程序的ip白名单 1、在本地中取消不校验 然后在本地去上传文件,就会发现控制台报错了,会提示一个https什么不在ip白名单,复制那个网址 2、…

rabbitMQ对优先级队列的使用

注意事项: 1.队列设置优先级 权制范围(0-255)推荐0-10 否则浪费CPU与内存 2.发消息时给消息设置优先级 3.消息需要完全事先在队列中,在被消费者消费 会被排序,否则边生产边消费不会达到预期的队列优先效果。 优先级队列…

yolov4、yolov5优化策略

一、yolov4优化策略 1.Mosaic data augmentation:四张图像拼接成一张进行训练,现在一个batch相当于以前4个batch。 2.Random Erase:用随机值或训练集的平均像素值替换图像的区域。 3.Self-adversarial-training(SAT):引入噪音点…

PTA-6-45 工厂设计模式-运输工具

题目如下: 工厂类用于根据客户提交的需求生产产品(火车、汽车或拖拉机)。火车类有两个子类属性:车次和节数。拖拉机类有1个子类方法耕地,方法只需简单输出“拖拉机在耕地”。为了简化程序设计,所有…

python获取json所有节点和子节点

使用python获取json的所有父结点和子节点 并使用父节点加下划线命名子节点 先展示一段json代码 {"level1": {"level2": {"level3": [{"level4": "4value"},{"level4_2": "4_2value"}]},"level2_…

安卓底部导航栏BottomNavigationView

目录 1. BottomNavigationView (1) 准备BottomNavigationView使用的菜单资源文件 (2) 准备颜色选择器 (3) BottomNavigationView控件设置 (4) 在Java代码中设置OnItemSelectedListener监听器 (5) 与Fragment配合 (6) 标签显示模式 (7) 水波纹特效 (8) 文本外观 2. Bo…

配置 Mantis 在 Windows 上的步骤

配置 Mantis Bug Tracker 在 Windows 上的步骤 Mantis Bug Tracker 是一款开源的缺陷跟踪系统,用于管理软件开发中的问题和缺陷。在 Windows 环境下配置 Mantis 可以帮助开发者更方便地进行项目管理。以下是一个详细的教程,包含了 EasyPHP Devserver 和…

C# Onnx 阿里达摩院开源DAMO-YOLO目标检测

效果 模型信息 Inputs ------------------------- name:images tensor:Float[1, 3, 192, 320] --------------------------------------------------------------- Outputs ------------------------- name:output tensor:Float…

qt-C++笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题

qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和异步循环解决相互阻塞的问题 code review! 文章目录 qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和异步循环解决相互阻塞的问题1.Qt的app.exec()详解2.ros::spin()详解3.ros::AsyncSpinner详解4.主线程中结合使用的示…

云时空社会化商业 ERP 系统 gpy 文件上传漏洞复现

0x01 产品简介 时空云社会化商业ERP(简称时空云ERP) ,该产品采用JAVA语言和Oracle数据库, 融合用友软件的先进管理理念,汇集各医药企业特色管理需求,通过规范各个流通环节从而提高企业竞争力、降低人员成本…

SDK emulator directory is missing

要进行uniapp真机测试,不得不安装配置一下安卓开发环境 ,搞一个模拟器。。。然后又是各种坑。。对比来对比去还是IOS的环境使用着舒服,XCODE下载好,一切重点就是在编码了。。 安卓这个脑残货呀,哎,各种安装…

<蓝桥杯软件赛>零基础备赛20周--第8周第1讲--十大排序

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周(读者可以按…

Day58权限提升-网站权限后台漏洞第三方获取

webshell 一般我们的渗透流程就是信息收集,发现漏洞,漏洞利用,一些漏洞成功之后获得一些相应的权限,还有一些是漏洞利用成功之后并没有取得的权限,而这个权限是要通过漏洞利用之后在利用其它地方取货的权限。 权限的获…