leospring 发表于 2024-7-27 02:21

手把手分析虾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:24

本帖最后由 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)

可以了

leospring 发表于 2024-8-3 15:44

mythe777 发表于 2024-8-3 11:38
已经有m3u8地址 可以直接解析吧

文章目的是逆向分析过程,并不单纯要知道地址;浏览器抓包或安装插件等等三方好多工具都能获取地址。当然学会这个可以自己代码实现{:301_975:}

zhangxiaoxiao 发表于 2024-7-27 04:08

对我这种菜鸟帮助很大,谢谢楼主分享

ghtao 发表于 2024-7-27 06:39

强{:1_921:},学习了!多谢分享

37893202812 发表于 2024-7-27 06:57

感谢分享

ionk 发表于 2024-7-27 08:10

厉害,学到了

yfyh 发表于 2024-7-27 08:29

辛苦了~感谢分享

longwuling 发表于 2024-7-27 08:30

分析完后,可以下载吗{:1_904:}

xfwww 发表于 2024-7-27 08:41

小白学习,不明觉厉

leospring 发表于 2024-7-27 08:52

zhangxiaoxiao 发表于 2024-7-27 04:08
对我这种菜鸟帮助很大,谢谢楼主分享

共同学习 ,我也是菜鸟

leospring 发表于 2024-7-27 08:57

longwuling 发表于 2024-7-27 08:30
分析完后,可以下载吗

借助三方工具,比如idm;或自己通过代码实现分片多线程下载,再合并分片,论坛搜下,有别人python实现的例子。我这只做分析,不提供完成代码{:1_893:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 手把手分析虾m视频真实地址