Pregunta:
Análisis / rescate de la base de datos de IDA dañada
Dominik Antal
2014-01-13 23:11:10 UTC
view on stackexchange narkive permalink

Estoy revirtiendo una aplicación con IDA. Mi máquina virtual falló y dejó la base de datos IDA en un estado descomprimido corrupto.

La próxima vez que intenté volver a cargarlo, IDA me dio el siguiente mensaje de error: La base de datos de entrada está dañada: CRC32 mistmatch. ¿Continuar? unas cuantas veces, luego se cierra con el error bTree error: index file is bad . Buscar en Google estos mensajes de error no arrojó resultados útiles, lo cual es inusual.

Me gustaría restaurar la base de datos, o al menos extraer los datos de alguna manera.

Ya intenté lo siguiente:

  • Zynamics bindiff (no pude abrir el BID, dijo que probablemente esté abierto en otra instancia de IDA, lo que supongo que es un resultado de los datos dañados)
  • Diferencia hexadecimal manual: simplemente no puedo interpretar la salida.

En este punto, estoy pensando en analizar el IDB y luego diferenciar ese resultado manualmente.

Entonces, ¿cómo puedo analizar / extraer datos de archivos IDB?

Relacionados .

En tal caso, lo primero que haría es: cancelar. Después de eso, tomaría una copia de seguridad del IDB empaquetado y desempaquetado y luego procedería con cualquiera de las opciones que ofrece IDA y luego retrocedo y uso la otra opción si la primera no funciona. Si su máquina virtual falla, es probable que el estado de la base de datos esté en un estado inconsistente, por lo que lo mejor es ponerse en contacto con `support@hex-rays.com`. De lo contrario, puede utilizar el SDK y el libro IDA para averiguar los detalles del formato BID y extraer los detalles que puede recuperar.
@0xC0000022L ¿Existe alguna herramienta pública para analizar los BID que conoce?
No tengo conocimiento de ninguno, no.
http://www.openrce.org/forums/posts/917
@VitalyOsipov: Me encuentro en esta situación de vez en cuando. Y si bien tiene sentido solicitar soporte a Hex-Rays, también tiene sentido preguntar sobre una clave pública. Por ejemplo, podría ser que el BID contenga datos sensibles que no deben llegar a ningún tercero bajo ninguna circunstancia. Así que creo que, independientemente de los antecedentes, es una pregunta válida y valiosa. Por mi parte, espero ver una respuesta que apunte a dicha herramienta disponible públicamente. Incluso si solo puede saciar mi apetito por la curiosidad sobre el formato del BID sin profundizar en `netnode.hpp`;)
Si alguien da una respuesta que apunta a una herramienta de código abierto que está disponible públicamente, lo recompensaré con 150 puntos de reputación adicionales además de la recompensa de Dominik.
La mejor persona para responder a esto es el propio Ilfak G.
Ilfak siempre responde muy rápido. Póngase en contacto con él, probablemente le pedirá su archivo idb y (cuando me pase algo como esto) recibirá el parche en varios días. Además, _siempre_ mantenga una copia de seguridad.
@Stolas Esta es una situación retorcida, porque estoy obligado por un contrato, no puedo entregar dicho BID a nadie.
@DominikAntal Aún así, recomendaría contactarlo y explicarle la situación. Pero continuemos en el chat sobre este tema. Como esta no es la ubicación correcta para hablar de esto.
No sé las razones cercanas (y los requisitos) aquí, pero si OP ya no tiene este problema (ha pasado un año), ¿debería cerrarse?
No encontré una solución a este problema.
Tres respuestas:
Willem Hengeveld
2017-06-27 11:13:49 UTC
view on stackexchange narkive permalink

Publiqué algunas herramientas en github que pueden hacer precisamente eso: https://github.com/nlitsme/pyidbutil y https://github.com/nlitsme/idbutil. El primero está escrito en python, el segundo en C ++, ambos tienen una funcionalidad similar.

pyidbutil proporciona las opciones de recuperación de nivel más bajo: usando --pagedump puede volcar cada página en el archivo sin la necesidad de una estructura de archivo lógica intacta.

¡Ha llegado el héroe que necesitábamos! :)
Vale la pena señalar que también hay una nueva herramienta / marco para trabajar con archivos IDB: https://github.com/williballenthin/python-idb
pfalcon
2015-04-18 23:52:41 UTC
view on stackexchange narkive permalink

Lamentablemente, no puedo responder qué hacer cuando su base de datos ya está dañada. Esa es la naturaleza de las bases de datos binarias patentadas: si está bloqueado, debe conservar todas las piezas.

Pero puedo sugerirle que debe prever y estar preparado para la corrupción de la base de datos IDA, que es inminente y le pasa tarde o temprano a casi todo el mundo. Entonces:

  1. Prefiera usar una base de datos descomprimida (menos errores que se activen en IDA).
  2. Haga una copia de seguridad de los archivos de la base de datos binaria con anticipación y con frecuencia.
  3. su base de datos como un archivo IDC temprano y con frecuencia (Archivo -> Producir archivo -> Volcar la base de datos al archivo IDC).

Preste especial atención al paso 3: un archivo IDC es su boleto de salida Jardín amurallado IDA. Se sabe que no contiene toda la información que IDA almacena en la base de datos, pero tiene la más importante, y es un archivo de texto que puede volver a importar a IDA para reiniciar el análisis con solo un archivo ejecutable, o procesar con una secuencia de comandos simple para filtrar los datos necesarios, etc.

En general, el problema de la corrupción de la base de datos sólo se puede resolver con una herramienta abierta que utilice la base de datos en formato abierto. Como un complemento descarado, trabajo en un desensamblador interactivo que almacena la base de datos en un formato de texto simple: ScratchABit. Tarde o temprano, se escribirá el script de importación IDC para él.

Jeromy Adofo
2016-10-09 13:15:04 UTC
view on stackexchange narkive permalink

En mi caso, el error fue " Error de lectura: leer más allá del final del archivo (posición del archivo 0x0, quería 0x20X bytes, leer 0x0 ".

Después de probar cosas diferentes para un tiempo, me di cuenta de que los archivos de base de datos .id2, .nam y .til desempaquetados tenían un tamaño de 0 KB. Al abrir el mismo archivo ejecutable como una nueva base de datos, los archivos asociados .id2, .nam y .til tenían tamaños definidos .

Lo que hice fue reemplazar el archivo .til de la base de datos dañada con el archivo .til de la nueva base de datos . La base de datos se abrió y los puntos de interrupción estaban intactos.

El único problema fue que la ventana de nombres se quedó vacía. Sin embargo, al mirar a través de la base de datos, me di cuenta de que los nombres que había ingresado manualmente todavía estaban allí, pero estaban en texto gris. Sin embargo, en esta etapa, no estaría difícil recuperar los nombres usando un script ya que los nombres y sus direcciones son parte del texto de la base de datos .



Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...