带领全网朋友,完成粉笔登录加密分析,再次换种玩法 Y25
📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
⛳️ 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
获取一个随机数。
📣📣📣📣📣📣
右下角有个大拇指,点赞的漂亮加倍
- 点赞
- 收藏
- 关注作者
评论(0)