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)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,似乎是在讨论对于一个加密的网址进行解密的问题。其中使用了AES加密算法和CryptoJS库来实现解密操作。具体代码如下: const CryptoJS = require('crypto-js'); function getRealUrl(hh) { var s = "qnbyzzwmdgghmcnm"; var aa = hh.split("/"); var aaa = aa.length; var bbb = aa[aaa - 1].split('.'); var ccc = bbb; var cccc = bbb; var r = /^\ ?[1-9][0-9]*$/; if (r.test(ccc) && cccc.indexOf('jhtml') != -1) { var srcs = CryptoJS.enc.Utf8.parse(ccc); var k = CryptoJS.enc.Utf8.parse(s); var en = CryptoJS.AES.encrypt(srcs, k, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); var ddd = en.toString(); ddd = ddd.replace(/\//g, "^"); ddd = ddd.substring(0, ddd.length - 2); var bbbb = ddd + '.' + bbb; return bbbb; } } getRealUrl() 这段代码是用于对加密的网址进行解密,具体的解密过程如下: 1. 将加密前的字符串cc分割成数组aa,获取数组长度aaa和数组最后一个元素bbb。 2. 判断最后一个元素bbb是否符合一定的格式要求。 3. 如果符合要求,则将cc转换成CryptoJS的Utf8格式的srcs,并生成一个Utf8格式的密钥k。 4. 使用AES加密算法将srcs和k进行加密操作,采用ECB模式和Pkcs7填充方式。 5. 将加密结果转换成字符串ddd,并替换其中的'/'字符为'^'。 6. 截取ddd中除去最后两个字符的部分,然后与bbb拼接起来,得到解密后的网址bbbb。 7. 返回解密后的网址bbbb。 关于js逆向深圳信数据服务的问题,根据提供的引用内容,目前并没有相关的信息来回答该问题。请提供更多相关的信息,以便更好地回答您的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [js逆向-某市公共资源交易网](https://blog.csdn.net/weixin_46672080/article/details/126003502)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [aqistudy真气网JS逆向 + 数据采集(20220801)](https://blog.csdn.net/zhu6201976/article/details/126124548)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我把把C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值