首页
社区
课程
招聘
[原创] 网盘秒传功能的利用
发表于: 5天前 3558

[原创] 网盘秒传功能的利用

5天前
3558

最近由某些原因,需要下载上古时代的文件,结果找出来的链接要么失效、要么龟速。

然后就想到了用网盘的秒传功能来帮我找文件。

其实这方法在阿里云盘上线的早期已经试过,是可以正常用的,不过后来接口加了密,就没继续跟进了。

这次玩的是天翼云盘,毕竟这个是真的不限速!

话不多说,直接开干。

打开F12,找一个可以被秒传的文件,上传

很容易观察到秒传调用接口分两步:

根据后来结论得出:initMultiUpload主要是向后台申请空间(因为可能空间不足,也可能每日上传数据量超过上限),申请成功后,会返回一个uploadid,然后再调用commitMultiUploadFile填上这个uploadid来上传。

可以看到GET请求的参数不可读,已经被加密,所以需要定位加解密算法。

XHR断点勾上,上传。

直接断下来了,代码逻辑非常清晰,就是涉及的算法有点多

其中s = n("xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx")相当于一个GUID生成器

其中c = n("xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx").slice(0, 16 + 16 * Math.random() | 0)就是个随机串生成器,这里生成出来的c值将会被当作AES的key来使用,后面RSA算法加密的就是这个c

其中i.default.AES.encrypt就是AES(PKCS7填充模式)

其中b.encrypt就是RSA加密再套一层base64

接下来实现这些算法,由于我只会C艹,所以这里用C艹来实现了。

毫秒时间戳:

AES(调用openssl),注意这里要用PKCS7填充:

HMACSHA1:

RSA:

Base64:

噢对了,还有两个重要的值:

RSA公钥来源:

sessionKey来源:

这俩值随便抓一下,能用几个小时。

parentFolderId=-15这是个固定的文件夹"我的文档"的ID,每个用户都有且无法删除。想用自建的文件夹就稍微麻烦点。

c就是上面随机生成的c值,是个字符串,直接传进去就行

加密结果转成16进制字符串后就是GET参数中的params

随机生成一个GUID填入即可

毫秒级时间戳

PkId与RSA公钥是在同一个接口里拿到的,一定要配套使用才行

SessionKey来自/api/portal/v2/getUserBriefInfo.action接口

Date毫秒级时间戳,保持与X-Request-Date相同

params就是GET参数中的params

c就是上面随机生成的c

结果转换成16进制字符串后填写到Signature就行

注意外层有个base64

加密算法同上,不再赘述

成功!仅通过文件的MD5+filesize完整了文件的秒传。

这里也提醒大家,保护好自己的文件信息,可能一张截图就会导致了你的文件不小心被泄露!

https://upload.cloud.189.cn/person/initMultiUpload
https://upload.cloud.189.cn/person/commitMultiUploadFile
https://upload.cloud.189.cn/person/initMultiUpload
https://upload.cloud.189.cn/person/commitMultiUploadFile
#ifdef _WIN32
 
#include <sys/timeb.h>
 
static uint64_t
__timestamp()
{
    struct timeb rawtime;
    ftime(&rawtime);
    return rawtime.time * 1000 + rawtime.millitm;
}
 
#else
 
#include <sys/time.h>
 
static uint64_t
__timestamp()
{
    struct timeval now = {0};
    gettimeofday(&now, NULL);
    unsigned long long u = now.tv_sec;
    u *= 1000;
    u += now.tv_usec / 1000;
    return u;
}
 
#endif
#ifdef _WIN32
 
#include <sys/timeb.h>
 
static uint64_t
__timestamp()
{
    struct timeb rawtime;
    ftime(&rawtime);
    return rawtime.time * 1000 + rawtime.millitm;
}
 
#else
 
#include <sys/time.h>
 
static uint64_t
__timestamp()
{
    struct timeval now = {0};
    gettimeofday(&now, NULL);
    unsigned long long u = now.tv_sec;
    u *= 1000;
    u += now.tv_usec / 1000;
    return u;
}
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 5天前 被iaoedsz2018编辑 ,原因: 标题修改
收藏
免费 27
支持
分享
最新回复 (21)
雪    币: 2989
活跃值: (2997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
私有文件要同时猜中文件大小和md5有几率,但感觉蛮难的。
5天前
0
雪    币: 105
活跃值: (4593)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感觉这种碰撞概率概率和宇宙突然重置了的概率差不多  太低了
5天前
0
雪    币: 1545
活跃值: (2139)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
Imxz 感觉这种碰撞概率概率和宇宙突然重置了的概率差不多 太低了
目的显然不是为了碰撞,只是提醒一下大家这是一个可以被利用的点
5天前
0
雪    币: 105
活跃值: (4593)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
iaoedsz2018 目的显然不是为了碰撞,只是提醒一下大家这是一个可以被利用的点[em_014]
内容是牛逼的,但是感觉有点标题了.
5天前
0
雪    币: 2418
活跃值: (3159)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
这个适合省网盘空间, 保存文件服务器还给你计算容量, 以后就保留一下信息记txt里面.
5天前
0
雪    币: 1545
活跃值: (2139)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
boursonjane 这个适合省网盘空间, 保存文件服务器还给你计算容量, 以后就保留一下信息记txt里面.
哈哈哈,这有点猥琐了
5天前
0
雪    币: 1545
活跃值: (2139)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
Imxz 内容是牛逼的,但是感觉有点标题了.
改了个内敛点的标题
5天前
0
雪    币: 1558
活跃值: (3588)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
顶顶顶
4天前
0
雪    币: 1425
活跃值: (2431)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
看看
4天前
0
雪    币: 1425
活跃值: (2431)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
用的地方很少,主要是文件MD5搞不到,想找一个文件没有它的MD5也是不行的
4天前
0
雪    币: 1569
活跃值: (5118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢分享
4天前
0
雪    币: 8176
活跃值: (1815)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢分享
3天前
0
雪    币: 404
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
这是啥意思。
文件秒传是网盘服务器有那个相同的文件存在,这是利用秒传对比来下载自己网盘不存在 而服务器存在的文件吗。
3天前
0
雪    币: 218
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
请问百度网盘现在能秒传吗
2天前
0
雪    币: 41
活跃值: (573)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
很高级
2天前
0
雪    币: 210
活跃值: (1847)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
有点意思 和我想得差不多,我最近在逆向金山wps云盘的协议 比你这个还简单点,但是他有个地方没法碰撞,他要求sha1和md5 同时匹配的时候才行,否则就认为是新文件,这种感觉就没办法碰撞了
2天前
0
雪    币: 761
活跃值: (656)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
感谢分享
2天前
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
感谢分享
1天前
0
雪    币: 217
活跃值: (122)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
谢谢分享
1天前
0
雪    币: 4697
活跃值: (2640)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
21
谢谢分享
14小时前
0
雪    币: 31
活跃值: (290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
谢谢分享
9小时前
0
游客
登录 | 注册 方可回帖
返回
//