One in eight billio|

六楼的雨

园龄:12年4个月粉丝:2关注:9

2012-11-19 21:26阅读: 1114评论: 0推荐: 0

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

本文作者:六楼的雨

本文链接:https://www.cnblogs.com/sixlab/archive/2012/11/19/python-xv2flv.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   六楼的雨  阅读(1114)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起