【转载自贴吧】pandownload工作原理猜想

此篇文章是在pandownload凉了之后的没几天,贴吧有位大佬发布了一个帖子,猜想了他的工作原理。当时我感觉很好奇(虽然现在也看不懂)但我还是把它存了下来,因为当时我保存的是docx文件,图很多都糊了,大家凑合看,当作纪念吧。

下面是贴吧文章的转载:

1.1 系统
使用VM安装Win10企业版

图片[1] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

新建NAT网络,手动设置IP和网关

图片[2] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

关闭防火墙,更新和UAC

图片[3] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

其他设置随自己喜欢修改

1.3 设置
Fiddler需要些正确设置才能使用
第一次打开会弹出三个对话框,均选择否

图片[4] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

打开之后,找到工具-选项-HTTPS,勾选解密HTTPS通信和忽略证书错误,然后有三次弹出警告对话框,均确认,同意并安装自签证书

图片[5] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

Fiddler启动后将自设为为系统默认代理,关闭软件后恢复无代理.如果有使用其他代理需要注意冲突,也可以手动配置Fiddler使用自设代理,示例如下.这样所有流量会先走自设代理后再通过Fiddler

图片[6] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

重启软件后,在浏览器中打开百度登录页面,测试HTTPS流量捕获.下面是正常示例

图片[7] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

1.4
默认情况下Fiddler不能捕获PD数据,而PD本身无网络配置功能,因此需借助工具把PD流量重定向到Fiddler
工具:
Proxifier ver.3.42

图片[8] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

添加服务器配置.Fiddler默认使用端口8888,类型为HTTPS,参考如下

图片[9] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

点击确认后,再添加应用规则

规则名Name任意填
应用(Applications)选择栏点击Browse,手动找到PD主程序目录,或手动填入主程序名PanDownload.exe.
目标地址Target hosts保持Any
端口TargetPorts填入1-52;54-65535排除53端口,可能软件本身原因,配置直接解析DNS不生效,故出此下策
动作Action选择刚才添加的服务器

图片[10] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

再添加一条规则,将所有Fiddler的流量放行

图片[11] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

设置完后,确保规则打勾状态.最后用搜索功能测试下:

图片[12] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

2.1 初始化
确保软件都正常工作后,下面直入主题
打开PD后观察到Fiddler出现4条请求,我已经标红了

图片[13] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

这里对应着初始化过程,4条请求都指向域名Pandownload.com.如果域名下线会导致昨天打不开软件的情况



2.2
顺着请求地址,看看初始化都做了啥

第一条请求

图片[14] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院
图片[15] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

请求参数如下:
clienttype:说明请求来源,0可能代表桌面版
referral:来源参考?
t:时间戳
version:软件版本
回应是Json字符串,我猜这条请求是验证网络连接是否正常

2.3
第二条请求

图片[16] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

请求参数和上面一样,不过请求地址变成了/api/script/list?


回应中列出了几个熟悉的lua脚本名,并验证md5值,假如本地文件md5值和线上文件md5值不同,说明可能脚本有更新,会从网站上下载新脚本替换掉本地旧脚本

2.4
第三条请求

图片[17] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

可能是下载新文件但失败了.跳过

第四条请求

图片[18] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

从请求地址和回应中出现蓝奏云地址证明,这条请求是从指定地址获取软件最新信息

3.1 Cookie
这里使用一个新号演示,获取登陆后的cookie
通过Chrome打开百度网盘网页并登录,登陆后自动跳转到我的百度网盘首页
按快捷键F12打开调试面板,关注Network一栏

图片[19] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

点击左侧菜单(图片,文档,视频…)并观察下面请求列表,找到Type为xhr的条目,点击他

图片[20] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

在出现的详细请求信息栏,点中headers,往下翻能找到Cookie,把那一长串内容都复制出来,粘贴到Notepad++中

图片[21] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

之后便可通过Cookie来进行账号操作了

3.3 操作
尝试一下操作时怎么进行.在PD中(其实和在网页端操作完全一致)打开个人页面,右键选择新建文件夹111

图片[22] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

捕获到两条数据

图片[23] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

第一条请求将FORM表单数据通过POST的方式提交到百度api服务器
表单里面有path,isdir等参数,看名字就很好理解.
URL中接的请求参数有:
a=commit 规定动作
app_id=250528 固定字段
bdstoken=ffbe…. 很长一段,在访问用户首页时获取,变动情况未测
channel=chunlei 固定字段
clienttype=0 规定动作
web=1 规定动作
服务器返回请求结果,有错会报错
第二条请求通过GET获取新建文件夹操作后的用户网盘文件


其他简单操作比如删除文件,移动文件的请求内容估计差不多

3.4 度盘搜
原先PD收集通过软件打开的网盘链接,建立起庞大数据库,这个思路超赞.
但对百度来说是无法容忍的.
为什么百度不自己开个搜索,让用户能搜索到所有百度盘资源(参考国外ulozto)?即使收费超贵我看也是很多人刚需(参考城通的要我看看).
因为风险太大.国内对内容管控严格,对于网盘只要想查随时可以查出一大把问题.
而第三方搜索引擎可以声明自己只做索引,不对内容负责,出了问题百度担,自己偷偷赚赞助广告费.
所以,现在尚存的资源搜索引擎,索引老旧,体验很差.以后也不太可能出现好用的度盘搜索了

3.5 第三方搜索
上面扯远了,搜索功能还是比较简单的,下面看一下
打开资源搜索页面,用猪猪盘测试,搜索猪猪

图片[24] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

结果和直接在浏览器访问一样

图片[25] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

通过query参数指定搜索字段,返回html内容,将其解析成一条条结果.
那script目录下的lua脚本又是做什么呢?我稍微看了下,里面定义了一些行为和配置,类似超时重试时间次数,自动翻页,搜索结果展示效果等等.
假如第三方搜索引擎突然变动接口地址,导致搜索不能用,通过PD启动时(我上面有分析过)更新脚本便能恢复正常,不需要整个儿软件更新


4.1 提取码
众所周知,PD一个特色就是能匹配提取码,其原理类似WiFi万能钥匙,有专门数据库来存放这些数据.
我先从网上随便找了个近几天的链接,测试没有被记录提取码.

图片[26] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

接着输入提取码,分析关键数据包
PD通过POST向百度发送提取码,验证正确后,返回一个randsk值

图片[27] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

这个值和其他特殊参数值(很容易看就不分析了)一起被加入到Cookie中,再用这个Cookie访问原始链接,返回HTML内容.

图片[28] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

按理说提取步骤已经完事了,等半分到一分钟再看会发现一个发往Pandown.cn的包

图片[29] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

点击表单可以看得更清楚
PD向服务器发送了时间,点击,地址,提取码,文件名等等内容,服务器返回success表示数据上传成功.

图片[30] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

清空掉捕获包,再找一个有点年头的公共链接.

图片[31] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

PD在查询到这个链接需要提取码后,立马向pandown.cn发送GET查询请求,数据库匹配成功则返回提取码,拿到提取码后走正常流程就不废话了.

4.2 文件转存
先分析单个保存发生了什么.继续用上面的找的链接
清空掉捕获的包,在PD上右键文件夹保存到我的网盘

图片[32] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

通过POST请求把filelist要保存的文件(目录)和path保存目标目录通过表单提交到服务器.
filelist解码后类似[“/我的资源/小说/吕天逸”]
请求地址中包含的参数像app_id前面大多提过
shareid是固定值,在完成提取码步骤返回的html中可提取到
from参数似乎并不重要,取得方法同上


最终返回成功失败原因等信息

4.4 下载1
作为下载工具,下载好使才是杀手锏
清掉所有捕获包,并选择文件下载

图片[33] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

清掉无关数据后,与下载有关的共5个包,我把他们标红了
第一个包

图片[34] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

下面JSON文字很明显说明这个包是查询当前用户开通会员情况.返回结果后面还有试用加速等信息
第二个包

图片[35] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

地址一样,方法变为consume
会返回一个request_id和token,但我没搜到哪里有用到这两个参数..

4.4 下载2
第三个包是发往pandownload的,内容经过加密,并不知道发送了什么…

图片[36] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

第四个包

图片[37] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

POST包,请求参数和请求回复都非常长
请求域名http://d.pcs.baidu.com/rest/2.0/pcs/file,猜想是百度网盘api服务器


固定值就不解析了,说几个关键值
path:文件在网盘中的路径
devuid:猜想是机器码,不知算法,但只要没重装换硬件则一直固定
rand:看名字就知道是随机数,加密保护的核心.每次请求都会生成40位16进制数,和服务器对不上报错user is not authorized


如果请求参数正确,或用什么办法绕过了验证(比如移动版可能没有认证),服务器会回多个rank通道,也就是用于多线程下载的真实地址.这些下载地址只能用于当前请求的IP.


第五个包

图片[38] - 【转载自贴吧】pandownload工作原理猜想 - 某研究院

实际下载数据包,指向一级域名baidupcs.com

完。。。

(这文章看的我一脸懵逼的,哪位大佬看懂了记得在评论区回复一下)

我自己保存的文档下载地址

© 版权声明
THE END
喜欢就支持一下吧
点赞64
分享
评论 共3条

请登录后发表评论