Pregunta

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 " analizar y deserializar el contenido binario de un archivo con formato desconocido?

¿Fue útil?

Solución

Pruebe estos:

  1. Deserializar datos : analiza cómo compiló tu exe (prueba File Analyzer ). Intente deserializar los datos binarios con el lenguaje descubierto. Luego, serialícelo en un formato xml (independiente del idioma) que cada lenguaje de programación pueda entender
  2. Analice los datos binarios : intente guardar varias versiones del archivo con poca variación y use 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. Ingeniería inversa de la aplicación : intente obtener código utilizando herramientas de ingeniería inversa para el lenguaje de programación utilizado para compilar la aplicación (que se encuentra con Analizador de archivos ). De lo contrario, utilice la herramienta de análisis de desensamblador como IDA Pro Disassembler

Otros consejos

Para mi proyecto de pasatiempo tuve que aplicar ingeniería inversa a algunos archivos de juegos antiguos. Mis enfoques fueron:

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

La ingeniería inversa de un archivo binario cuando tienes una idea de lo que representa es un proceso que lleva mucho tiempo. Si no tienes idea de qué es, 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 oriente en la dirección de lo que se supone que representa el archivo. A partir de ahí, Google " Archivos binarios de ingeniería inversa " ;, hay mucha más gente conocedora que yo que ha escrito guías al respecto.

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

Si los datos representan objetos Delphi serializados, debe 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 aquí .

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. Luego, puede acceder a esos objetos desde cualquier idioma.

He desarrollado Hexinator (Window & amp; Linux) y Synalyze It! (macOS) exactamente para este propósito. Estas aplicaciones le permiten ver los archivos binarios como en otros editores hexadecimales, pero además puede crear una "gramática". con los detalles de un formato de archivo binario. La gramática contiene todos los componentes básicos y se utiliza para analizar el archivo automáticamente.

Por lo tanto, puede mantener el conocimiento que obtiene en el análisis y aplicarlo a varios archivos simultáneamente. También puede codificar por colores los bits y fragmentos de formatos de archivo para obtener una descripción general rápida en el editor hexadecimal. Captura de pantalla de Synalyze It! Pro Los resultados del análisis se muestran en una vista de árbol donde también puede modificar los archivos fácilmente (aplicando endianness, etc.).

El archivo '' de Unix '' El comando es realmente útil: no sé si hay algo parecido en Windows. Lo ejecutas así:

file myfile.ext

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

Probablemente esté contenido en cygwin .

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 se almacenan 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 desee repetir eso con el software que se ejecuta en diferentes entornos, para ver si la versión del sistema operativo, etc., está almacenada, pero esto es bastante inusual.
  • A continuación, puede intentar cambiar variables individuales y crear varios archivos que solo difieran en el valor de esta variable. Esto le ayuda a identificar dónde se almacena esta variable.
  • De esa forma también puede excluir variables que no están almacenadas en el archivo: si las cambia, 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 lo olvide y busque otra forma de resolver su problema. Hay una probabilidad muy alta de que sea más rápido ...

Si el file no da una respuesta significativa, puede intentar TRiD de Marco Pontello para determinar si sus datos se almacenan en un formato conocido.

¿Conoces el programa que lo usa? Si es así, puede conectar los programas que escriben en la función de archivo y tener una idea de qué datos está escribiendo, el tamaño de los datos y dónde.

Más información: http://www.codeproject.com/KB/DLL/ Win32APIHooking_Trouble.aspx

Obtenga la aplicación Delphi y ábrala en versión gratuita IDA Pro , y encuentre dónde escribe el archivo, y decodifique cómo escribe el archivo de esa manera.

A menos que sea texto del plan.

A diferencia de los editores hexadecimales tradicionales que solo muestran los bytes hexadecimales sin procesar 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 entender y editar que usar solo los bytes hexadecimales sin procesar.

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

Intenta abrirlo en un editor hexadecimal y analiza.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top