手把手分析虾m视频真实地址
本帖最后由 leospring 于 2024-7-27 02:51 编辑## 声明
本文内容为小白入门实战教程,大神请忽视;本文仅供学习交流,请勿用于商业和非法用途,否则由此产生的一切后果均与作者无关;若有侵权,请联系立即删除!
## 接口地址
aHR0cHM6Ly9qeC54bWZsdi5jb20vP3VybD1odHRwczovL3YucXEuY29tL3gvY292ZXIvbXpjMDAyMDB1OHZmemN6Lmh0bWw=
## 实战开始
1. 浏览器打开开发者模式,输入网站请求
直接就请求完成了,没有复杂的无限debugger;省了很多事情;
2. 观察ur请求
上面的请求不多,都点点看看,注意请求的参数与响应体
细心的同学会发现,这个xmflv.js的请求很诡异,居然是个post请求,响应体是个图片,图片还是裂图,这里边绝逼有鬼,看看这个请求结果到底是什么。
3. 分析怀疑的请求
这个请求提供两种方式
- 将图片下载本地,然后以文本打开该文件
- 复杂请求的url,在控制台查看请求响应结果
可以发现,加密结果和加密方式 key iv都出现了,解密看看结果,正是最终的直链地址(这里就不贴图了)
4. 分析算法
现在目标很明确了,就是获取上述接口的4个请求参数
wap:是固定的 1
url:是需要解析的官网地址url
time:一眼就看出是时间戳
就剩下 key 参数了,接下来要进行断点跟踪了,这里提供两种方式
- 关键字搜索
尝试 key: "key":'key':进行全局搜索,最终发现 'key': 能跟到目标代码处
- XHR接口断点
我们知道请求的url,可以添加url断点,再重新请求
点击请求的上游调用栈,很快就找到了请求参数生成地方
key 的生成算法是:
```
sign(ll1lIl1l['KKVzz'](hex_md5, ll1lIl1l(I111ill, url)))
```
算法混淆比较简单,我们在console打印每一步参数与function
转换下 key = sign(hex_md5(time + url))
在追踪sign跟 hex_md5方法
sign是标准AES CBC加密
好复杂,根据方法名,盲猜是MD5后再hash,随便找个参数验证一下
晕, 直接就是MD5呀,分析结束。
5. 全局关键字搜索
通常在上面第2步分析url没有头绪时,可以直接全局搜索关键字,最常用关键字:decrypt
再跟踪调用栈,也找到目标解密代码处
本帖最后由 hebeijianke 于 2024-7-27 23:39 编辑
import requests
import time
from Crypto.Cipher import AES
from hashlib import md5
from base64 import b64encode
from urllib.parse import unquote, unquote_plus, quote, quote_plus
def md5_hash(data):
"""对字符串进行MD5散列并返回其十六进制表示"""
hash_object = md5(data.encode('utf-8')).hexdigest()
return hash_object.encode('utf-8')
def aes_encrypt(data, key, iv):
"""使用AES CBC模式加密明文"""
cipher = AES.new(key, AES.MODE_CBC, iv)
encrypted_text = cipher.encrypt(data.encode())
return b64encode(encrypted_text).decode('utf-8')
def sign(data):
plaintext = md5(data.encode('utf-8')).hexdigest()
key = md5_hash(plaintext)
iv = b'3cccf88181408f19'
encrypted = aes_encrypt(plaintext, key, iv)
return encrypted
url = quote('https://v.qq.com/x/cover/mzc00200yxnj6nj/n41009m0vya.html', safe='')
headers = {
'Host': '122.228.8.29:4433',
'Origin': 'https://jx.xmflv.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0',
}
tm = int(round(time.time() * 1000))
payload = {
'wap': 1,
'url': url,
'time': tm,
'key': sign(f"{tm}{url}")
}
con_url = f'https://122.228.8.29:4433/xmflv.js'
res = requests.post(con_url, headers=headers, data=payload)
print(res.status_code)
print(res.text)
可以了 mythe777 发表于 2024-8-3 11:38
已经有m3u8地址 可以直接解析吧
文章目的是逆向分析过程,并不单纯要知道地址;浏览器抓包或安装插件等等三方好多工具都能获取地址。当然学会这个可以自己代码实现{:301_975:} 对我这种菜鸟帮助很大,谢谢楼主分享 强{:1_921:},学习了!多谢分享 感谢分享 厉害,学到了 辛苦了~感谢分享 分析完后,可以下载吗{:1_904:} 小白学习,不明觉厉 zhangxiaoxiao 发表于 2024-7-27 04:08
对我这种菜鸟帮助很大,谢谢楼主分享
共同学习 ,我也是菜鸟 longwuling 发表于 2024-7-27 08:30
分析完后,可以下载吗
借助三方工具,比如idm;或自己通过代码实现分片多线程下载,再合并分片,论坛搜下,有别人python实现的例子。我这只做分析,不提供完成代码{:1_893:}