写点什么

带领全网朋友,完成粉笔登录加密分析,再次换种玩法

作者:梦想橡皮擦
  • 2022 年 7 月 16 日
  • 本文字数:1146 字

    阅读完需:约 4 分钟

📢📢📢📢📢📢💗 你正在阅读 【梦想橡皮擦】 的博客👍 阅读完毕,可以点点小手赞一下🌻 发现错误,直接评论区中指正吧📆 橡皮擦的第 <font color=red>637</font> 篇原创博客


⛳️ Python 爬虫实战场景

本次要解决的加密战场是粉笔,域名网址是:U2FsdGVkX1+TW3WG675sAY/ppQZP881CUfDzQrO+KibJEh0YwXOFxwn5e4O4HdlE


本次使用的是 AES 加密,密钥是 xiangpica


进入首页之后,直接点击登录操作,然后随机输入内容,看是否存在验证码逻辑。



输入如下内容,捕获请求数据:


  • 手机号/邮箱:158****1234(纯粹测试数据,无此号码)

  • 密码:123456;


本次抓包软件使用 fiddler,截获到的请求如下所示:



页面请求数据如下所示,可以看到只有 password 参数进行了加密操作,通过观察可以猜测是 base64 加密,后续可以进行验证。



接口如下所示:


  • 请求网址: https://Python 脱敏处理/api/users/loginV2?kav=12&app=web&client_context_id=c97948b29e8f984595852d3d1da9f48d

  • 请求方法: POST


在请求地址中发现一个 client_context_id 参数,目测是 md5 加密,后续我们也进行一下相关验证。

⛳️ Python 实战爬虫加密参数解析

polyfills-.js:formatted 文件添加断点,再次点击登录按钮,等待断住



依旧是采用堆栈跟踪的形式,寻找参数加密位置。


断点可以稍微前置一些,在赋值位置检索变量加密来源。



断点打在这里,还是没有发现数据加密来源,可以继续前移断点位置。在反复跟进断点的过程中,发现了下述代码:


const l = n.serializeBody();
复制代码


其中的 n 存放了加密之后的密码串,添加断点。接下来的步骤就是反复测试,不断查阅堆栈的方法,其中有一个函数名成功引起了注意, LoginByPsw



定位到该方法中,发现了加密位置,函数,以及请求数据的相关逻辑。



其中 password 加密的形式如下所示:


var n = {  password: this.encrypt(this.password),  persistent: !0,  app: "web",};
复制代码


this.encrypt() 函数中的加密逻辑比较简单,直接查阅代码即可。


encrypt(n) {    return window.encrypt(this.publicKey, n)}
复制代码


其中 punlicKey 在文件中检索一下,确定该公钥值。



逻辑找到之后,可以直接使用前面博客中用到的知识点,伪造 JS 环境,当然直接扣取 JS 也是可行的。

URL 中的加密参数

此时还剩下一个 URL 中的加密参数 client_context_id 还未解决,寻找一下相关代码。


在开发者工具中直接检索关键字,得到下图结果。



得到加密内容如下所示:


getClientContextId() {  this.client_context_id = "" + wr.Md5.hashStr("" + this.userInfo.id + this.aliShenceTime + this.aliShenceRandom)}
复制代码


不过该加密函数貌似在登录接口用处不大,因为在其中的用户 ID 信息在登录前,并未生成,所以大家忽略即可,aliShenceTime 获取时间戳,aliShenceRandom 获取一个随机数。


📣📣📣📣📣📣右下角有个大拇指,点赞的漂亮加倍


发布于: 刚刚阅读数: 7
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
带领全网朋友,完成粉笔登录加密分析,再次换种玩法_Python_梦想橡皮擦_InfoQ写作社区