binary - Herramientas para ayudar a aplicar ingeniería inversa a formatos de archivo binarios
reverse-engineering file-format (8)
Aquí hay algunos consejos que te vienen a la mente:
Desde mi experiencia, los lenguajes de scripts interactivos (uso Python) pueden ser de gran ayuda. Puede escribir un marco simple para tratar secuencias binarias y algunos algoritmos simples. Luego puedes escribir scripts que tomarán tu binario y verán varias cosas. Por ejemplo:
Haga un análisis estadístico en varias partes. Los datos aleatorios, por ejemplo, le dirán que esta parte probablemente esté comprimida / encriptada. Ceros puede significar relleno entre partes. Los ceros dispersos pueden significar valores enteros o cadenas Unicode, etc. Intenta detectar varias compensaciones. Trate de convertir partes del binario en enteros de 2 o 4 bytes o en flotantes, imprímalos y vea si lo hacen. Escriba algunas funciones que buscarán partes repetitivas o muy similares en los datos, de esta manera usted puede detectar fácilmente los encabezados.
Intente encontrar tantas cadenas como sea posible, pruebe diferentes codificaciones (cadenas de caracteres, cadenas pascales, utf8 / 16, etc.). Hay algunas buenas herramientas para eso (creo que Hex Workshop tiene una herramienta de este tipo). Las cadenas pueden decirte mucho.
¡Buena suerte!
¿Qué herramientas están disponibles para ayudar a decodificar formatos de datos binarios desconocidos?
Sé que Hex Workshop y 010 Editor son estructuras de soporte. Estos están bien hasta cierto punto para un formato fijo conocido, pero se vuelven difíciles de usar con algo más complicado, especialmente para formatos desconocidos. Supongo que estoy buscando un módulo para un lenguaje de scripting o una herramienta GUI con script.
Por ejemplo, me gustaría poder encontrar una estructura dentro de un bloque de datos a partir de información limitada y conocida, tal vez un número mágico. Una vez que haya encontrado una estructura, siga las palabras conocidas de longitud y desplazamiento para encontrar otras estructuras. Luego repítelo recursiva e iterativamente donde tenga sentido.
En mis sueños, tal vez incluso identifique automáticamente las compensaciones y longitudes basadas en lo que ya le dije al sistema.
Hay Hachoir que es una biblioteca de Python para analizar cualquier formato binario en campos y luego examinar los campos. Tiene muchos analizadores para formatos comunes, pero también puede escribir sus propios analizadores (por ejemplo, cuando se trabaja con código que lee o escribe archivos binarios, generalmente escribo un analizador Hachoir primero para tener un asistente de depuración). Parece que el proyecto está bastante inactivo por ahora, sin embargo.
Mi propia herramienta "iBored", que publiqué recientemente, puede hacer parte de esto. Escribí la herramienta para visualizar y depurar los formatos del sistema de archivos (UDF, HFS, ISO9660, FAT, etc.) e implementé la búsqueda, copia e incluso la estructura y el soporte de plantillas. El soporte de la estructura es bastante directo, y las plantillas son una forma de identificar estructuras dinámicamente.
Todo es programable en un dialecto Visual BASIC, lo que le permite probar valores, leer bloques específicos y todo.
La herramienta es gratuita, funciona en todas las plataformas (Win, Mac, Linux), pero como es una herramienta personal que acabo de lanzar al público para compartirla, no está muy documentada.
Sin embargo, si desea probarlo y desea dar su opinión, es posible que agregue más funciones útiles.
Incluso abriría el código fuente, pero como está escrito en REALbasic , dudo que mucha gente se una a ese proyecto.
Enlace: iBored
Mi proyecto icebuddha.com admite esto usando python para describir el formato en el navegador.
Para Mac OS X, hay una nueva gran herramienta que es incluso mejor que mi iBored: ¡Synaliyze It! ( http://www.synalysis.net/ )
En comparación con iBored , es más adecuado para archivos no bloqueados, al tiempo que proporciona un control total sobre las estructuras, incluida la capacidad de escritura (con Lua). Y visualiza mejor las estructuras también.
Todavía uso ocasionalmente un viejo editor hexadecimal llamado AX, Advanced Hex Editor. Parece que ha desaparecido en gran parte de Internet ahora, aunque Google aún debería poder encontrarlo para usted. La última versión que conozco es la versión 3.4, pero realmente solo he usado la versión 2.1 de uso libre para uso personal.
Su característica más interesante, y la que he tenido más uso para descifrar varios juegos y gráficos, es su modo de vista gráfica. Eso básicamente solo muestra el archivo con cada byte convertido en un píxel codificado por color. Y tan simple como eso suena, a veces ha hecho que mis intentos de ingeniería inversa sean mucho más fáciles.
Supongo que hacerlo a ojo es todo lo contrario de hacer un análisis automático, sin embargo, y el modo gráfico no será de mucha utilidad para encontrar y seguir las compensaciones ...
La versión posterior tiene algunas características que parecen ajustarse a sus necesidades (scripts, buscador de regularidad, generador de gramática), pero no tengo idea de lo buenos que son.
Una cortada de mi respuesta a una pregunta similar:
Una herramienta es WinOLS , que está diseñada para interpretar y editar imágenes binarias de la computadora del motor del vehículo (principalmente los datos numéricos en sus tablas de búsqueda). Tiene soporte para varios formatos endian (aunque no PDP, creo) y visualización de datos en varios anchos y desplazamientos, definición de áreas de matriz (mapas) y visualización en 2D o 3D con todo tipo de escala y opciones de desplazamiento. También tiene un buscador automático de mapas heurístico / estadístico, que podría funcionar para usted.
Es una herramienta comercial, pero la demo gratuita le permitirá hacer todo excepto guardar los cambios en el binario y utilizar las funciones de administración del motor que no necesita.
Tupni ; que yo sepa, no está directamente disponible en Microsoft Research, pero hay un documento sobre esta herramienta que puede ser de interés para alguien que quiera escribir un programa similar (tal vez de código abierto):
Tupni: ingeniería inversa automática de formatos de entrada ( biblioteca digital @ ACM )
Abstracto
Trabajos recientes han establecido la importancia de la ingeniería inversa automática del protocolo o las especificaciones de formato de archivo. Sin embargo, los formatos diseñados por ingeniería inversa mediante herramientas anteriores han omitido información importante que es crítica para las aplicaciones de seguridad. En este artículo, presentamos Tupni, una herramienta que puede aplicar ingeniería inversa a un formato de entrada con un amplio conjunto de información, que incluye secuencias de registros, tipos de registros y restricciones de entrada. Tupni puede generalizar la especificación de formato en múltiples entradas. Hemos implementado un prototipo de Tupni y lo evaluamos en 10 formatos diferentes: cinco formatos de archivo (WMF, BMP, JPG, PNG y TIF) y cinco protocolos de red (DNS, RPC, TFTP, HTTP y FTP). Tupni identificó todas las secuencias de registro en las entradas de prueba. También demostramos que, al agregar varios archivos WMF, Tupni puede derivar una especificación de formato más completa para WMF. Además, demostramos la utilidad de Tupni al utilizar la rica información que proporciona para la generación de firmas de vulnerabilidad de día cero, que no fue posible con las herramientas de ingeniería inversa anteriores.