tools software full engineering binary reverse-engineering thrift

binary - software - ¿Cómo se puede aplicar ingeniería inversa a un archivo binario de ahorro?



reverse engineering software (1)

Me han pedido que procese algunos archivos serializados como objetos binarios (no de texto / JSON desafortunadamente) Thrift , pero no tengo acceso al programa o programador que creó los archivos, así que no tengo idea de su estructura, orden de campo , etc. ¿Hay alguna manera de usar las bibliotecas Thrift para abrir un archivo binario y analizarlo, obteniendo una lista de los tipos de campo, valores, anidamiento, etc.?


Desafortunadamente, parece que el protocolo binario de Thrift no hace mucho etiquetado de datos; para decodificar parece asumir que tiene el archivo .thrift en la mano para saber, por ejemplo, que los siguientes 4 bytes se supone que son un entero, y no son en realidad la primera mitad de un flotante. Por lo tanto, parece que estás atascado, básicamente, mirando los archivos en un editor hexadecimal (o equivalente) e intentando deducir los campos en función de los patrones exactos que estás viendo.

Hay muy pocos bits útiles:

Cada archivo comienza con una versión, cadena de identificador de protocolo y número de secuencia. Los mapas comenzarán con 6 bytes que identifican la clave y los tipos de valores (los primeros dos bytes, como códigos enteros) más la cantidad de elementos como un entero de 4 bytes. Los códigos de tipo parecen ser estándar (la ubicación canónica de sus definiciones parece ser TProtocol.h en las fuentes Thrift, por ejemplo, un valor booleano se especifica mediante el código de tipo 2, cadena UTF-8 por tipo de código 16, y así sucesivamente) . Las cadenas están prefijadas por un campo de longitud entera de 4 bytes, y las listas son prefijadas por el tipo (1 byte) y una longitud de 4 bytes. Parece que todos los campos enteros se guardan big-endian, y los puntos flotantes se guardan en formato IEEE (lo que debería hacer que los dobles sean relativamente fáciles de encontrar, al menos).

Los archivos TBinaryProtocol * en Thrift tienen algunos detalles más útiles; en el lado positivo, hay varias implementaciones diferentes para que pueda leer las implementadas en el idioma con el que se sienta más cómodo.

Lo siento, sé que esto probablemente no sea tan útil, pero realmente parece que esta es toda la información que proporciona el formato binario Thrift; claramente, el formato binario se diseñó con la intención de que usted siempre supiera las especificaciones exactas del protocolo, y que el objetivo era minimizar el espacio de cables, en lugar de hacerlo fácil de descifrar a ciegas.