3. 抖音 Web
最后更新于
最后更新于
访问官网 抖音-记录美好生活 (douyin.com) ,随意选择一个视频,访问用户信息
打开 F12
抓包, 定位目标 API
可以看到加密参数再 URL
的 Params
里面
尝试全局搜索一下,看看是否能搜索到这个参数的生成位置,找到了两个,那么我们打一下断点分析一下
发现没有断到,所以尝试一下 XHR
断点
打上了,发现 X-Bogus
就在其 openArgs
上,这个时候可以看一下调用堆栈,发现其发起 JS
是 webmssdk.es5.js
,所以 webmssdk.es5.js
这个文件应该就是我们需要分析的 js
文件了!
点进去发现居然是这样的一段代码,也就是 jsvmp
,JSVMP
全称 Virtual Machine based code Protection for JavaScript
,即 JS
代码虚拟化保护方案。
通过上一步我们可以定位到,发起 XHR
请求的函数为 webmssdk.es5.js
里面的 W
函数,在分析 JS
之前,可以将该段 js
使用插件进行一个反混淆,插件是 v_jstools
, 地址为:cilame/v_jstools: 模仿着写一个开源的 chrome 插件,用来快速调试前端 js 代码。 (github.com)
还原后再使用浏览器自带的 js
替换功能来替换掉原来的 js
,回到刚刚的加密处,发现此时的 m
已经有了加密参数
此时我们可以添加一下日志断点,因为现在加密参数再 m
里面,而分析代码又可以知道 m
来自于 O[S--]
,所以我们日志断点可以为:
添加完之后刷新页面,并将控制台的日志保存下来,再尝试搜索加密的 Key
发现当 P
为 13, S
为 3 的时候,O
里面就有了 X-Bogus
,我们继续看日志,首先找到这个参数第一次生成的地方,然后你会发现这个参数居然是一个一个慢慢叠加生成的,每次执行一次就会多一个字母,执行到最后我们需要的 X-Bogus
就生成完毕了!
![image-20230508165250325](https://ghproxy.com/https://raw.githubusercontent.com/KKKKKKKEM/picture/main//image-20230508165250325.png)
所以我们在 SFSzs
到 DFSzsw
之间可以下一个断点来逐步分析,这种情况下可以插桩下一个断点
这里有一个嵌套的三元表达式,分析起来可能比较困难,因此我们可以改写一下便于理解!原来的代码为
可以改写为:
此时断下来之后,我们可以知道 w
为 [18]
,m
为一个函数,也就是 charAt
,P
经过赋值之后就是 "Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe="
,根据逻辑会走到第一个 else
里面去,所以 O[++S] = P.apply(m, w)
就相当于执行代码 "Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=".charAt(18)
,结果就是 w
根据日志分析一下就可以看出来了
所以该算法就是有一个 table
为 Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=
,每次都取 O
里面的第六号元素,然后与之前的结果拼起来。
那么我们接下来需要分析的就是这个 table
是怎么来的,然后 O
里面的第六号元素是怎么来的,因此我们需要逐步分析!