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

posted @ 2012-11-19 21:26  六楼的雨  阅读(1108)  评论(0编辑  收藏  举报