CN109271209A - 一种解析并提取qcow2及qcow3镜像文件的方法 - Google Patents

一种解析并提取qcow2及qcow3镜像文件的方法 Download PDF

Info

Publication number
CN109271209A
CN109271209A CN201811125331.2A CN201811125331A CN109271209A CN 109271209 A CN109271209 A CN 109271209A CN 201811125331 A CN201811125331 A CN 201811125331A CN 109271209 A CN109271209 A CN 109271209A
Authority
CN
China
Prior art keywords
cluster
file
address
qcow3
qcow2
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201811125331.2A
Other languages
English (en)
Inventor
梁效宁
朱星海
刘波
许超明
吕靓婷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Art Beats Nature Information Security Intelligent Equipment Co Ltd
Original Assignee
Sichuan Art Beats Nature Information Security Intelligent Equipment Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sichuan Art Beats Nature Information Security Intelligent Equipment Co Ltd filed Critical Sichuan Art Beats Nature Information Security Intelligent Equipment Co Ltd
Priority to CN201811125331.2A priority Critical patent/CN109271209A/zh
Publication of CN109271209A publication Critical patent/CN109271209A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4416Network booting; Remote initial program loading [RIPL]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于包括以下步骤:S100:查找并解析磁盘中qcow2及qcow3镜像文件的头文件,获取头文件信息;S200:根据所述头文件信息,获取并解析所述一级表,根据解析所述一级表的结果,获取并解析所述二级表,根据解析所述二级表的结果,获取簇地址;S300:根据所述步骤S200的方法,遍历所述qcow2及qcow3镜像文件的所述一级表及所述二级表,获取各个簇地址各自对应的簇数据并顺序保存为***文件;S400:根据指定文件在所述***文件中的绝对偏移地址及所述指定文件的大小,计算出所述指定文件在所述qcow2及qcow3镜像文件中的地址,并获取所述指定文件的内容。

Description

一种解析并提取qcow2及qcow3镜像文件的方法
技术领域
本发明属于数据恢复领域,涉及一种解析并提取qcow2及qcow3镜像文件的方法。
背景技术
Qemu发源码的模拟处理器,与其他模拟处理器相比有开源、可移植、仿真速度快的等优点,在GNU/Linux平台上使用广泛。qcow2及qcow3是其扩展镜像文件的后缀,qcow2及qcow3镜像文件具有相同的数据结构,但与qcow镜像文件的数据结构不同。qcow2及qcow3文件***不支持空洞,拥有更小的文件占用、支持写时拷贝、支持快照、可以选择际遇zlib的压缩方式以及AES加密,qcow2及qcow3镜像被使用广泛。
那么,如何把镜像文件里面的内容提取出来、并获取qcow2及qcow3镜像文件中的用户数据呢?当前主流方法有两种:网络传输或者使用9psetup协议实现虚拟机与宿主之间的文件传输,但它们在提取数据上存在如下弊端:
1.利用网络来进行文件提取,需要先在宿主机上配置网络桥架,在qemu-kvm启动配置网卡。这种方法受网络限制特别大,且文件的传输速度也比较慢。
2.9psetup协议需先让宿主机在内核中配9p选项,同时qemu在编译时需要支持ATTR/XATTR。
3.需要使用工具打开qcow2及qcow3镜像里的虚拟机。
4.不能同时获得多个用户数据。
5.只能获取当前虚拟机所展现的数据,不能获取误删数据。
以上操作复杂,需要专业人员才能完成数据提取,不利于简单快速高效的提取数据。
发明内容
本发明针对现有技术的不足问题,提出了一种解析并提取qcow2及qcow3镜像文件的方法,通过直接解析qcow2及qcow3镜像文件的存储结构,对qcow2及qcow3镜像文件里的数据进行直接提取,包括以下步骤:
S100:查找并解析磁盘中qcow2及qcow3镜像文件的头文件,获取头文件信息,其中,所述头文件信息包含所述头文件的标识、版本、簇位移数、镜像文件的容量、簇位移数、加密标识、一级表的项数及所述一级表的起始地址;
S200:根据所述头文件信息,获取并解析所述一级表,根据解析所述一级表的结果,获取并解析所述二级表,根据解析所述二级表的结果,获取簇地址;
S300:根据所述步骤S200的方法,遍历所述qcow2及qcow3镜像文件的所述一级表及所述二级表,获取各个簇地址各自对应的簇数据并顺序保存为***文件;
S400:根据指定文件在所述***文件中的绝对偏移地址及所述指定文件的大小,计算出所述指定文件在所述qcow2及qcow3镜像文件中的地址,并获取所述指定文件的内容。
优选地,所述步骤S100中所述头文件信息的数据结构如下:
0x0至0x3字节:所述头文件信息的标识0x514649FB
0x4至0x7字节:版本
0x14至0x17字节:簇位移数,表示将二进制数“1”向左移的位数,左移完毕后的二进制数的大小为簇大小
0x18至0x1F字节:镜像文件的容量
0x20至0x23字节:加密标识,0表示未加密,1表示加密
0x24至0x27字节:一级表的项数
0x28至0x2F字节:一级表的起始地址。
优选地,所述步骤S200的具体步骤如下:
S201:根据簇位移数,计算簇大小;具体地,将二进制数“1”向左移,左移的位数等于所述簇位移数,左移完毕后的二进制数的大小为所述簇大小;
S202:根据所述头文件信息的数据结构,读取所述一级表的项数;
S203:根据所述头文件信息的数据结构,读取所述一级表的起始地址,寻址所述起始地址并以8字节为一项分别读取各个项,读取所述项的个数为所述二级表的项数,其中,所述二级表的项数=所述簇大小/8;以所述一级表的起始地址为首地址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为所述二级表的起始地址;如果读取所述项的内容为零,则不做解析;
S204:寻址所述二级表,判断当前二级表中当前项的首字节的次高位是否为1,如果是,表示当前二级表中当前项的内容所表示的簇数据为压缩数据,执行步骤S205,否则,表示当前二级表中当前项的内容为非压缩数据,执行步骤S206;
S205:解压所述压缩数据作为当前二级表中当前项表示的簇数据,执行所述步骤S300;
S206:将当前所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为大端存储的簇地址并进行保存,用以寻址并读取当前二级表中当前项对应的簇数据。
优选地,所述步骤S300的具体步骤如下:
S301:遍历所述一级表;
S302:判断是否完成所述一级表的遍历,如果是,执行步骤S400,否则,执行步骤S303;
S303:判断当前一级表中当前项的内容是否为零,如果是,执行步骤S304,否则,执行步骤S305;
S304:将当前一级表对应的二级表中所有项的内容填零,执行步骤S305;
S305:遍历所述二级表;
S306:判断是否完成所述二级表的遍历,如果是,执行步骤S301,否则,执行步骤S307;
S307:根据所述步骤S200的方法,获取当前簇地址;
S308:根据当前簇地址进行寻址并读取当前二级表中当前项对应的簇数据,如果当前二级表中当前项的内容为零,则对应簇的存储空间顺序填零,执行步骤S306。
优选地,所述步骤S400包含以下具体步骤:
S401:计算指定文件的地址在所述***文件中簇的位置,具体地,所述簇的位置=ceil(指定文件在所述***文件中的绝对偏移地址/簇大小),其中,ceil运算符代表向上取整,余数代表指定文件在当前簇内的偏移地址;
S402:计算指定文件的地址在所述一级表中的项数,具体地,所述项数=ceil(所述簇的位置/二级表的项数),其中,ceil运算符代表向上取整,余数代表指定文件在所述一级表中的项数;
S403:获取指定文件;具体地,根据所述步骤S401、S402的计算结果以及所述文件头信息包含的所述一级表的起始地址、作为所述二级表的起始地址的所述一级表的项的内容、作为簇地址的所述二级表的项的内容,获得指定文件在所述qcow2及qcow3镜像文件的绝对偏移地址,并根据所述指定文件的大小,在所述qcow2及qcow3镜像文件中寻址并获取指定文件;
S404:判断当前获取的指定文件大小加上簇内的偏移地址是否大于簇大小,如果是,在当前簇中读取字节长度为簇大小-簇内的偏移地址的内容,并执行步骤S405,否则,结束流程;
S405:对指定文件在所述***文件中的绝对偏移地址及指定文件大小重新赋值,并执行步骤S401;
具体地,指定文件在所述***文件中的绝对偏移地址=指定文件在所述***文件中的绝对偏移地址+(簇大小-指定文件在当前簇内的偏移地址),指定文件大小=指定文件大小-(簇大小-指定文件在当前簇内的偏移地址),其中,簇大小-指定文件在当前簇内的偏移地址为已读取指定文件的大小。
优选地,所述步骤S205包含以下具体步骤:
S2051:以所述二级表的起始地址为首地址,对所述二级表寻址,将当前二级表中当前项的8字节内容转换为二进制数;
S2052:所述二进制数的第62比特位至第54比特位作为所述压缩数据的大小,其单位为扇区;所述二进制数的第53比特位至第1比特位作为所述压缩数据在qcow2及qcow3镜像文件中的偏移地址;
S2053:根据所述压缩数据的在qcow2及qcow3镜像文件中的偏移地址及所述压缩数据的大小,寻址并获取所述压缩数据;
S2054:解压所述压缩数据作为当前二级表中当前项表示的簇数据,执行所述步骤S300。
优选地,所述步骤S206包含以下具体步骤:
S2061:以各个二级表的起始地址为首地址,对二级表寻址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为非压缩数据在qcow2及qcow3镜像文件中的偏移地址;
S2062:根据非压缩数据的在qcow2及qcow3镜像文件中的偏移地址及非压缩数据的大小,寻址并获取非压缩数据,其中,非压缩数据的大小等于所述簇大小。
优选地,qcow2及qcow3镜像文件具有相同的数据结构。
本发明的有益效果是:
1.不需要依赖网络传输或者9psetup协议;
2.支持其压缩的qcow2及qcow3镜像文件的提取;
3.提取文件速度快于主流方法;
4.不需要启动虚拟机,可以直接提取文件;
5.不需要切换身份,可获取当前虚拟机上所有用户的数据;
6.同时能够提取误删的数据。
对本发明出现的术语作出以下解释:
向上取整:比自己大的最小整数;
项:item,组成一级表、二级表中数据的最小单位;
附图说明
图1为本发明所提供的方法的总流程图;
图2为本发明实施例中qcow3镜像文件的数据结构图,包括一级表、二级表及簇之间的寻址及映射关系;
图3为本发明实施例中头文件信息的数据结构图;
图4为本发明一个实施例中的一级表的数据结构图;
图5为本发明一个实施例中包含二级表的数据结构图;
图6为本发明一个实施例中簇数据的数据结构图;
图7为本发明另一实施例中包含头文件信息及一级表的数据结构图;
图8为本发明另一实施例中包含二级表的数据结构图;
图9为本发明另一实施例中簇数据的数据结构图;
图10为本发明中获取簇数据并顺序保存为***文件的具体流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步阐述。
图1示出了本发明所提供的方法的总流程图;值得注意的是,qcow2及qcow3镜像文件具有相同的数据结构,因此,解析并提取qcow2镜像文件的方法与此相同。
图2示出了本发明实施例中qcow3镜像文件的数据结构图,包括一级表、二级表及簇之间的寻址及映射关系;如图2所示,qcow3镜像文件是由多个固定单元结构,即,簇(cluster)构成的,簇的地址存储在二级表中并由二级表来管理,二级表的地址存储在一级表上并由一级表来管理。为了说明本申请所提供的方法,在本实施例中,以512字节为一个扇区,把簇分成如图2所示的若干个数据块。获取簇数据,需要解析一级表、二级表的信息以寻址簇数据。
如图1所示,本发明的方法包括以下步骤:
S100:查找并解析磁盘中qcow3镜像文件的头文件,获取头文件信息,其中,头文件信息包含头文件的标识、版本、簇位移数、镜像文件的容量、簇位移数、加密标识、一级表的项数及一级表的起始地址;如图3所示,头文件信息的数据结构如下:
0x0至0x3字节:头文件信息的标识0x514649FB,如图3中细黑下划线部分所示,与此相对应的ASCII码为“QFI”;
0x4至0x7字节:版本,本实施例中为0x00000003,即,版本为3,表示该镜像文件为qcow3镜像文件;
0x14至0x17字节:簇位移数,表示将二进制数“1”向左移的位数,左移完毕后的二进制数的大小为簇大小;
如图3中粗黑下划线部分所示的0x00000010,0x10表示将二进制数“1”向左移0x10位,即,左移16位,得到二进制数10000000000000000,即十进制数65536,由此可以计算出簇大小为65536字节。
0x18至0x1F字节:镜像文件的容量;
0x20至0x23字节:加密标识,0表示未加密,1表示加密
0x24至0x27字节:一级表的项数,如图3中圆角矩形框部分所示的0x00000080,即,一级表的项数为0x00000080,即,一级表的项数为128个;
0x28至0x2F字节:一级表的起始地址;如图3中矩形框部分所示的0x0000000000030000,即,一级表的起始地址为0x00030000。
S200:根据头文件信息,获取并解析一级表,根据解析一级表的结果,获取并解析二级表,根据解析二级表的结果,获取簇地址,步骤S200的具体步骤如下:
S201:根据簇位移数,计算簇大小;如图3中粗黑下划线部分所示的0x00000010,0x10表示将二进制数“1”向左移0x10位,即,左移16位,得到二进制数10000000000000000,即十进制数65536,由此可以计算出簇大小为65536字节;
S202:根据头文件信息的数据结构,读取一级表的项数;如图3中圆角矩形框部分所示的0x00000080,即,一级表的项数为0x00000080,即,一级表的项数为128个;
S203:根据头文件信息的数据结构,读取一级表的起始地址;如图3中矩形框部分所示的0x0000000000030000,即,一级表的起始地址为0x00030000。
寻址起始地址并以8字节为一项分别读取各个项,读取项的个数为二级表的项数,其中,二级表的项数=65536/8=8192个;如果读取项的内容为零,则不做解析;图4示出了本发明一个实施例中一级表的数据结构图,寻址一级表的起始地址0x00030000,以8字节为一项,读取第一个8字节的第一项0x80000000040000,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为二级表的起始地址;
具体地,以图4所示的第一项内容0x8000000000040000为例,将0x8000000000040000转换为二进制数1000000000000000000000000000000000000000000001000000000000000000,该二进制数的第62比特位至第1比特位的内容00000000000000000000000000000000000000000001000000000000000000作为二级表的起始地址,将该二进制数表示的二级表的起始地址转换为十六进制数为0x00040000;
S204:寻址所述二级表,判断当前二级表中当前项的首字节的次高位是否为1,如果是,表示当前二级表中当前项的内容所表示的簇数据为压缩数据,执行步骤S205,否则,表示当前二级表中当前项的内容为非压缩数据,执行步骤S206;
S205:解压压缩数据作为当前二级表中当前项表示的簇数据,执行步骤S300;步骤S205包含以下具体步骤:
S2051:图4示出了本发明一个实施例中的一级表的数据结构图,如图4中细黑下划线部分所示,以一级表的起始地址0x00030000为首地址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为所述二级表的起始地址;
以图4所示的第一项内容0x8000000000040000为例,将0x8000000000040000转换为二进制数1000000000000000000000000000000000000000000001000000000000000000,该二进制数的第62比特位至第1比特位的内容00000000000000000000000000000000000000000001000000000000000000作为二级表的起始地址,将该二进制数表示的二级表的起始地址转换为十六进制数为0x00040000;
以0x00040000为首地址,对二级表寻址;图5示出了本发明一个实施例中包含二级表的数据结构图;读取地址0x00040000为首地址的8字节内容0x4600000000050000,将该8字节内容0x4600000000050000转换为二进制数为0100011000000000000000000000000000000000000001010000000000000000;
S2052:上述二进制数的次高位(即第63比特位)为“1”,即为压缩标识,表示该二级表的此项对应的簇数据为压缩数据;
二进制数的第62比特位至第54比特位(000110000)作为压缩数据的大小,其单位为扇区;即,压缩数据的大小为48(即,二进制数000110000)扇区;
二进制数的第53比特位至第1比特位(00000000000000000000000000000000001010000000000000000)作为压缩数据在qcow3镜像文件中的偏移地址;即,该压缩数据在qcow3镜像文件中的偏移地址为0x50000;
S2053:根据压缩数据的在qcow3镜像文件中的偏移地址0x50000及压缩数据的大小48扇区,寻址并获取压缩数据;
图6示出了本发明一个实施例中簇数据的数据结构图,如图6所示,从地址0x50000开始后的连续48个扇区的内容即为该压缩数据,为简洁起见,图6仅仅示出了该压缩数据的部分数据;
S2054:解压压缩数据作为当前二级表中当前项表示的簇数据,执行步骤S300。
S206:将当前所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为大端存储的簇地址并进行保存,用以寻址并读取当前二级表中当前项对应的簇数据,步骤S206包含以下具体步骤:
S2061:图7示出了本发明另一实施例中的一级表的数据结构图,如图7细黑下划线部分所示,以一级表的起始地址0x00030000为首地址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为所述二级表的起始地址;
以图7所示的第一项内容0x8000000000040000为例,将0x8000000000040000转换为二进制数1000000000000000000000000000000000000000000001000000000000000000,该二进制数的第62比特位至第1比特位的内容00000000000000000000000000000000000000000001000000000000000000作为二级表的起始地址,将该二进制数表示的二级表的起始地址转换为十六进制数为0x00040000;
以0x00040000为首地址,对二级表寻址;
图8示出了本发明另一实施例中包含二级表的数据结构图;如图8粗黑下划线部分所示,读取地址0x00040000为首地址的8字节内容0x8000000000050000,将该8字节内容0x8000000000050000转换为二进制数1000000000000000000000000000000000000000000001010000000000000000;
上述二进制数的次高位(即第63比特位)为“0”,即为非压缩标识
二进制数的第62比特位至第1比特位(00000000000000000000000000000000000000000001010000000000000000)作为非压缩数据在qcow3镜像文件中的偏移地址;即,该非压缩数据在qcow3镜像文件中的偏移地址为0x50000;
S2062:根据非压缩数据的在qcow3镜像文件中的偏移地址0x50000及非压缩数据的大小,寻址并获取非压缩数据,其中,非压缩数据的大小等于簇大小65536字节,即0x10000字节;
图9示出了本发明另一实施例中簇数据的数据结构图,如图9所示,从地址0x50000开始的连续65536(即,十六进制数0x10000)字节的内容即为该非压缩数据,为简洁起见,图9仅仅示出了该非压缩数据的部分数据。
S300:根据步骤S200的方法,遍历qcow3镜像文件的一级表及二级表,获取各个簇地址各自对应的簇数据并顺序保存为***文件,如图10所示,步骤S300的具体步骤如下:
S301:遍历一级表;
S302:判断是否完成一级表的遍历,如果是,执行步骤S400,否则,执行步骤S303;
S303:判断当前一级表中当前项的内容是否为零,如果是,执行步骤S304,否则,执行步骤S305;
S304:将当前一级表对应的二级表中所有项的内容填零,执行步骤S305;
S305:遍历二级表;
S306:判断是否完成二级表的遍历,如果是,执行步骤S301,否则,执行步骤S307;
S307:根据步骤S200的方法,获取当前簇地址;
S308:根据当前簇地址进行寻址并读取当前二级表中当前项对应的簇数据,如果当前二级表中当前项的内容为零,则对应簇的存储空间顺序填零,执行步骤S306。
S400:根据指定文件在***文件中的绝对偏移地址及指定文件的大小,计算出指定文件在qcow3镜像文件中的地址,并获取指定文件的内容,步骤S400包含以下具体步骤:
S401:计算指定文件的地址在***文件中簇的位置,具体地,簇的位置=ceil(指定文件在***文件中的绝对偏移地址/簇大小),其中,ceil运算符代表向上取整,余数代表指定文件在当前簇内的偏移地址;
S402:计算指定文件的地址在一级表中的项数,具体地,项数=ceil(簇的位置/二级表的项数),其中,ceil运算符代表向上取整,余数代表指定文件在一级表中的项数;
S403:获取指定文件;具体地,根据步骤S401、S402的计算结果以及文件头信息包含的一级表的起始地址、作为二级表的起始地址的一级表的项的内容、作为簇地址的二级表的项的内容,获得指定文件在qcow3镜像文件的绝对偏移地址,并根据指定文件的大小,在qcow3镜像文件中寻址并获取指定文件。
S404:判断当前获取的指定文件大小加上簇内的偏移地址是否大于簇大小,如果是,在当前簇中读取字节长度为簇大小-簇内的偏移地址的内容,并执行步骤S405,否则,结束流程;
S405:对指定文件在***文件中的绝对偏移地址及指定文件大小重新赋值,并执行步骤S401;
具体地,指定文件在***文件中的绝对偏移地址=指定文件在***文件中的绝对偏移地址+(簇大小-指定文件在当前簇内的偏移地址),指定文件大小=指定文件大小-(簇大小-指定文件在当前簇内的偏移地址),其中,簇大小-指定文件在当前簇内的偏移地址为已读取指定文件的大小。
通过本发明提供的方法,解决了现有技术中尚无一种通过直接解析qcow2及qcow3的文件存储结构并对qcow2及qcow3镜像文件里的数据进行直接提取的方法的技术问题。
应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (8)

1.一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于包括以下步骤:
S100:查找并解析磁盘中qcow2及qcow3镜像文件的头文件,获取头文件信息,其中,所述头文件信息包含所述头文件的标识、版本、簇位移数、镜像文件的容量、簇位移数、加密标识、一级表的项数及所述一级表的起始地址;
S200:根据所述头文件信息,获取并解析所述一级表,根据解析所述一级表的结果,获取并解析所述二级表,根据解析所述二级表的结果,获取簇地址;
S300:根据所述步骤S200的方法,遍历所述qcow2及qcow3镜像文件的所述一级表及所述二级表,获取各个簇地址各自对应的簇数据并顺序保存为***文件;
S400:根据指定文件在所述***文件中的绝对偏移地址及所述指定文件的大小,计算出所述指定文件在所述qcow2及qcow3镜像文件中的地址,并获取所述指定文件的内容。
2.根据权利要求1所述的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,所述步骤S100中所述头文件信息的数据结构如下:
0x0至0x3字节:所述头文件信息的标识0x514649FB
0x4至0x7字节:版本
0x14至0x17字节:簇位移数,表示将二进制数“1”向左移的位数,左移完毕后的二进制数的大小为簇大小
0x18至0x1F字节:镜像文件的容量
0x20至0x23字节:加密标识,0表示未加密,1表示加密
0x24至0x27字节:一级表的项数
0x28至0x2F字节:一级表的起始地址。
3.根据权利要求1所述的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,所述步骤S200的具体步骤如下:
S201:根据簇位移数,计算簇大小;具体地,将二进制数“1”向左移,左移的位数等于所述簇位移数,左移完毕后的二进制数的大小为所述簇大小;
S202:根据所述头文件信息的数据结构,读取所述一级表的项数;
S203:根据所述头文件信息的数据结构,读取所述一级表的起始地址,寻址所述起始地址并以8字节为一项分别读取各个项,读取所述项的个数为所述二级表的项数,其中,所述二级表的项数=所述簇大小/8;以所述一级表的起始地址为首地址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为所述二级表的起始地址;如果读取所述项的内容为零,则不做解析;
S204:寻址所述二级表,判断当前二级表中当前项的首字节的次高位是否为1,如果是,表示当前二级表中当前项的内容所表示的簇数据为压缩数据,执行步骤S205,否则,表示当前二级表中当前项的内容为非压缩数据,执行步骤S206;
S205:解压所述压缩数据作为当前二级表中当前项表示的簇数据,执行所述步骤S300;
S206:将当前所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为大端存储的簇地址并进行保存,用以寻址并读取当前二级表中当前项对应的簇数据。
4.根据权利要求2所述的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,所述步骤S300的具体步骤如下:
S301:遍历所述一级表;
S302:判断是否完成所述一级表的遍历,如果是,执行步骤S400,否则,执行步骤S303;
S303:判断当前一级表中当前项的内容是否为零,如果是,执行步骤S304,否则,执行步骤S305;
S304:将当前一级表对应的二级表中所有项的内容填零,执行步骤S305;
S305:遍历所述二级表;
S306:判断是否完成所述二级表的遍历,如果是,执行步骤S301,否则,执行步骤S307;
S307:根据所述步骤S200的方法,获取当前簇地址;
S308:根据当前簇地址进行寻址并读取当前二级表中当前项对应的簇数据,如果当前二级表中当前项的内容为零,则对应簇的存储空间顺序填零,执行步骤S306。
5.根据权利要求4所述的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,所述步骤S400包含以下具体步骤:
S401:计算指定文件的地址在所述***文件中簇的位置,具体地,所述簇的位置=ceil(指定文件在所述***文件中的绝对偏移地址/簇大小),其中,ceil运算符代表向上取整,余数代表指定文件在当前簇内的偏移地址;
S402:计算指定文件的地址在所述一级表中的项数,具体地,所述项数=ceil(所述簇的位置/二级表的项数),其中,ceil运算符代表向上取整,余数代表指定文件在所述一级表中的项数;
S403:获取指定文件;具体地,根据所述步骤S401、S402的计算结果以及所述文件头信息包含的所述一级表的起始地址、作为所述二级表的起始地址的所述一级表的项的内容、作为簇地址的所述二级表的项的内容,获得指定文件在所述qcow2及qcow3镜像文件的绝对偏移地址,并根据所述指定文件的大小,在所述qcow2及qcow3镜像文件中寻址并获取指定文件;
S404:判断当前获取的指定文件大小加上簇内的偏移地址是否大于簇大小,如果是,在当前簇中读取字节长度为簇大小-簇内的偏移地址的内容,并执行步骤S405,否则,结束流程;
S405:对指定文件在所述***文件中的绝对偏移地址及指定文件大小重新赋值,并执行步骤S401;
具体地,指定文件在所述***文件中的绝对偏移地址=指定文件在所述***文件中的绝对偏移地址+(簇大小-指定文件在当前簇内的偏移地址),指定文件大小=指定文件大小-(簇大小-指定文件在当前簇内的偏移地址),其中,簇大小-指定文件在当前簇内的偏移地址为已读取指定文件的大小。
6.根据权利要求3所述的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,所述步骤S205包含以下具体步骤:
S2051:以所述二级表的起始地址为首地址,对所述二级表寻址,将当前二级表中当前项的8字节内容转换为二进制数;
S2052:所述二进制数的第62比特位至第54比特位作为所述压缩数据的大小,其单位为扇区;所述二进制数的第53比特位至第1比特位作为所述压缩数据在qcow2及qcow3镜像文件中的偏移地址;
S2053:根据所述压缩数据的在qcow2及qcow3镜像文件中的偏移地址及所述压缩数据的大小,寻址并获取所述压缩数据;
S2054:解压所述压缩数据作为当前二级表中当前项表示的簇数据,执行所述步骤S300。
7.根据权利要求3的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,步骤S206包含以下具体步骤:
S2061:以各个二级表的起始地址为首地址,对二级表寻址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为非压缩数据在qcow2及qcow3镜像文件中的偏移地址;
S2062:根据非压缩数据的在qcow2及qcow3镜像文件中的偏移地址及非压缩数据的大小,寻址并获取非压缩数据,其中,非压缩数据的大小等于所述簇大小。
8.根据权利要求1的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,qcow2及qcow3镜像文件具有相同的数据结构。
CN201811125331.2A 2018-09-26 2018-09-26 一种解析并提取qcow2及qcow3镜像文件的方法 Pending CN109271209A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811125331.2A CN109271209A (zh) 2018-09-26 2018-09-26 一种解析并提取qcow2及qcow3镜像文件的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811125331.2A CN109271209A (zh) 2018-09-26 2018-09-26 一种解析并提取qcow2及qcow3镜像文件的方法

Publications (1)

Publication Number Publication Date
CN109271209A true CN109271209A (zh) 2019-01-25

Family

ID=65197731

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811125331.2A Pending CN109271209A (zh) 2018-09-26 2018-09-26 一种解析并提取qcow2及qcow3镜像文件的方法

Country Status (1)

Country Link
CN (1) CN109271209A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111008378A (zh) * 2019-11-29 2020-04-14 四川效率源信息安全技术股份有限公司 一种清洗希捷硬盘固件区恶意代码的方法
CN115514498A (zh) * 2022-09-27 2022-12-23 四川长虹电器股份有限公司 快速检测安卓电视***镜像文件中签名信息的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103095834A (zh) * 2013-01-16 2013-05-08 中国科学院计算技术研究所 一种跨虚拟化数据中心的虚拟机在线迁移方法
CN105528237A (zh) * 2015-12-10 2016-04-27 国云科技股份有限公司 一种基于openstack的物理机***打包方法
CN105912428A (zh) * 2016-05-20 2016-08-31 上海数腾软件科技股份有限公司 实现源数据实时转化为虚拟机镜像的***及方法
US20170024260A1 (en) * 2015-07-21 2017-01-26 Cisco Technology, Inc. Workload migration across cloud providers and data centers

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103095834A (zh) * 2013-01-16 2013-05-08 中国科学院计算技术研究所 一种跨虚拟化数据中心的虚拟机在线迁移方法
US20170024260A1 (en) * 2015-07-21 2017-01-26 Cisco Technology, Inc. Workload migration across cloud providers and data centers
CN105528237A (zh) * 2015-12-10 2016-04-27 国云科技股份有限公司 一种基于openstack的物理机***打包方法
CN105912428A (zh) * 2016-05-20 2016-08-31 上海数腾软件科技股份有限公司 实现源数据实时转化为虚拟机镜像的***及方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
(美)ED TAYLOR: "《网络互联技术指南》", 31 August 2001 *
LUO_MINGHAO: "qcow2镜像格式解析", 《HTTPS://BLOG.CSDN.NET/U013472064/ARTICLE/DETAILS/47954583?UTM_SOURCE=BLOGXGWZ6》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111008378A (zh) * 2019-11-29 2020-04-14 四川效率源信息安全技术股份有限公司 一种清洗希捷硬盘固件区恶意代码的方法
CN111008378B (zh) * 2019-11-29 2023-08-01 四川效率源信息安全技术股份有限公司 一种清洗硬盘固件区恶意代码的方法
CN115514498A (zh) * 2022-09-27 2022-12-23 四川长虹电器股份有限公司 快速检测安卓电视***镜像文件中签名信息的方法

