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

用editplus的十六进制查看器查看xv格式的数据,可以发现把xv格式的0到0×200000之间的数据删除,把0×200000到0×200400之间的数据解密,再加上后边的所有的数据,就是flv格式的视频了。

由于flv格式数据最开始的3个二位十六进制数据为:46 4C 56,对应的ASCII码分别为FLV,设第一个二位十六进制数据0×46为newmagicnum。xv格式从0×200000开始的数据不一定,但都是按照一定的密钥加密的,就是flv从0到0×400的所有数据分别加上密钥的值,设第一个二位十六进制数据为oldmagicnum。则密钥magicnum就是newmagicnum减去oldmagicnum。
例子: flv格式数据为:46 4C 56 xv格式数据为:62 68 72 由于0×46比0×62小,所以密钥为:0×46+0×100-0×62 解密的过程为:删除xv文件0到0×200000之间的数据。0×200000到0×200400之间的数据分别加上magicnum,如果结果数据大于0xFF,则减去0×100。后边添加上所有未加密数据。

代码如下,使用方法为:建立一个python文件,放在要转码的xv格式所在文件夹,程序会遍历文件夹内的xv格式的数据,然后新建一个“转码后文件”的文件夹,转码后的文件都在“转码后文件”文件夹内:

\# -*- coding: utf-8 -*-
import os
currepath=unicode(os.getcwd(),"utf-8")
oldfileslist=os.listdir(currepath)
if os.path.exists(u'转码后文件')==False:
    os.mkdir(u'转码后文件')

for oldfilename in oldfileslist:
    filename=os.path.splitext(oldfilename)
    if filename\[1\]!='.xv':
        continue
    oldfile = open(oldfilename,'rb')
    newfilename = u'转码后文件/'+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()
    filefinish=u'%s 已经完成'% filename\[0\]
    print filefinish

上一篇
Android学习总结00之废话 Android学习总结00之废话
前几天终于将《Android开发从零开始》共43个视频看完,在此简单的做一下总结。 本来起了个题目叫《Android开发从零开始》学习后记,后来感觉太长了,起个短一点的名字《Android学习总结》,既然不叫《Android开发从零开始》
2013-03-27
下一篇
notepad++配置C++及python编译环境 notepad++配置C++及python编译环境
原先写过一篇《在notepad++中配置Python和php环境》,详见 https://blog.sixlab.cn/archives/48/ notepad++这个编辑器相当不错,相当轻量级,一直以来是我的最爱。每次重装系统都要重新配置
2012-05-13