Skip to content

Instantly share code, notes, and snippets.

@u1735067
Last active March 13, 2018 17:37
Show Gist options
  • Save u1735067/b864e995fc7f9919a9a6ebaf1dee4c54 to your computer and use it in GitHub Desktop.
Save u1735067/b864e995fc7f9919a9a6ebaf1dee4c54 to your computer and use it in GitHub Desktop.
BitLocker headers format in real kaitai format, with recursive parsing
meta:
id: bde_metadatas
endian: le
doc-ref: https://github.com/libyal/libbde/blob/master/libbde/bde_metadata.h
doc-ref: https://github.com/libyal/libbde/blob/master/libbde/libbde_definitions.h.in
# This will be find at first_metadata_offset from bde_volume_header
seq:
- id: metadata
type: bde_metadata
types:
bde_metadata:
seq:
- id: bde_metadata_block_header_common
type: bde_metadata_block_header_common
- id: bde_metadata_block_header_specific
type:
switch-on: bde_metadata_block_header_common.version
cases:
1: bde_metadata_block_header_v1
2: bde_metadata_block_header_v2
- id: bde_metadata_header
type: bde_metadata_header_v1
- id: bde_metadata_entries
size: bde_metadata_header.metadata_size - bde_metadata_header.metadata_header_size
type: bde_metadata_entries_list
bde_metadata_block_header_common:
seq:
- id: signature
contents: '-FVE-FS-'
- id: size
type: u2
- id: version
type: u2
bde_metadata_block_header_v1:
seq:
- id: unknown1
size: 2
- id: unknown2
size: 2
- id: unknown3
size: 16
- id: first_metadata_offset
type: u8
- id: second_metadata_offset
type: u8
- id: third_metadata_offset
type: u8
- id: mft_mirror_cluster_block
type: u8
bde_metadata_block_header_v2:
seq:
- id: unknown1
size: 2
- id: unknown2
size: 2
- id: encrypted_volume_size
type: u8
- id: unknown3
size: 4
- id: number_of_volume_header_sectors
type: u4
- id: first_metadata_offset
type: u8
- id: second_metadata_offset
type: u8
- id: third_metadata_offset
type: u8
- id: volume_header_offset
type: u8
bde_metadata_header_v1:
seq:
- id: metadata_size
type: u4
- id: version
type: u4
- id: metadata_header_size
type: u4
- id: metadata_size_copy
type: u4
- id: volume_identifier
size: 16
- id: next_nonce_counter
type: u4
- id: encryption_method
type: u2
enum: encryption_method
- id: encryption_method_copy
type: u2
- id: creation_time
type: u8
doc: 'Contains a filetime'
bde_metadata_entries_list:
seq:
- id: list
repeat: eos
type: bde_metadata_entry
bde_metadata_entry:
seq:
- id: entry_header
type: bde_metadata_entry_header_v1
- id: entry_content
size: entry_header.size - 8 # Remove the size of the entry header
type:
switch-on: entry_header.value_type
cases:
value_type::key: bde_metadata_entry_key
value_type::unicode_string: bde_metadata_entry_unicode_string
value_type::stretch_key: bde_metadata_entry_stretch_key
value_type::aes_ccm_encrypted_key: bde_metadata_entry_aes_ccm_encrypted_key
value_type::volume_master_key: bde_metadata_entry_volume_master_key
value_type::external_key: bde_metadata_entry_external_key
value_type::offset_and_size: bde_metadata_entry_offset_and_size
bde_metadata_entry_header_v1:
seq:
- id: size
type: u2
- id: type
type: u2
enum: entry_type
- id: value_type
type: u2
enum: value_type
- id: version
type: u2
bde_metadata_entry_key:
seq:
- id: encryption_method
type: u4
- id: key
size-eos: true
bde_metadata_entry_unicode_string:
seq:
- id: text
type: str
size-eos: true
encoding: UTF-16LE
bde_metadata_entry_stretch_key:
seq:
- id: encryption_method
type: u4
enum: encryption_method
- id: salt
size: 16
- id: stretch_key
size-eos: true
bde_metadata_entry_aes_ccm_encrypted_key:
seq:
- id: nonce_time
type: u8
doc: 'Contains a filetime'
- id: nonce_counter
type: u4
- id: aes_ccm_encrypted_key
type: aes_ccm_encrypted_key
aes_ccm_encrypted_key:
seq:
- id: aes_ctr_encrypted_cbc_mac
size: 16
- id: aes_ctr_encrypted_key
size-eos: true
bde_metadata_entry_volume_master_key:
seq:
- id: identifier
size: 16
doc: 'Contains a GUID'
- id: modification_time
type: u8
doc: 'Contains a filetime'
- id: unknown1
size: 2
- id: protection_type
type: u2
enum: protection_type
- id: volume_master_key
type: bde_metadata_entry_generic_properties
bde_metadata_entry_external_key:
seq:
- id: identifier
size: 16
doc: 'Contains a GUID'
- id: modification_time
type: u8
doc: 'Contains a filetime'
- id: external_key
type: bde_metadata_entry_generic_properties
bde_metadata_entry_offset_and_size:
seq:
- id: offset
type: u8
- id: size
type: u8
- id: unknown1 # Doesn't seems to be other copies
size-eos: true
bde_metadata_entry_generic_properties: # Like bde_metadata_entries_list
seq:
- id: properties
repeat: eos
type: bde_metadata_entry
enums:
encryption_method:
0x8000: aes_128_cbc_diffuser
0x8001: aes_256_cbc_diffuser
0x8002: aes_128_cbc
0x8003: aes_256_cbc
0x8004: aes_128_xts
0x8005: aes_256_xts
protection_type:
0x0000: clear_text
0x0100: tpm
0x0200: startup_key
0x0800: recovery_password
0x2000: password
entry_type:
0x0000: property
0x0002: volume_master_key
0x0003: full_volume_encryption_key
0x0004: validation
0x0006: startup_key
0x0007: description
0x000f: volume_header_block
value_type:
0x0000: erased
0x0001: key
0x0002: unicode_string
0x0003: stretch_key
0x0004: use_key
0x0005: aes_ccm_encrypted_key
0x0006: tpm_encoded_key
0x0007: validation
0x0008: volume_master_key
0x0009: external_key
0x000A: update
0x000B: error
0x000F: offset_and_size
meta:
id: bde_volume_header_to_go
endian: le
doc-ref: https://github.com/libyal/libbde/blob/master/libbde/bde_volume.h
doc-ref: https://github.com/libyal/libbde/blob/master/libbde/libbde_io_handle.c
types:
bitlocker_vol_togo:
seq:
- id: boot_entry_point
size: 3
- id: signature
contents: 'MSWIN4.1'
- id: bytes_per_sector
type: u2
- id: sectors_per_cluster_block
type: u1
- id: unknown1
size: 5
- id: total_number_of_sectors_16bit
type: u2
- id: media_descriptor
type: u1
- id: unknown2
size: 2
- id: sectors_per_track
type: u2
- id: number_of_heads
type: u2
- id: number_of_hidden_sectors
type: u4
- id: total_number_of_sectors_32bit
type: u4
- id: unknown3
size: 31
- id: volume_serial_number
type: u4
- id: volume_label
size: 11
type: str
encoding: ascii
- id: file_system_signature
size: 8
- id: bootcode
size: 334
- id: identifier
size: 16
doc: 'Contains a GUID'
- id: first_metadata_offset
type: u8
- id: second_metadata_offset
type: u8
- id: third_metadata_offset
type: u8
- id: unknown4
size: 46
- id: sector_signature
contents: [ 0x55, 0xAA ]
meta:
id: bde_volume_header_windows_7
endian: le
doc-ref: https://github.com/libyal/libbde/blob/master/libbde/bde_volume.h
doc-ref: https://github.com/libyal/libbde/blob/master/libbde/libbde_io_handle.c
types:
bitlocker_vol7:
seq:
- id: boot_entry_point
contents: [ 0xeb, 0x52, 0x90 ]
- id: signature
contents: '-FVE-FS-'
- id: bytes_per_sector
type: u2
- id: sectors_per_cluster_block
type: u1
- id: unknown1
size: 5
- id: total_number_of_sectors_16bit
type: u2
- id: media_descriptor
type: u1
- id: unknown2
size: 2
- id: sectors_per_track
type: u2
- id: number_of_heads
type: u2
- id: number_of_hidden_sectors
type: u4
- id: total_number_of_sectors_32bit
type: u4
- id: unknown3
size: 31
- id: volume_serial_number
type: u4
- id: volume_label
size: 11
type: str
encoding: ascii
- id: file_system_signature
size: 8
- id: bootcode
size: 70
- id: identifier
size: 16
- id: first_metadata_offset
type: u8
- id: second_metadata_offset
type: u8
- id: third_metadata_offset
type: u8
- id: unknown4
size: 310
- id: sector_signature
contents: [ 0x55, 0xAA ]
meta:
id: bde_volume_header_windows_vista
endian: le
doc-ref: https://github.com/libyal/libbde/blob/master/libbde/bde_volume.h
doc-ref: https://github.com/libyal/libbde/blob/master/libbde/libbde_io_handle.c
types:
bitlocker_vol_vista:
seq:
- id: boot_entry_point
contents: [ 0xeb, 0x58, 0x90 ]
- id: signature
contents: '-FVE-FS-'
- id: bytes_per_sector
type: u2
- id: sectors_per_cluster_block
type: u1
- id: unknown1
size: 5
- id: total_number_of_sectors_16bit
type: u2
- id: media_descriptor
type: u1
- id: unknown2
size: 2
- id: sectors_per_track
type: u2
- id: number_of_heads
type: u2
- id: number_of_hidden_sectors
type: u4
- id: total_number_of_sectors_32bit
type: u4
- id: unknown3
size: 4
- id: total_number_of_sectors_64bit
type: u8
- id: mft_cluster_block_number
type: u8
- id: first_metadata_cluster_block_number
type: u8
- id: mft_entry_size
type: u4
- id: index_entry_size
type: u4
- id: volume_serial_number
type: u8
- id: checksum
type: u4
- id: bootcode
size: 426
- id: sector_signature
contents: [ 0x55, 0xAA ]
@KOLANICH
Copy link

KOLANICH commented Nov 9, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment