Definiendo estructuras de datos desconocidas

kaitai_srtuct.png

Cuando tenemos que enfrentarnos a ficheros binarios del tipo ELF, PE, etc, o cualquier otro tipo de fichero cuya estructura es conocida, es “relativamente fácil” extraer mucha información sobre los mismos. Cuando tenemos que lidiar con ficheros o simplemente datos binarios (paquetes de datos de red, datos en memoria, etc) cuya estructura es desconocida, es prácticamente imposible extraer información útil, a menos que le demos forma a los datos de forma que tenga sentido.

Una herramienta que está teniendo bastante atracción últimamente en esta área es Kaitai Struct. Ésta, según su propia definición es un lenguaje declarativo usado para describir estructuras de datos binario, paquetes de red, etc. El proyecto es Open Source, e incluyo un compilador (más bien transpilador), visualizador y algunos ejemplos.

La definición de un formato específico se expresa en el lenguaje Kaitai Struct (se usa la extensión de fichero .ksy). Éste después es “transpilado” (vaya palabra más fea) por withksc  en código fuente de alguno de los lenguajes soportado: C++/STL, C#, Java, JavaScript, Perl, PHP, Python o Ruby, (más en el futuro).

Si todo esto es nuevo para ti, en Avatao tienes un pequeño curso introductorio con varios retos a resolver.

En el wiki del proyecto también tienes algunos tutoriales. Para empezar deberías mirarte la documentación oficial.

También tienes la posibilidad de jugar con esta herramienta online.