Form Data 解决了,再来看看 Request Headers 里的 token 参数,由于它存在于请求头里,所以我们可以通过 Hook 的方式来查找其生成的地方:这里我们也可以直接搜索 token、setRequestHeader 之类的关键字,很容易在 common.js 里找到,当我们点击登陆,会有一个 csrfSave 的请求,返回的 data 值,经过 encrypt 方法加密后就是登陆请求头的 token 了。
打开斗鱼登录界面:按F12输入错误账号密码,查看提交的请求是哪个:查看FormData:可以看到password变成了一串啥,应该是加密了,现在从调用栈进去,最好点击文件名里包含login的进去:进去之后搜索password:在上面这里打上断点。
好程序员web前端培训分享JavaScript框架JavaScript 是开发领域的重要技术之一。根据 Statista 的报告,JavaScript 是 2019年开发人员使用的最流行的编程语言,在2020年亦是如此。
如果一个页面大部分是script标签构成,80%以上是webpack打包。然后重写 window 数组的 push 方法为 webpackJsonpCallback,也就是说 window.push 其实执行的是 webpackJsonpCallback,window.push接收三个参数,第一个参数是模块的ID,第二个参数是 一个数组或者对象,里面定义大量的函数,第三个参数是要调用的函数。
跟进到 _0x7f9865 函数中,直接把算法扣下来:我们来分析下这是什么算法,倒着看,_0x70f89f、_0x1d4342 之类的是一些十进制数,keyStr.charAt 就是获取 keyStr 字符串特定位置的字符值,最后拼接起来:keyStr 就是源码中的 this,其值如下,长度为 65 位:这一串完全符合 Base64 编码索引表的特征,包含大写字母、小写字母、数字、加号和斜杠,64 位,还有一个填充字符,Base64 编码的基本流程如下,例如编码 Hello 字符串:首先,将 Hello 转换为 ASCII 码,得到 72 101 108 108 111;
发现这个 JS 被混淆了,我们可以用 v_jstools 进行简单的变量还原,替换进去即可,最终我们分析可得,data 参数是由 ek 和轨迹明文加密得到的,这里我们跟进加密函数 h 中,看看 data 是如何生成的: