Home | History | Annotate | Line # | Download | only in magdir
      1      1.1  christos 
      2      1.1  christos #------------------------------------------------------------------------------
      3  1.1.1.8  christos # $File: virtual,v 1.23 2026/04/15 16:56:41 christos Exp $
      4      1.1  christos # From: James Nobis <quel (a] quelrod.net>
      5      1.1  christos # Microsoft hard disk images for:
      6      1.1  christos # Virtual Server
      7      1.1  christos # Virtual PC
      8  1.1.1.4  christos # VirtualBox
      9  1.1.1.4  christos # URL: http://fileformats.archiveteam.org/wiki/VHD_(Virtual_Hard_Disk)
     10  1.1.1.4  christos # Reference: https://download.microsoft.com/download/f/f/e/ffef50a5-07dd-4cf8-aaa3-442c0673a029/
     11  1.1.1.4  christos # Virtual%20Hard%20Disk%20Format%20Spec_10_18_06.doc
     12  1.1.1.7  christos 0	string	conectix	Microsoft Disk Image, Virtual Server or Virtual PC
     13  1.1.1.4  christos # alternative shorter names
     14  1.1.1.7  christos #0	string	conectix	Microsoft Virtual Hard Disk image
     15  1.1.1.7  christos #0	string	conectix	Microsoft Virtual HD image
     16  1.1.1.4  christos !:mime	application/x-virtualbox-vhd
     17  1.1.1.4  christos !:ext   vhd
     18  1.1.1.4  christos # Features is a bit field used to indicate specific feature support
     19  1.1.1.7  christos #>8	ubelong		!0x00000002	\b, Features %#x
     20  1.1.1.4  christos # Reserved. This bit must always be set to 1.
     21  1.1.1.7  christos #>8	ubelong		&0x00000002	\b, Reserved %#x
     22  1.1.1.4  christos # File Format Version for the current specification 0x00010000
     23  1.1.1.7  christos #>12	ubelong		!0x00010000	\b, Version %#8.8x
     24  1.1.1.4  christos # Data Offset only found 0x200
     25  1.1.1.7  christos #>16	ubequad		!0x200		\b, Data Offset %#llx
     26  1.1.1.7  christos #>16	ubequad		x		\b, at %#llx
     27  1.1.1.4  christos # Dynamic Disk Header cookie like cxsparse
     28  1.1.1.4  christos #>(16.Q)	string		x		"%-.8s"
     29  1.1.1.4  christos # This field contains a Unicode string (UTF-16) of the parent hard disk filename
     30  1.1.1.7  christos #>(16.Q+64)	ubequad	x		\b, parent name %#llx
     31  1.1.1.4  christos # Creator Application
     32  1.1.1.4  christos # vpc~Microsoft Virtual PC, vs~Microsoft Virtual Server, vbox~VirtualBox, d2v~disk2vhd
     33  1.1.1.4  christos >28	string		x		\b, Creator %-4.4s
     34  1.1.1.4  christos # Creator Version: 0x00010000~Virtual Server 2004, 0x00050000~Virtual PC 2004
     35  1.1.1.4  christos # holds the major/minor version of the application that created the image
     36  1.1.1.4  christos >32	ubeshort	x		%x
     37  1.1.1.4  christos >34	ubeshort	x		\b.%x
     38  1.1.1.7  christos #>32	ubelong		x		\b, Version %#8.8x
     39  1.1.1.4  christos # Creator Host OS: 0x5769326B~Windows (Wi2k), 0x4D616320~Macintosh (Mac)
     40  1.1.1.4  christos >36	ubelong		x		(
     41  1.1.1.4  christos >>36	ubelong		0x5769326B	\bW2k
     42  1.1.1.4  christos >>36	ubelong		0x4D616320	\bMac
     43  1.1.1.4  christos >>36	default		x		\b0x
     44  1.1.1.4  christos >>>36	ubelong		x		\b%8.8x
     45  1.1.1.4  christos # creation Time in seconds since 1 Jan 2000 UTC~946684800 sec. since Unix Epoch
     46  1.1.1.4  christos >24	bedate+946684800	x	\b) %s
     47  1.1.1.4  christos # Original Size
     48  1.1.1.7  christos #>40	ubequad		x		\b, o.-Size %#llx
     49  1.1.1.4  christos # Current Size is same as original size, but change when disk is expanded
     50  1.1.1.7  christos #>48	ubequad		x		\b, Size %#llx
     51  1.1.1.4  christos >48	ubequad		x		\b, %llu bytes
     52  1.1.1.4  christos # Disk Geometry: cylinder, heads, and sectors/track for hard disk
     53  1.1.1.7  christos #>56	ubeshort	x		\b, Cylinder %#x
     54  1.1.1.4  christos >56	ubeshort	x		\b, CHS %u
     55  1.1.1.4  christos # Heads
     56  1.1.1.7  christos #>58	ubyte		x		\b, Heads %#x
     57  1.1.1.4  christos >58	ubyte		x		\b/%u
     58  1.1.1.4  christos # Sectors per track
     59  1.1.1.7  christos #>59	ubyte		x		\b, Sectors %#x
     60  1.1.1.4  christos >59	ubyte		x		\b/%u
     61  1.1.1.4  christos # Disk Type: 3~Dynamic hard disk
     62  1.1.1.7  christos >60	ubelong		!0x3		\b, type %#x
     63  1.1.1.4  christos # Checksum
     64  1.1.1.7  christos #>64	ubelong		x		\b, cksum %#x
     65  1.1.1.4  christos # universally unique identifier (UUID) to associate a parent with its differencing image
     66  1.1.1.7  christos #>68	ubequad		x		\b, id %#16.16llx
     67  1.1.1.4  christos #>76	ubequad		x		\b-%16.16llx
     68  1.1.1.4  christos # Saved State: 1~Saved State
     69  1.1.1.7  christos >84	ubyte		!0		\b, State %#x
     70  1.1.1.4  christos # Reserved 427 bytes with nils
     71  1.1.1.7  christos #>85	ubequad	!0			\b, Reserved %#16.16llx
     72  1.1.1.4  christos 
     73  1.1.1.4  christos # From: Joerg Jenderek
     74  1.1.1.4  christos # URL: https://msdn.microsoft.com/en-us/library/mt740058.aspx
     75  1.1.1.4  christos # Reference: https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/
     76  1.1.1.4  christos # MS-VHDX/[MS-VHDX].pdf
     77  1.1.1.4  christos # Note: extends the VHD format with new capabilities, such as a 16TB maximum size
     78  1.1.1.4  christos # TODO:	find and display values like virtual size, disk size, cluster_size, etc
     79  1.1.1.4  christos #	display id in GUID format
     80  1.1.1.4  christos #
     81  1.1.1.4  christos # VHDX_FILE_IDENTIFIER signature 0x656C696678646876
     82  1.1.1.4  christos 0	string			vhdxfile
     83  1.1.1.4  christos # VHDX_HEADER signature. 1 header is stored at offset 64KB and the other at 128KB
     84  1.1.1.4  christos >0x10000	string		head		Microsoft Disk Image eXtended
     85  1.1.1.4  christos #>0x20000	string			head	\b, 2nd header
     86  1.1.1.4  christos #!:mime	application/x-virtualbox-vhdx
     87  1.1.1.4  christos !:ext	vhdx
     88  1.1.1.4  christos # Creator[256] like "QEMU v3.0.0", "Microsoft Windows 6.3.9600.18512"
     89  1.1.1.4  christos >>8		lestring16		x	\b, by %.256s
     90  1.1.1.4  christos # The Checksum field is a CRC-32C hash over the entire 4 KB structure
     91  1.1.1.7  christos #>>0x10004	ulelong			x	\b, CRC %#x
     92  1.1.1.4  christos # SequenceNumber
     93  1.1.1.7  christos >>0x10008	ulequad			x	\b, sequence %#llx
     94  1.1.1.4  christos # FileWriteGuid
     95  1.1.1.7  christos #>>0x10010	ubequad			x	\b, file id %#llx
     96  1.1.1.4  christos #>>>0x10018	ubequad			x	\b-%llx
     97  1.1.1.4  christos # DataWriteGuid
     98  1.1.1.7  christos #>>0x10020	ubequad			x	\b, data id %#llx
     99  1.1.1.4  christos #>>>0x10028	ubequad			x	\b-%llx
    100  1.1.1.4  christos # LogGuid. If this field is zero, then the log is empty or has no valid entries 
    101  1.1.1.7  christos >>0x10030	ubequad			>0	\b, log id %#llx
    102  1.1.1.4  christos >>>0x10038	ubequad			x	\b-%llx
    103  1.1.1.4  christos # LogVersion. If not 0 there is a log to replay
    104  1.1.1.7  christos >>0x10040	uleshort		>0	\b, LogVersion %#x
    105  1.1.1.4  christos # Version. This field must be set to 1
    106  1.1.1.7  christos >>0x10042	uleshort		!1	\b, Version %#x
    107  1.1.1.4  christos # LogLength must be multiples of 1 MB
    108  1.1.1.4  christos >>0x10044	ulelong/1048576		>1	\b, LogLength %u MB
    109  1.1.1.4  christos # LogOffset (normally 0x100000 when log direct after header); multiples of 1 MB
    110  1.1.1.7  christos >>0x10048	ulequad			!0x100000 \b, LogOffset %#llx
    111  1.1.1.4  christos # Log Entry Signature must be 0x65676F6C~loge
    112  1.1.1.4  christos >>(0x10048.q)	ulelong			!0x65676F6C \b, NO Log Signature
    113  1.1.1.4  christos >>(0x10048.q)	ulelong			=0x65676F6C	\b; LOG
    114  1.1.1.4  christos # Log Entry Checksum
    115  1.1.1.7  christos #>>>(0x10048.q+4)	ulelong		x	\b, Log CRC %#x
    116  1.1.1.4  christos # Log Entry Length must be a multiple of 4 KB
    117  1.1.1.4  christos >>>(0x10048.q+8)	ulelong/1024	>4	\b, EntryLength %u KB
    118  1.1.1.4  christos # Log Entry Tail must be a multiple of 4 KB
    119  1.1.1.7  christos #>>>(0x10048.q+12)	ulelong		x	\b, Tail %#x
    120  1.1.1.4  christos # Log Entry SequenceNumber
    121  1.1.1.7  christos #>>>(0x10048.q+16)	ulequad		x	\b, # %#llx
    122  1.1.1.4  christos # Log Entry DescriptorCount may be zero. only 4 bytes in other docs instead 8
    123  1.1.1.7  christos #>>>(0x10048.q+24)	ulelong		x	\b, DescriptorCount %#llx
    124  1.1.1.4  christos # Log Entry Reserved must be set to 0
    125  1.1.1.7  christos >>>(0x10048.q+28)	ulelong		!0	\b, Reserved %#x
    126  1.1.1.4  christos # Log Entry LogGuid
    127  1.1.1.7  christos #>>>(0x10048.q+32)	ubequad		x	\b, Log id %#llx
    128  1.1.1.4  christos #>>>(0x10048.q+40)	ubequad		x	\b-%llx
    129  1.1.1.4  christos # Log Entry FlushedFileOffset should VHDX size when entry is written.
    130  1.1.1.4  christos #>>>(0x10048.q+48)	ulequad		x	\b, FlushedFileOffset %llu
    131  1.1.1.4  christos # Log Entry LastFileOffset
    132  1.1.1.4  christos #>>>(0x10048.q+56)	ulequad		x	\b, LastFileOffset %llu
    133  1.1.1.4  christos # filling
    134  1.1.1.4  christos #>>>(0x10048.q+64)	ulequad		>0	\b, filling %llx
    135  1.1.1.4  christos # Reserved[4016]
    136  1.1.1.7  christos #>>0x10050	ulequad			>0	\b, Reserved %#llx
    137  1.1.1.4  christos # VHDX_REGION_TABLE_HEADER Signature 0x69676572~regi at offset 192 KB and 256 KB
    138  1.1.1.8  christos >0x30000	ulelong			!0x69676572 Microsoft Disk Image Extended, 1st region INVALID
    139  1.1.1.8  christos >0x30000	ulelong			=0x69676572 Microsoft Disk Image Extended; region
    140  1.1.1.4  christos # region Checksum. CRC-32C hash over the entire 64-KB table
    141  1.1.1.7  christos #>>0x30004	ulelong			x	\b, CRC %#x
    142  1.1.1.4  christos # The EntryCount specifies number of valid entries; Found 2; This must be =< 2047. 
    143  1.1.1.4  christos >>0x30008	ulelong			x	\b, %u entries
    144  1.1.1.4  christos # reserved must be zero
    145  1.1.1.7  christos #>>0x3000C	ulelong			!0	\b, RESERVED %#x
    146  1.1.1.4  christos # Region Table Entry starts with identifier for the object. often BAT id
    147  1.1.1.4  christos >>0x30010	use			vhdx-id
    148  1.1.1.4  christos # FileOffset
    149  1.1.1.7  christos >>0x30020	ulequad		x		\b, at %#llx
    150  1.1.1.4  christos # Length. Specifies the length of the object within the file
    151  1.1.1.7  christos #>>0x30028	ulelong		x		\b, Length %#x
    152  1.1.1.4  christos # 1 means region entry is required. if region not recognized, then REFUSE to load VHDX
    153  1.1.1.4  christos >>0x3002C	ulelong		x		\b, Required %u
    154  1.1.1.4  christos # 2nd region entry often metadata id
    155  1.1.1.4  christos >>0x30030	use			vhdx-id
    156  1.1.1.4  christos # 2nd entry FileOffset
    157  1.1.1.7  christos >>0x30040	ulequad		x		\b, at %#llx
    158  1.1.1.4  christos # 1 means region entry is required. if region not recognized, then REFUSE to load VHDX
    159  1.1.1.4  christos >>0x3004C	ulelong		x		\b, Required %u
    160  1.1.1.4  christos # 2nd region
    161  1.1.1.4  christos >>0x40000	ulelong		!0x69676572	\b, 2nd region INVALID
    162  1.1.1.4  christos # check in vhdx images for known id and show names instead hexadecimal
    163  1.1.1.4  christos 0	name		vhdx-id
    164  1.1.1.4  christos # https://www.windowstricks.in/online-windows-guid-converter
    165  1.1.1.4  christos # 2DC27766-F623-4200-9D64-115E9BFD4A08		BAT GUID
    166  1.1.1.4  christos # 6677C22D23F600429D64115E9BFD4A08		BAT ID
    167  1.1.1.4  christos >0	ubequad		=0x6677C22D23F60042
    168  1.1.1.4  christos >>8	ubequad		=0x9D64115E9BFD4A08	\b, id BAT
    169  1.1.1.4  christos # no BAT id
    170  1.1.1.4  christos >>8	default		x
    171  1.1.1.4  christos >>>0	use		vhdx-id-hex
    172  1.1.1.4  christos # 8B7CA206-4790-4B9A-B8FE-575F050F886E		Metadata region GUID
    173  1.1.1.4  christos # 06A27C8B90479A4BB8FE575F050F886E		Metadata region ID
    174  1.1.1.4  christos >0	ubequad		=0x06A27C8B90479A4B
    175  1.1.1.4  christos >>8	ubequad		=0xB8FE575F050F886E	\b, id Metadata
    176  1.1.1.4  christos # no Metadata id
    177  1.1.1.4  christos >>8	default		x
    178  1.1.1.4  christos >>>0	use		vhdx-id-hex
    179  1.1.1.4  christos # 2FA54224-CD1B-4876-B211-5DBED83BF4B8		Virtual Disk Size GUID
    180  1.1.1.4  christos # 2442A52F1BCD7648B2115DBED83BF4B8		Virtual Disk Size ID
    181  1.1.1.4  christos # value "virtual size" can be verified by command `qemu-img info `
    182  1.1.1.4  christos >0	ubequad		=0x2442A52F1BCD7648
    183  1.1.1.4  christos >>8	ubequad		=0xB2115DBED83BF4B8	\b, id vsize
    184  1.1.1.4  christos # no Virtual Disk Size ID
    185  1.1.1.4  christos >>8	default		x
    186  1.1.1.4  christos >>>0	use		vhdx-id-hex
    187  1.1.1.4  christos # other ids
    188  1.1.1.4  christos >0	default		x
    189  1.1.1.4  christos >>0	use		vhdx-id-hex
    190  1.1.1.4  christos # in vhdx images show id as hexadecimal
    191  1.1.1.4  christos 0	name		vhdx-id-hex
    192  1.1.1.7  christos >0	ubequad		x			\b, ID %#16.16llx
    193  1.1.1.4  christos >8	ubequad		x			\b-%16.16llx
    194  1.1.1.4  christos #
    195  1.1.1.3  christos # libvirt
    196  1.1.1.3  christos # From: Philipp Hahn <hahn (a] univention.de>
    197  1.1.1.3  christos 0	string	LibvirtQemudSave	Libvirt QEMU Suspend Image
    198  1.1.1.3  christos >0x10	lelong	x	\b, version %u
    199  1.1.1.3  christos >0x14	lelong	x	\b, XML length %u
    200  1.1.1.3  christos >0x18	lelong	1	\b, running
    201  1.1.1.8  christos >0x1c	lelong	0	\b, RAW (no compression)
    202  1.1.1.8  christos >0x1c	lelong	1	\b, gzip compressed
    203  1.1.1.8  christos >0x1c	lelong	2	\b, bzip2 compressed
    204  1.1.1.8  christos >0x1c	lelong	3	\b, xz compressed
    205  1.1.1.8  christos >0x1c	lelong	4	\b, lzop compressed
    206  1.1.1.3  christos 
    207  1.1.1.3  christos 0	string	LibvirtQemudPart	Libvirt QEMU partial Suspend Image
    208  1.1.1.3  christos # From: Alex Beregszaszi <alex (a] fsn.hu>
    209  1.1.1.3  christos 0	string/b	COWD		VMWare3
    210  1.1.1.3  christos >4	byte	3		disk image
    211  1.1.1.3  christos >>32	lelong	x		(%d/
    212  1.1.1.3  christos >>36	lelong	x		\b%d/
    213  1.1.1.3  christos >>40	lelong	x		\b%d)
    214  1.1.1.3  christos >4	byte	2		undoable disk image
    215  1.1.1.3  christos >>32	string	>\0		(%s)
    216  1.1.1.3  christos 
    217  1.1.1.3  christos 0	string/b	VMDK		 VMware4 disk image
    218  1.1.1.3  christos 0	string/b	KDMV		 VMware4 disk image
    219  1.1.1.3  christos 
    220  1.1.1.3  christos #--------------------------------------------------------------------
    221  1.1.1.3  christos # Qemu Emulator Images
    222  1.1.1.3  christos # Lines written by Friedrich Schwittay (f.schwittay (a] yousable.de)
    223  1.1.1.3  christos # Updated by Adam Buchbinder (adam.buchbinder (a] gmail.com)
    224  1.1.1.3  christos # Made by reading sources, reading documentation, and doing trial and error
    225  1.1.1.3  christos # on existing QCOW files
    226  1.1.1.7  christos 0	string/b	QFI\xFB	QEMU QCOW Image
    227  1.1.1.7  christos !:mime	application/x-qemu-disk
    228  1.1.1.3  christos 
    229  1.1.1.3  christos # Uncomment the following line to display Magic (only used for debugging
    230  1.1.1.3  christos # this magic number)
    231  1.1.1.3  christos #>0	string/b	x	, Magic: %s
    232  1.1.1.3  christos 
    233  1.1.1.3  christos # There are currently 2 Versions: "1" and "2".
    234  1.1.1.4  christos # https://www.gnome.org/~markmc/qcow-image-format-version-1.html
    235  1.1.1.7  christos >4	belong		x	(v%d)
    236  1.1.1.3  christos 
    237  1.1.1.3  christos # Using the existence of the Backing File Offset to determine whether
    238  1.1.1.3  christos # to read Backing File Information
    239  1.1.1.3  christos >>12	belong	 >0	 \b, has backing file (
    240  1.1.1.3  christos # Note that this isn't a null-terminated string; the length is actually
    241  1.1.1.3  christos # (16.L). Assuming a null-terminated string happens to work usually, but it
    242  1.1.1.3  christos # may spew junk until it reaches a \0 in some cases.
    243  1.1.1.3  christos >>>(12.L)	 string >\0	\bpath %s
    244  1.1.1.3  christos 
    245  1.1.1.3  christos # Modification time of the Backing File
    246  1.1.1.3  christos # Really useful if you want to know if your backing
    247  1.1.1.3  christos # file is still usable together with this image
    248  1.1.1.3  christos >>>>20	bedate >0	\b, mtime %s)
    249  1.1.1.3  christos >>>>20	default x	\b)
    250  1.1.1.3  christos 
    251  1.1.1.3  christos # Size is stored in bytes in a big-endian u64.
    252  1.1.1.3  christos >>24	bequad	x	 \b, %lld bytes
    253  1.1.1.3  christos 
    254  1.1.1.3  christos # 1 for AES encryption, 0 for none.
    255  1.1.1.3  christos >>36	belong	1	\b, AES-encrypted
    256  1.1.1.3  christos 
    257  1.1.1.4  christos # https://www.gnome.org/~markmc/qcow-image-format.html
    258  1.1.1.3  christos >4	belong	2	(v2)
    259  1.1.1.3  christos # Using the existence of the Backing File Offset to determine whether
    260  1.1.1.3  christos # to read Backing File Information
    261  1.1.1.3  christos >>8	bequad  >0	 \b, has backing file
    262  1.1.1.3  christos # Note that this isn't a null-terminated string; the length is actually
    263  1.1.1.3  christos # (16.L). Assuming a null-terminated string happens to work usually, but it
    264  1.1.1.3  christos # may spew junk until it reaches a \0 in some cases. Also, since there's no
    265  1.1.1.3  christos # .Q modifier, we just use the bottom four bytes as an offset. Note that if
    266  1.1.1.3  christos # the file is over 4G, and the backing file path is stored after the first 4G,
    267  1.1.1.3  christos # the wrong filename will be printed. (This should be (8.Q), when that syntax
    268  1.1.1.3  christos # is introduced.)
    269  1.1.1.3  christos >>>(12.L)	 string >\0	(path %s)
    270  1.1.1.3  christos >>24	bequad	x	\b, %lld bytes
    271  1.1.1.3  christos >>32	belong	1	\b, AES-encrypted
    272  1.1.1.3  christos 
    273  1.1.1.3  christos >4	belong	3	(v3)
    274  1.1.1.3  christos # Using the existence of the Backing File Offset to determine whether
    275  1.1.1.3  christos # to read Backing File Information
    276  1.1.1.3  christos >>8	bequad  >0	 \b, has backing file
    277  1.1.1.3  christos # Note that this isn't a null-terminated string; the length is actually
    278  1.1.1.3  christos # (16.L). Assuming a null-terminated string happens to work usually, but it
    279  1.1.1.3  christos # may spew junk until it reaches a \0 in some cases. Also, since there's no
    280  1.1.1.3  christos # .Q modifier, we just use the bottom four bytes as an offset. Note that if
    281  1.1.1.3  christos # the file is over 4G, and the backing file path is stored after the first 4G,
    282  1.1.1.3  christos # the wrong filename will be printed. (This should be (8.Q), when that syntax
    283  1.1.1.3  christos # is introduced.)
    284  1.1.1.3  christos >>>(12.L)	 string >\0	(path %s)
    285  1.1.1.3  christos >>24	bequad	x	\b, %lld bytes
    286  1.1.1.3  christos >>32	belong	1	\b, AES-encrypted
    287  1.1.1.3  christos 
    288  1.1.1.3  christos >4	default x	(unknown version)
    289  1.1.1.3  christos 
    290  1.1.1.3  christos 0	string/b	QEVM		QEMU suspend to disk image
    291  1.1.1.3  christos 
    292  1.1.1.3  christos # QEMU QED Image
    293  1.1.1.4  christos # https://wiki.qemu.org/Features/QED/Specification
    294  1.1.1.3  christos 0	string/b	QED\0		QEMU QED Image
    295  1.1.1.3  christos 
    296  1.1.1.3  christos # VDI Image
    297      1.1  christos # Sun xVM VirtualBox Disk Image
    298  1.1.1.2  christos # From: Richard W.M. Jones <rich (a] annexia.org>
    299  1.1.1.2  christos # VirtualBox Disk Image
    300  1.1.1.2  christos 0x40	ulelong		0xbeda107f	VirtualBox Disk Image
    301  1.1.1.2  christos >0x44	uleshort	>0		\b, major %u
    302  1.1.1.2  christos >0x46	uleshort	>0		\b, minor %u
    303  1.1.1.3  christos >0	string		>\0		(%s)
    304  1.1.1.3  christos >368	lequad		x		 \b, %lld bytes
    305  1.1.1.3  christos 
    306  1.1.1.8  christos # From:		Joerg Jenderek
    307  1.1.1.8  christos # URL: 		https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifynvram
    308  1.1.1.8  christos # Reference:	http://mark0.net/download/triddefs_xml.7z/defs/n/nvram-virtualbox.trid.xml
    309  1.1.1.8  christos # Note:		called "VirtualBox saved (U)EFI BIOS settings" by TrID and
    310  1.1.1.8  christos #		verfied partly by VirtualBox version 7.0.12 `VBoxManage modifynvram <uuid|vmname> listvars`
    311  1.1.1.8  christos # first 64 bytes seems to be constant
    312  1.1.1.8  christos 0	long		0
    313  1.1.1.8  christos >0x28	string		_FVH
    314  1.1.1.8  christos >>0x64	beshort		0xAA55
    315  1.1.1.8  christos >>>0	use		virtualbox-nvram
    316  1.1.1.8  christos #	display information of virtualbox *.nvram
    317  1.1.1.8  christos 0	name	virtualbox-nvram
    318  1.1.1.8  christos >0x64	beshort		x			VirtualBox NVRAM file
    319  1.1.1.8  christos #!:mime	application/octet-stream
    320  1.1.1.8  christos !:mime	application/x-virtualbox-nvram
    321  1.1.1.8  christos !:ext	nvram
    322  1.1.1.8  christos 
    323  1.1.1.3  christos 0	string/b	Bochs\ Virtual\ HD\ Image	Bochs disk image,
    324  1.1.1.3  christos >32	string	x				type %s,
    325  1.1.1.3  christos >48	string	x				subtype %s
    326  1.1.1.3  christos 
    327  1.1.1.3  christos 0	lelong	0x02468ace			Bochs Sparse disk image
    328  1.1.1.3  christos 
    329  1.1.1.8  christos # QEMU replay image
    330  1.1.1.8  christos # From: Alexandre Iooss <erdnaxe (a] crans.org>
    331  1.1.1.8  christos # URL: https://www.qemu.org/docs/master/system/replay.html
    332  1.1.1.8  christos # Reference: https://gitlab.com/qemu/qemu/-/blob/master/replay/replay.c
    333  1.1.1.8  christos 0	ubelong&0xFFFFFFF0	0x00e02000
    334  1.1.1.8  christos >3	byte			>5
    335  1.1.1.8  christos >>4	quad			0
    336  1.1.1.8  christos >>>12	ulelong			<40		QEMU replay
    337  1.1.1.8  christos >>>>3	byte			x		\b, version %d
    338  1.1.1.8  christos >>>>3	byte			6		(QEMU 2.10-2.11)
    339  1.1.1.8  christos >>>>3	byte			7		(QEMU 2.12-4.1)
    340  1.1.1.8  christos >>>>3	byte			8		(QEMU 4.2)
    341  1.1.1.8  christos >>>>3	byte			9		(QEMU 5.0)
    342  1.1.1.8  christos >>>>3	byte			10		(QEMU 5.1-7.0)
    343  1.1.1.8  christos >>>>3	byte			12		(QEMU 7.1+)
    344  1.1.1.8  christos 
    345  1.1.1.8  christos # Parallels disk image
    346  1.1.1.8  christos 0	string	WithoutFreeSpace	Parallels disk image
    347  1.1.1.8  christos 0	string	WithouFreSpacExt	Parallels disk image (extended) 
    348