usar texto que los leer hacen guardar como binarios binario archivos archivo binary reverse-engineering serialization code-analysis

binary - texto - leer archivos binarios linux



Cómo analizar archivos binarios? (13)

Tengo un archivo binario. No sé cómo está formateado, solo sé que proviene de un código Delphi.

¿Existe alguna forma de analizar un archivo binario?

¿Existe algún "patrón" para analizar y deserializar el contenido binario de un archivo con formato desconocido?


¡He desarrollado Hexinator (Window & Linux) y Synalyze It! (macOS) exactamente para este propósito. Estas aplicaciones le permiten ver los archivos binarios como en otros editores hexadecimales, pero también puede crear una "gramática" con los detalles de un formato de archivo binario. La gramática contiene todos los bloques de construcción y se usa para analizar el archivo automáticamente.

De este modo, puede mantener el conocimiento que obtiene en el análisis y aplicarlo a múltiples archivos simultáneamente. También puede codificar por colores los bits y partes de los formatos de archivo para una descripción general rápida en el editor hexadecimal. Los resultados del análisis se muestran en una vista de árbol donde también puede modificar los archivos fácilmente (aplicando endianness, etcétera).



A diferencia de los editores hexadecimales tradicionales que solo muestran los bytes hexadecimales crudos de un archivo, 010 Editor también puede analizar un archivo en una estructura jerárquica utilizando una Plantilla binaria. Los resultados de ejecutar una Plantilla Binaria son mucho más fáciles de comprender y editar que usar solo los bytes hexadecimales crudos.

http://www.sweetscape.com/010editor/


El comando "archivo" de unix es realmente útil; no sé si hay algo así en Windows. Lo ejecuta así:

file myfile.ext

Y escupe una descripción de texto basada en los números mágicos y los datos contenidos en ella.

Probablemente está contenido dentro de cygwin .


El programa "strings" de binutils de GNU es muy útil. Imprimirá las cadenas de caracteres imprimibles en un archivo, a menudo dando una pista de lo que contiene un archivo o un programa.


Intenta abrirlo en un editor hexadecimal y analiza.


Invertir la ingeniería de un archivo binario cuando tienes una idea de lo que representa es un proceso muy lento. Si no tienes idea de lo que es, entonces será aún más difícil.

Sin embargo, es posible, pero debes tener una buena razón para hacerlo.

El primer paso sería abrirlo en un editor hexadecimal de su elección y ver si puede encontrar algún texto en inglés que lo dirija en la dirección de lo que se supone que el archivo representa. A partir de ahí, Google "Invertir archivos binarios de ingeniería", hay personas mucho más conocedores que yo que tienen guías escritas al respecto.



Para mi proyecto de hobby, tuve que aplicar ingeniería inversa a algunos archivos antiguos del juego. Mis enfoques fueron:

  • Ten un buen editor hexadecimal.
  • Busque palabras legibles en el archivo binario. Observe cómo es su distribución. Si la distancia entre ellos es constante, sabrá que es una lista.
  • Busque 2-3 ceros consecuentes. Podría indicar un valor int32.
  • Algunos dwords pueden ser punteros en el archivo.
  • Intente identificar patrones recurrentes en el archivo.
  • Ver lotes de C0-CF podría indicar datos comprimidos RLE.

Prueba estos:

  1. Deserializar datos : analiza cómo se compila tu exe (prueba File Analyzer ). Intenta deserializar los datos binarios con el lenguaje descubierto. A continuación, serialícelo en un formato xml (independiente del idioma) que todo lenguaje de programación pueda comprender
  2. Analice los datos binarios : intente guardar varias versiones del archivo con poca variación y utilice un programa diff para analizar el significado de cada bit con un editor hexadecimal. Úselo junto con técnicas de piratería binaria (como Cómo descifrar un formato de archivo binario por Frans Faase )
  3. Invertir el ingeniero de la aplicación : intente obtener el código utilizando herramientas de ingeniería inversa para el lenguaje de programación utilizado para crear la aplicación (se encuentra con el Analizador de archivos ). De lo contrario, utilice la herramienta de análisis de desensamblador como IDA Pro Desensamblador

Si los datos representan objetos Delphi serializados, debería comenzar a leer sobre el proceso de serialización Delphi. Si ese es el caso, creo que su mejor opción sería cargarlo usando Delphi y continuar su análisis desde el IDE. Algunas informaciones sobre la serialización de Delphi se pueden encontrar here .

EDITAR: si el archivo contiene objetos delphi serializados, entonces debe escribir un pequeño programa delphi que lo cargue, y "convertir" los datos usted mismo a algo neutral, como xml. Si logra hacer esto, debe verificar y ver si delphi admite la serialización a xml. Entonces, puedes acceder a esos objetos desde cualquier idioma.


Si tiene acceso a la aplicación que crea el archivo, puede aplicar cambios a la aplicación, luego guardar el archivo y ver los efectos (tenga en cuenta que los números probablemente estén almacenados en little endian ):

  • Primero crea el archivo repetidamente. Si los archivos no son binarios iguales, la fecha / hora actual probablemente se almacena en el área donde ocurren las diferencias.
  • Tal vez quiera repetir eso con el software ejecutándose en diferentes entornos, para ver si se almacena la versión del sistema operativo, etc., pero esto es bastante inusual.
  • A continuación, puede intentar cambiar variables individuales y crear varios archivos que solo difieren en el valor de esta variable. Esto lo ayuda a identificar dónde se almacena esta variable.
  • De esta forma, también puede excluir variables que no están almacenadas en el archivo: si las modifica, pero los archivos creados son idénticos, no se almacenan.

Para probar las hipótesis que resolvió con los pasos anteriores, edite uno de los archivos y haga que la aplicación lo lea.

Si no tiene acceso a la aplicación en sí, le sugiero que la olvide y encuentre otra manera de resolver su problema. Hay una gran probabilidad de que sea más rápido ...


Si el file no da una respuesta significativa, es posible que desee probar TRiD por Marco Pontello para determinar si sus datos están almacenados en un formato conocido.