js逆向一(某佳网站分析视频数据的生成过程)

1.分析网站数据以及视频的网址

多点击几个电视剧就会发现这个数字代表它的id我们要找的是这个视频的地址

在这里插入图片描述

F12打开开发者模式选中正在播放的视频

在这里插入图片描述


我们会发现源码里找不到我们要的网址所以我们打开抓包工具

在这里插入图片描述


我们发现每看一段他就会给我们发送一段

在这里插入图片描述


他发送过来的是一个.ts格式文件一种视频的文件而且网址只有后面的数字会变现在我们就要去找这个网址是怎么传递的

在这里插入图片描述



我们点开index.m3u8这个包后会发现他的响应数据就是我们这一集的所有的视频地址
这个包的网址是https://hnzy.bfvvs.com/play/DdwR0j8b/index.m3u8
通过几次尝试我们会发现每一集的这个index.m3u8的网址是不同的所以我们要找他是怎么传递的

在这里插入图片描述


我们点开ass.php后查看他的响应数据就会发现他里面的数据就是我们每一集的index.m3u8这个包的网址通过几次的尝试我们发现这个包的url是固定的只有data是变得
我们现在来大致分析一下

ass.php->每一集的index.m3u8->一集中所有视频段的网址

2.data数据分析

经过上面的分析我们发现只要得到了ass.php的数据我们就能得到所有我们需要的数据
ass.php的url固定只有data变化
data的数据->ass.php->每一集的index.m3u8->一集中所有视频段的网址

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


通过两次请求的对比我们发现url vfrom vpart我们暂且判断为定值
vid肯定就是这个电视剧的id
现在我们只要得到cb和_的数据是怎么生成的就可以得到我们要的数据

3.data数据获取

在这里插入图片描述

点击发起程序然后点开第一个

在这里插入图片描述

我们在这一行点一个断点(断点就是程序运行到这里的时候会暂停我们就可以得到他发出去的data数据)
你在这里点断点的时候我们想要的数据已经发出去了所以我们要刷新一下网页

在这里插入图片描述

现在程序暂停了说明这个地方有数据发出
上图所示2的区域就是程序的源码
1的地方就是当前请求的所有数据
我们想要的包的网址是:https://www.shanghaijiuxing.com/ass.php
所以我们就在1区域找有关这个网址的数据如果没有找到说明这次请求的不是我们想要的包我们要让程序继续让他在下一个包停止直到找到我们想要的(也就是点一下上图3的位置)

在这里插入图片描述

我们在最上面那个程序点了个断点所以他每次发送请求我们就会在断点那里暂停并拿到这个请求的所有数据
现在我们就要在1区域找https://www.shanghaijiuxing.com/ass.php
他就在下图这个位置

在这里插入图片描述


就是第一个关闭的位置我们发现这个jsonpcallback就是我们要找的cb这个参数显然他是加密的我们的目的就是找到他的加密过程并破解他

4.寻找加密过程

在这里插入图片描述

和我这个图画的一样这个cb是从下面的程序生成并一步一步传上来的所以我们只要找到哪一个程序的时候cb消失了或者变成不加密的参数了就说明加密的过程就藏在这个程序的上一个程序里

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

这个调用堆栈这里就是我上面说的程序
然后我们点坤下一个aiax

在这里插入图片描述

有cb继续下一个

在这里插入图片描述

这里没有cb了说明cb是在ajax里生成的
我们点开cb的源码然后右边的数据找cb这个参数

在这里插入图片描述

这两行的意思就是jsonpcallback的值是jQuery111305265780285585637_1680621112377
然后cb等于这个jsonpcallback所以我们只需要找到jsonpcallback怎么产生的就可以得到cb
点击左边的源码ctrl+f   搜索jsonpcallback

在这里插入图片描述

这个函数的意思就是定义一个a
a= _b.pop() || m.expando + "_" + vb++
然后当a不为0时将a的值返回给jsonpcallback
||这个符号时与关系当两边任意一个等于空时a等于零
显然我们要的值是m.expando + "_" + vb++
cb的值等于jQuery+数字+_+数字
m.expando=jQuery+数字
vb++=数字

m.expando 获取

我们先来寻找m.expando 如何生成
然后我们重复上面找cb的步骤发现m.expando也是在ajax里生成的
我们CTRL+f 搜索expando
这里是有技巧的我们要找他是怎么生成的所以他后面肯定是赋值=或者:或者是一个函数

在这里插入图片描述

m.expando=jQuery+数字
所以(l + Math.random()).replace(/\D/g, "")就是我们要的一串数字
Math.random()这一看就是个随机数我们打开控制台运行一下
.replace(/\D/g, "")这个的意思能搜到是将字符全部删除
![在这里插入图片描述](https://img-blog.csdnimg.cn/3033c9bf410441e2becb4d787f7084d7.png)
现在我们来找 l 的值
Math.random()去掉字符后就是一个以0开头的一段数字

在这里插入图片描述

这里l=1.11.3是一个定值


其实也可以不用找通过我们多次观察每次cb这个参数的值都是jQuery11130开头0后面就是随机生成的数0前面就是l

现在我们来用python模拟生成m.expando的值
由于后面那个随机数位数不定所以我们就让他等于16位
from random import *
a="jQuery"+'1113' +'0'+str(randint(1000000000000000,9999999999999999))

6.vb参数生成过程

然后我们CTRL+f搜索vb
在这里插入图片描述

在js中.now这个函数一看就是和时间有关现在我们控制台运行一下

在这里插入图片描述

和时间有关又是这种格式所以他就是
Date.now() :返回自 1970 年 1 月 1 日 00:00:00 (UTC) 到当前时间的毫秒数
import time
t = time.time()
vb=(str(round(t * 1000)))

7._数据

除了cb还有一个参数_

在这里插入图片描述

很容易看出   _=vb++

8.数据整合

cb=m.expando + "_" + vb++
_=vb++
vid就是这个电视剧的id
import time
from random import *
import requests
a="jQuery"+'1113' +'0'+str(randint(1000000000000000,9999999999999999))#生成m.expando

t = time.time()
vb=(str(round(t * 1000)))#vb

cb=a+'_'+vb
_=str(int(vb)+1)
print(cb)
print(_)

data={
    
    
'url': 'dp',
'vid': '64063',
'vfrom': '0',
'vpart': '0',
'cb': cb,
'_': _
}
url='https://www.shanghaijiuxing.com/ass.php'
res=requests.get(url=url,params=data).text
print(res)

猜你喜欢

转载自blog.csdn.net/qq_62975494/article/details/129904991
今日推荐