美拍视频JS分析

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/gklcsdn/article/details/101876164

美拍视频JS分析

1. f12找到视频地址, 在网页源代码里并没有出现, 大致可判断是通过js加密生成的

在这里插入图片描述

2. 网页源代码里也没有发现class 值 mp-h5-player-layer-video, 可确定必定是通过js加密生成的; 这里就需要一定的js基础了, js是可以添加类属性的

在这里插入图片描述

3. 全局搜索mp-h5-player-layer-video, 打断点, 刷新页面进入断点处, n就是需要的值

在这里插入图片描述

4. 查找n的来源; n 是通过e.src生成; 而e又是function的一个参数, 这时需要从调用堆栈里查找e的来源; 查找下一个请求发现目标值存在于参数c里面; 目标转移, 查找c的来源

在这里插入图片描述

5. 变量c在1692行定义 c = this._config; this._config在1677行定义;

在这里插入图片描述

6. this._config处打断点; 打完断点后发现目标值出现在t里面; 继续查找右侧的调用堆栈

在这里插入图片描述

7. 在28行找到了src定义的地方, 打断点进入

在这里插入图片描述
在这里插入图片描述

8. 这里就是src定义的地方了, 现在就要分析src是如何加密的了

在这里插入图片描述

9. 接下来就是跳入跳出操作了, 稍有差池就只有从头再来

在这里插入图片描述

10. 单步跳入; 这里就是js基本语法了, 不做过多说明; getHex 作用: a[h](4)丢掉字符串a的前四位, a[h](0, 4)[i]("").reverse().join("")获取字符串a的前四位然后倒序
a[h](4) = "Ly9phcItdnZpZGVvMTEubWVpdHVkYXRhLmNvbS81ZDZiMzI4MjRhZTcyMnpjemMxemlkNzg5Ml9IMjY0XzFfNjI3Y2FiMjQyZjNkMmQubXALCCPYq7eO0"
a[h](0, 4)[i]("").reverse().join("") = "0d5b"

在这里插入图片描述

11. 单步跳出, 单步跳入; getDec作用: parseInt(a, 16).toString()将字符a转为10进制数; b[h](0, 2)[i]("")取字符b前两位转换成数组; b[h](2)[i]("")取字符b后两位转换成数组
b[h](0, 2)[i]("") = ["3", "4"]
b[h](2)[i]("") = ["1", "9"]

在这里插入图片描述

12. 单步跳出, 单步跳入; substr作用: a[h](0, b[0])取字符a的前b[0]位; a[k](b[0], b[1])从b[0]开始截取b[1]位
a[h](0, b[0]) = "Ly9"
a[k](b[0], b[1]) = "phcI"
c + a[h](b[0])[j](d, "") = 
"Ly9tdnZpZGVvMTEubWVpdHVkYXRhLmNvbS81ZDZiMzI4MjRhZTcyMnpjemMxemlkNzg5Ml9IMjY0XzFfNjI3Y2FiMjQyZjNkMmQubXALCCPYq7eO0"

# 最终作用就是将phcI丢掉

在这里插入图片描述

13. 单步跳出, 单步跳入; getPos作用
b[0] = a.length - b[0] - b[1] = 103   # 字符a的长度 - b[0] - b[1], 其中a, b可直接将鼠标滑动到a,b上获取
b = [103, "9"]

在这里插入图片描述

14. 单步跳出, 单步跳入; 最后这个就是base64解码
a = 'Ly9tdnZpZGVvMTEubWVpdHVkYXRhLmNvbS81ZDZiMzI4MjRhZTcyMnpjemMxemlkNzg5Ml9IMjY0XzFfNjI3Y2FiMjQyZjNkMmQubXA0'
将 a 通过base64解码即可获取视频地址

在这里插入图片描述

备注

1. 字符来源: data-video可直接从网页源代码里获取

在这里插入图片描述

2. 总体流程
(1) 获取字符
0e40LBAy9tdnZpZGVvMTEubWVpdHVkYXRhLmNvbS81ZDZiMzI4MjRhZTcyMnpjemMxemlkNzg5Ml9IMjY0XzFfNjI3Y2FiMjQyZjNkMmQuapiNloJZbXA0
(2) 取字符前四位倒序, 然后转10进制(假如最后转成的10进制为3467) 
LBAy9tdnZpZGVvMTEubWVpdHVkYXRhLmNvbS81ZDZiMzI4MjRhZTcyMnpjemMxemlkNzg5Ml9IMjY0XzFfNjI3Y2FiMjQyZjNkMmQuapiNloJZbXA0
0e40  ==> 04e0  ==> 1248
(3) 分成两组(前两位34为一组, 后两位67为一组)
(4) 截取字符(第一组从索引3开始丢掉4, 第二组从倒数第六位开始丢掉7, 注意索引从0开始)
Ly9tdnZpZGVvMTEubWVpdHVkYXRhLmNvbS81ZDZiMzI4MjRhZTcyMnpjemMxemlkNzg5Ml9IMjY0XzFfNjI3Y2FiMjQyZjNkMmQubXA0
(5) base64 转码获取字符
//mvvideo11.meitudata.com/5d6b32824ae722zczc1zid7892_H264_1_627cab242f3d2d.mp4

猜你喜欢

转载自blog.csdn.net/gklcsdn/article/details/101876164
今日推荐