Ingeniería inversa de formatos de archivo desconocidos con ImHex

Fuentes: Reverse Engineering Unknown File Formats with ImHex

WerWolv, desarrollador del editor hexadecimal ImHex, publica un tutorial paso a paso para reconstruir el formato binario del archivo de guardado del videojuego FEZ (Polytron, 2012) sin documentación previa. El proceso parte de un fichero sin firma mágica, sin comprimir y sin cifrar, guardado en /home/usuario/.local/share/FEZ/SaveSlot2, y combina tres herramientas: ImHex para visualizar y anotar los bytes, JetBrains Rider para descompilar el juego escrito en C#/.NET, y el Pattern Language propio de ImHex para describir la estructura.

El artículo muestra cómo localizar las funciones de lectura y escritura dentro de FezEngine.dll, ContentSerialization.dll y EasyStorage.dll, identificar el método Save de la clase PCSaveDevice y rastrear la serialización hasta WriteFileOperations.Write(). A partir de ahí se reconstruyen campos como un timestamp en formato Windows File Time (entero little-endian de 64 bits basado en intervalos de 100 ns desde 1601), listas de pares clave-valor, objetos opcionales precedidos por un bool de presencia, y cadenas en formato 7BitEncodedInt de .NET. También se aprovechan atributos del Pattern Language como [[fixed_size(0xA000)]] para documentar el tamaño fijo del archivo.

El texto, publicado en el blog del proyecto, está pensado como introducción práctica para quienes necesiten dar sentido a binarios propietarios y quieran aprender a escribir definiciones reutilizables en ImHex, disponible de forma gratuita y de código abierto en Windows, macOS, Linux y navegador.