哔哩哔哩Web端登录密码加密分析

发布于 2021-04-15  159 次阅读


前提

本篇博客写于2021.04.15,博客内容存在时效性,请注意辨析内容是否依旧有效。

正文

抓个包,一眼就看到大大的/x/passport-login/web/login

file

看看数据,来源+明文账号+密文密码+跳转链接+验证码数据,听标准的一个登陆口子。

file

验证码数据token/challenge/validate/seccode都是联网交互返回的,没啥加密的,不作分析。

直接来看password字段。

为了方便追js栈,去DevTools里抓一波,发现调用堆栈还挺多,并且函数名还做了混淆。

file

不过疑似关键处的地方不知道为啥没混淆。

file

最开始的那个疑似堆栈如下,目测确实是登录模块的起调入口。

file

然后跟一下login函数,发现DevTools跟偏了,不过问题不大,上下找一下还是可以找到的。

file

其中很明显的一段字段包装语句。

file

跟一下encryptPassword函数。

file

发现似乎是服务器实时生成密钥对然后返回公钥的加密方式。

file

因为RSA用公钥加密后的数据是有随机化处理的,所以并不唯一,而没有私钥又没法解密抓包的数据,所以验证咱们加密思路正确的唯一方法就是写个脚本模拟登录。

但是我懒得去验证了,就把思路发一下吧,基本上可以确定是对的。

接收hashkey,分别作为盐和公钥,然后将hash和密码拼接后RSA一下,就是传递的密码密文。


The End