Python实现迅雷看看xv格式转换为flv格式
用editplus的十六进制查看器查看xv格式的数据,可以发现把xv格式的0到0x200000之间的数据删除,把0x200000到0x200400之间的数据解密,再加上后边的所有的数据,就是flv格式的视频了。
由于flv格式数据最开始的3个二位十六进制数据为:46 4C 56,对应的ASCII码分别为FLV,设第一个二位十六进制数据0x46为newmagicnum。xv格式从0x200000开始的数据不一定,但都是按照一定的密钥加密的,就是flv从0到0x400的所有数据分别加上密钥的值,设第一个二位十六进制数据为oldmagicnum。则密钥magicnum就是newmagicnum减去oldmagicnum。
例子:
flv格式数据为:46 4C 56
xv格式数据为:62 68 72
由于0x46比0x62小,所以密钥为:0x46+0x100-0x62
解密的过程为:删除xv文件0到0x200000之间的数据。0x200000到0x200400之间的数据分别加上magicnum,如果结果数据大于0xFF,则减去0x100。后边添加上所有未加密数据。
代码如下,使用方法为建立一个python文件,放在要转码的xv格式所在文件夹,程序会遍历文件夹内的xv格式的数据,然后新建一个“转码后文件”的文件夹,转码后的文件都在“转码后文件”文件夹内:
1 # -*- coding: utf-8 -*- 2 import os 3 4 oldfileslist=os.listdir(os.getcwd()) 5 os.mkdir('转码后文件') 6 7 for oldfilename in oldfileslist: 8 filename=os.path.splitext(oldfilename) 9 if filename[1]!='.xv': 10 continue 11 oldfile = open(oldfilename,'rb') 12 newfilename = '转码后文件\\'+filename[0]+'.flv' 13 newfile = open(newfilename,'wb') 14 15 temp=oldfile.read() 16 tempfile=temp[0x00200000:] 17 tempfile1=tempfile[:0x400] 18 19 oldmagic=ord(tempfile1[0]) 20 newmagic=0x46 21 22 if newmagic<oldmagic: 23 newmagic += 0x100 24 magicnum=newmagic-oldmagic 25 26 for i in range(0,0x400): 27 tempnum=ord(tempfile1[i])+magicnum 28 if tempnum>0xFF: 29 tempnum -= 256 30 tempfile1=tempfile1[:i]+chr(tempnum)+tempfile1[i+1:] 31 32 tempfile=tempfile1+tempfile[0x400:] 33 newfile.write(tempfile) 34 35 newfile.close() 36 oldfile.close() 37 print '%s 已经完成'% filename[0]
转载请注明出处:六楼实验室
链接:http://www.cnblogs.com/sixlab/archive/2012/11/19/python-xv2flv.html