woodongwong / notes

4 stars 0 forks source link

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

Open woodongwong opened 3 years ago

woodongwong commented 3 years ago

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

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

所以我的思路是(以分享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)