吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11962|回复: 282
收起左侧

[Web逆向] 取蓝奏云直链教程(附python源码)

    [复制链接]
baipiao520 发表于 2024-3-17 09:15
本帖最后由 baipiao520 于 2024-3-22 23:40 编辑

准备工作

浏览器
python环境

所需的库

  • request 用于发送请求
  • json 用于解析json格式的response
  • re 用于正则提取response中的参数  

开始分析

访问我们的网盘分享链接,
浏览器打开F12元素
直接看下载按钮的属性,
{1CB005F8-29BF-48a1-AEF6-3A2EABC1A8E1}.png
会发现直接包含了下载直链,我们尝试直接request,看看能不能直接获取这个直链

import requests
url = "https://wwt.lanzouu.com/icuiF1o31f8d"
headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
    }
response = requests.get(url, headers=headers)
print(response.text)

运行后会发现没有我们刚刚找到的直链,但是发现了另外一个链接跟网页中格式是相同的
{51DFF670-2C12-4c6d-9AFD-AB08F573E1BB}.png
{65E23D3F-8B0C-460f-B0CD-79FEB4CDEFF8}.png
所以我们就要先从这个链接入手,看看他返回什么,
我们打开浏览器的网络调试,发现他确实访问了这个网页
{63364134-E26C-424f-AC97-43F931F0A200}.png
点开response查看响应,发现了下载地址来源于一个ajax脚本
{1414B676-27CF-467e-B87A-3E93B67A89BE}.png
我们把这个ajax扔到chatgpt
{808E5214-4779-493d-9365-4AB4A4D1A632}.png
发现其实是一个post请求,将data中包含的几个值post到指定网页,我们在网络调试中也可以看到
——————
说了这么多程序还不能匹配这个网页,我们先给程序加上正则

import re
iframe_pattern = re.compile(r'<iframe\s+class="ifr2"\s+name="\d+"\s+src="([^"]+)"\s+frameborder="0"\s+scrolling="no"></iframe>')
matches = iframe_pattern.findall(response.text)

这样matches[1]就是我们要的网页了。
再次request这个网页。

response2 = requests.get(matches[1], headers=headers)
print(response2.text)

运行发现……竟然报错了!
{25F3529E-3119-4027-BAC4-BF3E30549174}.png
原来是忘记把域名加上了,这里我们可以直接添加

response2 = requests.get(f"https://wwt.lanzouu.com{matches[1]}, headers=headers)

也可以写一个函数正则匹配我们的url的域名

def re_domain(url): 
    pattern_domain = r"https?://([^/]+)"
    match = re.search(pattern_domain, url)
    if match:
        domain = match.group(1)
        return domain
    else:
        return None

发现确实能取回这个ajax脚本,那不就好办了
{B86B16E1-AFC3-480e-A576-119B64C2D6CA}.png
多试几次发现只有sign是变化的,剩下的几个data都是固定的
所以正则匹配我们需要的sign和下一步post的url

pattern = r"'sign'\s*:\s*'([^']+)'"
match = re.search(pattern, response2.text)
pattern2 = r"url\s*:\s*'([^']+)'"
match2 = re.search(pattern2, response2.text)
print(match[0], match2[0])
'sign':'VTMHOVloBjcEDVRrCzsAPFQ_aBTZSPgMwBzFXYwVsW29SYVUkAClSOwViVjdUMQEwVzsFMwRtADQCMVBk' url : '/ajaxm.php?file=163112553'

取出了sign和url就好办了,直接写下一个post
注意这里的sign和url都不是str类型,而是Match类型,我们要先用group(1)方法取回str
(有的人会说为啥不直接post这个固定网页还要进行前面的操作?
因为sign值是会变化的,只有通过第二次访问我们才能知道这个sign值是多少)

data = {
    'action': 'downprocess',
    'signs': '?ctdf',
    'sign': match.group(1),
    'websign': '',
    'websignkey': 'bL27',
    'ves': 1
}
response3 = requests.post(f"https://{re_domain(url)}{match2.group(1)}", headers=headers, data=data)
print(response3.text)
{"zt":1,"dom":"https:\/\/down-load.lanrar.com","url":"?VDJVaw08BzYBCFdvAjdTP1JtADhfTVESCkxXtFGdUtcB5gb2CNgFuAPCBf0AvVX2V5VXugX9CqsG5FHRXbJXsFTCVbsNtgfyAd9XNQJ4U2FSJgBgX3hRNgorVzdRZFI\/AWQGDgg8BTUDaAViAGJVZ1c8V2MFaAo9BjRRZF0nVzBUJ1U\/DWEHawFmVzkCYFNgUjwAI19wUSMKMFdjUT1SYQE1Bn4IZQVjA3oFYgBmVXtXaFdnBWsKMAZiUWFdMldkVGJVZw02B2YBZFdkAjdTMFJsAGNfYVEwCj1XNFE6UjEBZAZmCGAFYwMwBTcAbVVjVyNXNwUiCm0GJ1EiXXJXM1QmVWsNNAduAWZXNwJvU2dSMAA9XzVRdQp5VzhRYFI2AWcGbAhkBWEDZQVjAGRVelcjV3QFPApkBnZRal0wV2FUZVUyDWUHagFiVzgCYFNrUi4AcF9wUSQKMFdgUTpSYwE2BmYIZgVjA2UFYgBmVXJXeFc7BSoKNQY0UW9dL1dgVGZVLA1hB2ABYlcvAmdTZw==","inf":0}

取回的text是json格式的,那么我们就要用json解析它

import json
data = json.loads(response3.text)

通过上面的ajax脚本我们会发现他下载链接的拼接方式为dom + "/file/" + url

dom = data['dom']
url = data['url']
full_url = dom + "/file/" + url
print(full_url)

打印这个url后发现,不管是我们用python request还是浏览器访问这个网页,都显示错误400
查看浏览器的网络调试,原来是访问的时候协议头有一个来源
{D0B9F372-1315-4e0f-85D8-841E78F96D9B}.png
这个挺关键的,我们把它加到post的协议头中

headers2 = {
    "Referer": matches[1],
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
response3 = requests.post(f"https://{re_domain(url)}{match2.group(1)}", headers=headers2, data=data)

重新运行得到新的直链,打开发现就能正常下载了
但是我们观察浏览器,发现其实这个直链还进行了一次重定向,那么我们也进行一次重定向再获取重定向后的网页

headers = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"sec-ch-ua": "\"Chromium\";v=\"122\", \"Not(A:Brand\";v=\"24\", \"Microsoft Edge\";v=\"122\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "none",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"cookie": "down_ip=1"
}
response = requests.get(full_url, headers=headers, allow_redirects=False)
print(response.headers['Location'])

运行后终于找到了最终的直链
{41986CD7-C865-48e8-83F7-FCE7641F62D5}.png

完整程序

import requests
import re
import json
def re_domain(url):
    pattern_domain = r"https?://([^/]+)"
    match = re.search(pattern_domain, url)
    if match:
        domain = match.group(1)
        return domain
    else:
        return None
url = "https://wwt.lanzouu.com/icuiF1o31f8d"
domain = re_domain(url)
headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
    }
response = requests.get(url, headers=headers)
iframe_pattern = re.compile(r'<iframe\s+class="ifr2"\s+name="\d+"\s+src="([^"]+)"\s+frameborder="0"\s+scrolling="no"></iframe>')
matches = iframe_pattern.findall(response.text)
response2 = requests.get(f"https://{domain}{matches[1]}", headers=headers)
pattern = r"'sign'\s*:\s*'([^']+)'"
sign = re.search(pattern, response2.text).group(1)
pattern2 = r"url\s*:\s*'([^']+)'"
url2 = re.search(pattern2, response2.text).group(1)
data = {
    'action': 'downprocess',
    'signs': '?ctdf',
    'sign': sign,
    'websign': '',
    'websignkey': 'bL27',
    'ves': 1
}
headers = {
    "Referer": matches[1],
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
response3 = requests.post(f"https://{domain}{url2}", headers=headers, data=data)
data = json.loads(response3.text)
full_url = data['dom'] + "/file/" + data['url']
headers = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"sec-ch-ua": "\"Chromium\";v=\"122\", \"Not(A:Brand\";v=\"24\", \"Microsoft Edge\";v=\"122\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "none",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"cookie": "down_ip=1"
}
response4 = requests.get(full_url, headers=headers, allow_redirects=False)
print(response4.headers['Location'])

传送门

取蓝奏云直链教程2(含密码)(附python源码)

lanzou.zip

