Vamos a ver qué enfoque le damos a
esto.
Sabemos que la contraseña se guarda encriptada a partir de la
posición 0x42 del fichero. El Access, al abrir una base de datos,
debe mirar si tiene contraseña de acceso para pedírsela al
usuario. Tal y como hemos visto, las únicas diferencias entre una
base de datos con contraseña y la misma sin ella son las posiciones
que ocupa la contraseña encriptada (aparte de la posición
0x600, que como hemos visto, parece no afectar).
El fichero no varía de longitud, aunque las contraseñas
utilizadas sean más o menos largas, señal de que las contraseñas
son almacenadas en un espacio reservado para ellas dentro del archivo,
que no es reutilizado para otra cosa cuando no existe contraseña.
Lógicamente, si restauramos en 'bd2.mdb' los valores que
tiene 'bd1.mdb' en las posiciones 0x42 a 0x45, la base de datos
'bd2.mdb' queda desprotegida. Igual ocurre si hacemos lo mismo con
'bd3.mdb'. Podemos probarlo con el editor hexadecimal.
Tal y como se dijo anteriormente, se puede suponer que los ficheros
de Access disponen de estas catorce posiciones para almacenar la contraseña
de acceso encriptada si ésta existe, y si no, guarda algo que, una
vez desencriptado, debe indicarle a Access que esa base de datos no tiene
contraseña de acceso. Este "algo", en 'bd1.mdb', es la cadena
de catorce bytes, que comienza en la posición 0x42:
86 FB EC 37 5D 44 9C FA C6 5E 28 E6 13 B6
Este "algo" encriptado, ¿será lo mismo para todos los
archivos de Access sin contraseña de acceso? Vamos a buscarnos un
par de bases de datos (*.mdb) ya existentes por nuestro disco duro, y nos
aseguramos que no tienen contraseña de acceso abriéndolas
con el Access. Abrimos varios archivos con nuestro editor hexadecimal y
comparamos a partir de la posición 0x42 el contenido con esta cadena.
Todas tienen esta cadena, ¿verdad?.
Pues sí, acabamos de encontrar la forma de abrir un archivo de
Access con contraseña de acceso desconocida. No tenemos mas que
escribir a partir de la posición 0x42 la cadena anteriormente citada.
Para finalizar la primera parte de este proyecto, se incluye un ejemplo
de programa en ensamblador para Windows que realiza esta tarea. Es recomendable
su estudio y comprensión ya que algunas de las funciones de la API
que utiliza serán de vital importancia para la segunda parte.
En cuanto a la variación en la posición 0x600 de los ficheros,
lo que Access 97 parece almacenar aquí no es más que un contador,
en donde almacena el número de veces que se ha cambiado la contraseña
de la base de datos, empezando la cuenta por 0x12.
.... era una raza muy atrasada ....
.... al borde del siglo XXI aún utilizaban aplicaciones Micro$oft
...
|