.NET support for Kaitai Struct
Kaitai Struct is a file deconstruction tool and Domain Specific Language. The goal is to make reverse engineering file formats easier by describing the format of the filetype in a human-readable interface. The language is just YAML, but structured in a clever way.
For instance, the Quake PAK format can be described as
meta:
id: quake_pak
file-extension: pak
application: Quake game engine
license: CC0-1.0
endian: le
doc-ref: 'https://quakewiki.org/wiki/.pak#Format_specification'
seq:
- id: magic
contents: 'PACK'
- id: ofs_index
type: u4
- id: len_index
type: u4
instances:
index:
pos: ofs_index
size: len_index
type: index_struct
types:
index_struct:
seq:
- id: entries
type: index_entry
repeat: eos
index_entry:
seq:
- id: name
type: str
size: 56
encoding: UTF-8
terminator: 0
pad-right: 0
- id: ofs
type: u4
- id: size
type: u4
instances:
body:
pos: ofs
size: size
io: _root._io
This can then be compiled into source for multiple different target platforms, such as Python, Java, Ruby, or C#.
I implemented a C# version of the underlying byte-consumer engine which was able to handle most cases. This was quickly reimplemented using a different approach, but much of my original work was getting the project’s .NET support stood up.