Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

绕过阿里网盘分享文件的格式限制 #65

Open
woodongwong opened this issue Sep 9, 2021 · 0 comments
Open

绕过阿里网盘分享文件的格式限制 #65

woodongwong opened this issue Sep 9, 2021 · 0 comments
Labels

Comments

@woodongwong
Copy link
Owner

绕过阿里网盘分享文件的格式限制

号称不限速的阿里网盘推出了分享功能,但对文件的格式有限制,比如不能分享zip、mp3、flac等格式,但可以分享png、bmp、jpg、txt等格式,我试图通过一些手段来突破这个限制,于是我做了以下测试及推断:

  • 阿里网盘支持“秒传”,原理就是取文件内容的Hash值去数据库中查找,如果数据库中存在,说明此文件已存在服务器中,创建一个“指针”即可。
  • 更改文件后缀,比如将.zip更改为.png,测试失败,但网上有人说是可以的,可能后来阿里升级了。
  • 既然更改后缀依然能识别出文件类型,说明阿里对文件内容进行了“扫描”。
  • 根据我做WEB开发的经验,通过文件内容推断文件类型,一般是获取文件的前N个字节然后去判断文件类型,比如文件内容以66 74 79 70 69 73 6F 6D开头的就是mp4格式,以66 4C 61 43开头的就是flac格式的文件,具体可以参考维基百科 https://en.wikipedia.org/wiki/List_of_file_signatures

所以我的思路是(以分享flac文件举例):将文件开头的字节替换成其他格式的,比如42 4D(bmp格式),然后将后缀更改成.bmp,这样就可以分享了,缺点是不能在线预览,只能下载下来后再通过相反的方式将文件的头几个字节替换成flac的才可以打开文件。

替换还是插入?

替换

文件开头的字节如果是替换,缺点是文件变成正确的格式时,需要知道先前文件开头的内容是多少,优点是——快。

image
(原flac文件)

image
(修改后的flac文件,文件后缀为bmp)

以php为例,代码如下:

// flac 替换成 bmp
$f = fopen('1.flac', 'r+b');
fwrite($f, pack('C*', 0x42, 0x4D));
fclose($f);
rename('1.flac', '1.bmp');

// 还原 flac
$f = fopen('1.bmp', 'r+b');
fwrite($f, pack('C*', 0x66, 0x4C));
fclose($f);
rename('1.bmp', '1.flac');

插入

文件开头的字节如果是插入,缺点是要创建一个新的文件,或者将文件的内容全部读取到内存中,原因是无法直接在文件的开头插入一段内容,优点是不需要知道正确的文件开头字节,只需要将文件的前几个字节删除就好了。

image

以php为例,代码如下:

// flac 替换成 bmp
$src = fopen('1.flac', 'rb');
$dest = fopen('1.bmp', 'wb');
fwrite($dest, pack('C*', 0x42, 0x4D));
stream_copy_to_stream($src, $dest);
fclose($src);
fclose($dest);

// 还原 flac
$src = fopen('1.bmp', 'rb');
$dest = fopen('1.flac', 'wb');
fseek($src, 2);
stream_copy_to_stream($src, $dest);
fclose($src);
fclose($dest);

(peace)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant