Extracción de datos (Jugando a ser forense informático)

n1x3r

Buenas noches, estoy intentando extraer una base de datos de un programa, el cual te permite copiarla pero el "hp" casca cuando extraes más de 5000 lineas, y no me deja copiar por tramos.
En fin que intentando lo imposible intento sacar la encriptación que usa y la clave o extraer desde memoria los datos sin encriptar.

Esquema:

.exe -> carga db.bin -> decodifica los datos y lo carga en memoria

He conseguido extraer los datos directamente desde un memory dump pero no tienen un orden aparente y no puedo usarlos.
He usado programas como Cheatengine o HxD hex editor, que te permiten trastear con la memoria pero creo que tirar por esa rama es meterte en una madriguera de la cual no se si saldré.

Necesitaría:
Opción 1: Decompilar el código ya compilado en Visual C++ 6.0 en algo que pueda leer y procesar que no sea ensamblador, pudiendo extraer el sistema de encriptado y la clave.

Opción 2: Inyectar código en el programa y poder hacer un volcado de las variables y poder obtener así la estructura de array o de como sea que este guardado en memoria.

Opción 3: Algún guru que sepa de ensamblador que sea capaz de sacar el sistema de encripctación y la clave. Para poder asi cargar la db desencriptarla y poder volcarla en algo que pueda manejar como json xml etc

¿Existe alguna otra opción?¿Alguna aplicación mágica que me pueda servir?

He probado:
IDA Pro (Ensamblador)
HxD Hex Editor (Editor hex de procesos en memoria)
Cheat engine (Diseñado para inyectar y cambiar valores directamente en memoria)
Muchos otros más.

Un saludo.

AikonCWD

Me interesa, al menos intentarlo. Pasame por MP o algo el programa y esa bd. Con IDA debería poder llegar a la rutina. Sobre ensamblador estoy curtido, no soy experto pero me defiendo.

1
Baltar

En código ensamblador puedes tener la suerte de tener acceso un posible buffer de memoria lo suficientemente grande para guardar un volcado de memoria desencriptado. Busca y filtra por instrucciones de escritura en memoria (suelen usar corchetes y los registros DX, EX, BP, SP asi como el de indice de programa)

Coloca el punto de interrupción en el que veas mas probable y observa como se rellena esa zona de memoria con un "watch". Deberías captar algo con sentido en el depurador.

Suerte :D

1 respuesta
n1x3r

#3 SI, lo capto pero hablamos de una base de datos de unas pocas miles de lineas, y los datos no están grabados de forma seguida y con estructura aparente. Lo encontré buscando directamente string en memoria, la forma que me comentas para mi es chino mandarín

n1x3r

Jugando un poco con IDA pro y el plugin Find Crypt me tira lo siguiente:
439058: found const array CRC32_m_tab (used in CRC32)
43B268: found const array zinflate_lengthExtraBits (used in zlib)
43B2DC: found const array zinflate_distanceExtraBits (used in zlib)

¿Puede ser que los datos estén simplemente comprimidos?

Usuarios habituales

  • n1x3r
  • Baltar
  • AikonCWD