春节期间,手机上给家里人下载了一些优酷的戏曲视频,导出手机后无法播放,唯独能使用优酷的手机客户端播放。遇到这种情况,作为挨踢狗,多半是无法忍的。正所谓混迹挨踢江湖十几年,或多或少都有点犟劲儿,越不让使越要折腾...

前面提到只能使用优酷的播放器播放,基本上可以得出一些推断:

1,要么对源文件采用了自己的编码格式,所谓的MP4文件名后缀只是假象;  
2,要么对文件格式做了手脚,或者说是对文件进行了加密处理;  

接下来要做的一件事情就是分析已下载的文件,来验证我们的推断是否正确。在分析之前先简单了解下MP4的格式,如下图所示: DESCRIPTION

通过以上表格,我们对MP4文件格式有了一定的了解。现在来把已经下载的这些文件进行采样对比分析(如下图所示),随机打开四个文件,可以发现它们有以下共同点:

1,前2字节都被改成了YK,我琢磨着应该是Youku的缩写;  
2,除了filetype(ftyp)之后,其它该有的都有;  

FTYP

基本上可以验证我们先前的推断是正确的:下载的文件未被加密,优酷的开发人员只是对原视频文件做了点小手脚。这样以来那可真省了不少事,否则就得静态分析其反汇编代码,以及调试程序来研究其加密算法,然后进行解密。

我们继续来分析,既然没有ftyp播放器是无法识别以及播放的,那么恢复它是否就意味着视频文件被修复了?那就来着手修复,优酷播放器能播放下载的视频,基本上可推断出优酷播放器在播放的时候对视频文件进行了除解码外的补丁操作,那么我们只需要给源文件修复格式即可。

很遗憾的是加上ftyp之后,视频依旧无法播放,推测可能在其它地方也做了手脚。经过仔细的分析对比,果不其然,优酷的工程师把ftyp移动到文件尾部(如下图所示,此处省略100字...)。

EOF

最后,修复的解决方案:

移除文件结尾倒数8字节并替换文件起始8字节即可。

往往得出的解决方案是简单的,而分析的过程还是需要折腾折腾。附上用golang写的一个补丁器(源码):传送门 请自行编译。测试结果如下图所示:

TESTING