Access(*.mdb)数据库解密
怎么试呢,还是异或。取0×42处开始的字节0xDB与空密码文件的0×42处字节异或,取0×62处的加密标志与空密码文件0×62处字节异或,然后再把取得的两个值相异或:
(0xDB^0xBE)^(0×10^0×0C)=0×79 嘿嘿。这个值是Ascii的”y”,然后取下一个字节(记得隔一个字节取一个)
(0×89^0xEC)^(0×10^0×0C)=0×79 咦,本来这个字节应该是”e”的,怎么变成”y”了?试着不与后面的两个异或值相异或,只计算0×89^0xEC=0×65 得到”e”,哈。这下对了。下一个
(0×14^0×65)^(0×10^0C)=0×6D 得到”m”,下一个
(0xF9^9C)=0×65 得到”e”,注意这里只是这两个数异或。后面的大家可以自己试。
这样就总结出规律来了。
解密时,先取出加密文件从文件头开始0×62处的字节,与空密码数据库文件第0×62处相异或,得到一个加密标志。
再从0×42处开始每隔一个字节取一个字节,取得13个加密后的密码字节,分别与空密码数据库文件0×42处每隔一个字节取得的13个字节想异或,得到13个密码半成品。为什么说是半成品呢,因为还要将13个字节的密码每隔一个字节,就与加密标志相异或,最后得到的13个字节才是真正的密码。当然,如果中间有0×0的字节,则说明密码位数不够13位。直接show出来就可以了。
另外我发现加密标志会随着时间或机器不同而不同,所以也没有万能的,不过有一个参照的就可以了。以下代码是我在写这个程序的时候取得的数,和我写这篇文章不是一个时间,所以数值不一样,但最终解密的结果是一样的。大家可以参考一下。
取0×14处的字节,如果为0就判断为是Access97。