2.53 KB, 下载次数: 138, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 77威望 +2 吾爱币 +166 热心值 +66 收起 理由
lxing20 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
Littlebsby + 1 热心回复!
yangchangkun925 + 1 + 1 热心回复!
Air888 + 1 谢谢@Thanks!
liu1314qingyun + 1 + 1 我很赞同!
Reksam + 1 + 1 谢谢@Thanks!
orenray + 1 热心回复!
123666adcdyfg + 1 + 1 谢谢@Thanks!
fengbu401 + 1 我很赞同!
zwjd1987 + 1 + 1 我很赞同!
lnxsxxnyyds + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
billsmiless + 3 + 1 感谢!但蓝奏挺良心的网盘!搞搞恶心的百度吧&amp;amp;#128516;
bilibini + 1 + 1 我很赞同!
nnzhs + 1 + 1 谢谢@Thanks!
shixiaolin + 1 + 1 谢谢@Thanks!
wfenger + 1 + 1 我很赞同!
janken + 1 + 1 热心回复!
xn213 + 1 用心讨论,共获提升!
legend1729 + 1 谢谢@Thanks!
lspee + 1 我很赞同!
zhangliuer + 1 + 1 我很赞同!
gdp123gd + 1 + 1 我很赞同!
nanaqilin + 1 + 1 楼主太谦虚了
wjbg2022 + 1 + 1 谢谢@Thanks!
weizhao911 + 1 + 1 谢谢@Thanks!
Rv^ + 1 + 1 我很赞同!
tsanye + 1 谢谢@Thanks!
yf10086 + 1 + 1 热心回复!
liqian0421 + 1 用心讨论,共获提升!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
cq0361 + 1 热心回复!
zxerhins + 1 + 1 用心讨论,共获提升!
Jesse1995 + 1 + 1 我很赞同!
lurenyi2123 + 1 + 1 我很赞同!
maple1x + 1 + 1 我很赞同!
Henglie + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Unc + 1 + 1 我很赞同!
chenzhongmugu55 + 1 + 1 谢谢@Thanks!
撒旦の恶 + 1 + 1 吾爱破解论坛有你更精彩!
L叶 + 1 + 1 我很赞同!
minikuang + 1 + 1 谢谢@Thanks!
X1a0 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
jiangxiaomo + 1 谢谢@Thanks!
c55y20 + 1 + 1 这个直链好烧脑,学到新姿势了
hwh425 + 1 用心讨论,共获提升!
jesssy + 1 + 1 用心讨论,共获提升!
shixiyuanya + 1 用心讨论,共获提升!
ps122 + 1 + 1 谢谢@Thanks!
Foticing + 1 + 1 我很赞同!
kuiur0810 + 1 + 1 我很赞同!
slslsl + 1 + 1 我很赞同!
Marken888 + 1 + 1 用心讨论,共获提升!
anchovy126 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zysyijia + 1 + 1 我很赞同!
爱飞的猫 + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
varcher + 1 用心讨论,共获提升!
wzvideni + 1 + 1 我很赞同!
nullworld + 1 + 1 用心讨论,共获提升!
Ouyang520 + 1 用心讨论,共获提升!
QaQ355 + 1 + 1 热心回复!
0skyline0 + 1 不错!学习了。
dotnfc + 1 我很赞同!
andacao + 1 用心讨论,共获提升!
qiuqiuzouta + 1 我很赞同!
安道尔的鱼 + 1 + 1 热心回复!
languor + 1 用心讨论,共获提升!
wdlsyl0802 + 1 + 1 谢谢@Thanks!
2655070518 + 1 用心讨论,共获提升!
愷龍 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lin_xop + 1 + 1 热心回复!
wengl123 + 1 + 1 谢谢@Thanks!
wohm + 1 谢谢@Thanks!
wuhaolam + 1 用心讨论,共获提升!
LinliZ + 1 + 1 用心讨论,共获提升!
fengzi8388 + 1 + 1 热心回复!
19182572453 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

三滑稽甲苯 发表于 2024-3-18 07:47
对 HTML 的解析可以用 BeautifulSoup4 库

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
gllee + 1 热心回复!
baipiao520 + 1 + 1 用心讨论,共获提升!

查看全部评分

yjc0137 发表于 2024-3-17 12:10
idbaba 发表于 2024-3-17 11:42
xumuyunfei 发表于 2024-3-17 11:58
学习了,很棒
Alveus 发表于 2024-3-17 11:13
非常实用!
aiwuai74776094 发表于 2024-3-17 11:31
不错  学习了
蓬勃向上 发表于 2024-3-17 11:37
感谢,学习了!
数码小叶 发表于 2024-3-17 11:38
点赞,学习了
BrokenChild 发表于 2024-3-17 11:43
学习了,谢谢楼主
jyfvus111 发表于 2024-3-17 12:16
学习了!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 17:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表