Similar Documents

Publication Publication Date Title
CN110019004B (zh) 一种数据处理方法、装置及***
JP2009539169A5 (zh)
US20130006981A1 (en) Storage device and data processing device utilizing determined dictionary compression
US9509333B2 (en) Compression device, compression method, decompression device, decompression method, information processing system, and recording medium
JP5753946B2 (ja) フォントファイルをダウンロードする方法およびシステム
CN105446975B (zh) 一种文件打包方法及装置
US10166467B2 (en) Information processing device, data structure of game data, and recording medium
US10311034B2 (en) Computer-readable recording medium
CN109271209A (zh) 一种解析并提取qcow2及qcow3镜像文件的方法
CN106445616B (zh) 终端设备从多***至单***的升级方法及装置
EP2878348A1 (en) Information processing device, data structure of game data, program, and recording medium
CN109298894A (zh) 一种提取qcow镜像文件的方法
CN106354746B (zh) 搜索方法和搜索设备
JP2007080240A (ja) ファイル割り当てテーブルのアクセス手法
CN116894016A (zh) 轨道交通信号的日志压缩方法及装置
US8463759B2 (en) Method and system for compressing data
US20160139819A1 (en) Computer-readable recording medium, encoding device and encoding method
CN111414339A (zh) 一种文件的处理方法、***、装置、设备及介质
JP6931442B2 (ja) 符号化プログラム、インデックス生成プログラム、検索プログラム、符号化装置、インデックス生成装置、検索装置、符号化方法、インデックス生成方法および検索方法
EP3404839A1 (en) Encoding program, encoding device, and encoding method
CN107026888B (zh) 大容量数据传送装置及方法
US9496895B2 (en) Compression method and decompression method
CN109271463A (zh) 一种恢复MySQL数据库的innodb压缩数据的方法
CN113384872A (zh) 在微端中处理信息资源的方法、装置、电子设备及存储介质
JP6512294B2 (ja) 圧縮プログラム、圧縮方法および圧縮装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20190125

RJ01 Rejection of invention patent application after publication