JS 逆向 SMZDM 的登录加密,你学过全文扣 JS 代码解密吗?
⛳️ 实战场景
本篇博客,为大家继续带来一篇关于登录参数解密,谁叫这是反爬重灾区呢,这次被我们盯上的平台是【SMZDM】。
本次目标站点是:aHR0cHM6Ly93d3cuc216ZG0uY29tLw==
。
正式开始前,先注册一个账号,然后模拟一下登录,看一下有哪些参数被偷偷的藏起来了~
当看到登录之后的所有请求参数时,我们还是默默的把站点关闭,撤吧。

从上图可以看到 username
,password
是重要加密区,geetest_
开头的参数是下述点选验证码涉及的内容,本阶段不做拆解,可以持续关注后续验证码部分逻辑。
登录的点选验证码可以先忽略,这个阶段搞定它不是很容易。

接口请求参数是:
请求网址: zhiyou.smzdm.com/user/login/ajax_normal_check
请求方法: POST
⛳️ 参数分析
本次我们先不添加断点,先通过请求启动器进行分析,打开该链接的请求调用堆栈,然后依次分析相关地址。

根据经验可以发现有一个 common_submit
函数,其所在的文件是 window.js
,可以重点关注。
接下来添加一个 XHR 断点,关键字是 login/ajax_normal_check
。
断点打住之后,可以直接进入目标函数。

结果直接找到了相关加密逻辑,如下图所示。

核心代码进行提取,然后进一步进行分析。
结果发现 login_obj.encryptPassword
函数竟然调用了一个新的接口。
关于账号使用的是 js btoa,这个没有什么特别的,就是简单的 base64 加密
通过开发者控制台,测试使用 btoa
加密 12345
,然后在通过 Python 进行相同的加密。

二者结果一致,username
参数解决。
下面继续看 password
参数,密码加密的流程是:
通过一个 API 获取
pub_key
;对
pub_key
进行atob
编码;设置
JSEncryptRSAKey
加密 KEY;对用户密码进行加密。
测试 pub_key 加密接口是否可以直接调用
运行代码得到如下响应,其中 pub_key
也被获取到。

多次测试接口之后,发现错误,触发了账户限制,在大家编码的时候,建议多准备几个不同的账号,防止被封禁。

进一步调试发现 JS 加密使用的是一个插件,直接下载对应 JS 如下
在本地搭建一个 JS 代码可以运行的环境编写如下代码,其中涉及上述提及的文件。
然后可以用 Selenium 进行调用,通过 URL 参数传递 pub_key 即可。

逻辑也非常简单,Python 调用接口生成 KEY,然后将 KEY 传递到我们自己构建的 JS 环境中,最后通过 Python 调用目标站点(自己搭建)的地址,获取加密值,然后进行传递。
📣📣📣📣📣📣右下角有个大拇指,点赞的漂亮加三倍
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/557c6dab2e301416a9c7524b6】。文章转载请联系作者。
评论