某咕视频登录参数分析

目标地址:aHR0cHM6Ly9wYXNzcG9ydC5taWd1LmNuL3BvcnRhbA==

直接抓一波登陆包,只看ajax,如下,这个加密有点长
ajax.png
看到这个加密结果和publickey请求,肯定用的RSA算法,publickey返回公钥(n, e)。
老套路,暴力搜索,然后带点技巧。

  1. 直接搜索最长的fingerPrintDetail
  2. 在结果中寻找RSA、encrypt等字眼,在可疑的地方下断点
  3. 我们点击登录时,发了两个ajax请求,可以猜测,在第一个ajax的success回调中获取到公钥然后加密,发起第二个请求

综合以上几点,比较容易定位到加密位置:

encrypt.png

在这里可以找到所有的加密参数,跟进继续调试,发现用户名和密码的加密过程都在一个对象里进行,那么直接把这个对象所有代码抠出来就完了:

rsa.png

把这段RSA扣完,稍微改写,再拿到公钥,去本地环境测试一下,会报两个错,navigator、window未定义,找到使用到navigator的地方,发现对浏览器appName做了判断。去浏览器中,打印一下navigator.appName,补上就好了。最后就补了两行代码

const window = global;
const navigator = {"appName": 'Netscape'};

再测试,能够正常加密了,loginID和enpassword两个参数解决了,然后就是fingerPrint,浏览器指纹校验了。继续跟进上面的加密,在rsaFingerPrint函数中完成了浏览器指纹的加密
fingerPrint.png
这里的重点在details和result,一个是浏览器的相关信息,一个是对这些信息做了加密,经过多次调试,发现对于固定的浏览器,这两个参数不会变化,只需要在代码中把他写死就行了,再对这两个信息做RSA加密。
把整个函数扣出来,也是稍微改改就行了。
其实他的fingerPrint获取和加密都在这个对象里
fingerPringLib.png
感兴趣的可以把加密的部分扣出来。

最后,上一波请求结果:
login.png
这次的JS代码改得比前几次稍微多点,JS要过关。

代码:Github

Q.E.D.


一切很好,不缺烦恼。