您的位置:首页 > 编程语言 > Python开发

Python实现迅雷看看xv格式转换为flv格式

2012-11-19 21:26 585 查看
用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格式的数据,然后新建一个“转码后文件”的文件夹,转码后的文件都在“转码后文件”文件夹内:

# -*- coding: utf-8 -*-
import os

oldfileslist=os.listdir(os.getcwd())
os.mkdir('转码后文件')

for oldfilename in oldfileslist:
filename=os.path.splitext(oldfilename)
if filename[1]!='.xv':
continue
oldfile = open(oldfilename,'rb')
newfilename = '转码后文件\\'+filename[0]+'.flv'
newfile = open(newfilename,'wb')

temp=oldfile.read()
tempfile=temp[0x00200000:]
tempfile1=tempfile[:0x400]

oldmagic=ord(tempfile1[0])
newmagic=0x46

if newmagic<oldmagic:
newmagic += 0x100
magicnum=newmagic-oldmagic

for i in range(0,0x400):
tempnum=ord(tempfile1[i])+magicnum
if tempnum>0xFF:
tempnum -= 256
tempfile1=tempfile1[:i]+chr(tempnum)+tempfile1[i+1:]

tempfile=tempfile1+tempfile[0x400:]
newfile.write(tempfile)

newfile.close()
oldfile.close()
print '%s 已经完成'% filename[0]


转载请注明出处:六楼实验室

链接:http://www.cnblogs.com/sixlab/archive/2012/11/19/python-xv2flv.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: