破解Access(*.mdb)目前所有版本的密码
时间:2007-12-23 来源:不详 作者:迈克DB
在mdb文件第0x42字节处的13个字节分别与0x86,0xfb,0xec,0x37,0x5d,0x44,0x9c,0xfa,0xc6,0x5e,0x28,0xe6,0x13异或后即可得到数据库的密码。但在Access2000和2002的版本里密钥不再是固定的13个字节.而且加密的方式也有了变化。
经过ccrun用一下午的时间研究,终于将Access2000的加密方式搞清楚了。嘿嘿。在此将偶的心得发布。希望对大家有用,假如您发现我的理解有误,请来信告之我们。信箱:info@ccrun.com版权虽然有没有都没关系,不过假如您要转载,请注明出处,并保证文档的完整性。谢谢。
我用的分析工具是UltraEdit32v10.00,编程工具是C Builder6.0
经过用UltraEdit32分析,发现Access2000和Access2002的数据库加密方式相同,所以以下只针对Access2000的mdb文件。还有就是我用的是16进制的数表示,所以前面加了0x,假如你用的是VB或其他,要注重数值哦。
首先用AccessXP创建了一个空密码的数据库文件db1.mdb,包含一个表,其中有一个字段,没有填任何数据。保存退出然后复制一份为db2.mdb,以独占方式打开2.mdb,并加上密码1324567890123保存退出。
用UltraEdit32打开这两个数据库,并进行比较。我比较的方法也很简单。在UltraEdit32中,快速的往返点击被打开文件的选项卡(就是在两个文件间往返切换,呵呵。笨办法吧),发现从文件头开始0x42字节处发生变化。
dedecms.com
db1.mdb
00000040h:BC4EBE68EC3765D79CFAFECD28E62B25;
00000050h:8A606C077B36CDE1DFB14F671343F73C;
00000060h:B1330CF2795BAA267C2A4FE97C990513;
db2.mdb
00000040h:BC4E8F68DE3756D7A8FACBCD1EE61C25;
00000050h:B26055074B36FCE1EDB17C671343F73C;
00000060h:B1330CF2795BAA267C2A4FE97C990513;
为了看的清楚些,我把不同的字节加了颜色。看出门道了吧,Access97以后的版本里,密码字节不再是连续存放,而是隔一个字节存一个。并且经过加密。到于解密的方法嘛,还是用老办法“异或”!0xBE^0x8F=0x31,这正好是Ascii码"1"哦。下一个0xEC^0xDE=0x32正好是Ascii码"2",呵呵。一直到最后一个不同的0x4F^0x7C=0x33,将取得的字符合成字符串,便是密码明文“1234567890123",千万不要以为这样就收工了。因为这一次是正好碰对了。呵呵。我刚开始也以为就这么简单,于是用CB做了个小程序,试着解了几个mdb密码都还行,可是试到动网论坛的mdb文件时发现取出来的密码不对,晕了。于是用另外一个取mdb密码的工具看了一下,发现人家的就可以正确的取出密码,是Access2000的格式,于是感觉微软加密的方式还是没研究完。继续工作,用UltraEdit32打开动网论坛的数据库dvbbs.mdb,和我前面的加过密的数据库做比较,发现不同的地方很多。只好一个字节一个字节的试。。。。nnn次以后发现第0x62处的这个字节起着要害作用,暂称之为加密标志。
织梦内容管理系统
db1.mdb//空密码
00000040h:BC4EBE68EC3765D79CFAFECD28E62B25;
00000050h:8A606C077B36CDE1DFB14F671343F73C;
00000060h:B1330CF2795BAA267C2A4FE97C990513;
db2.mdb//密码为:1234567890123
00000040h:BC4E8F68DE3756D7A8FACBCD1EE61C25;
00000050h:B26055074B36FCE1EDB17C671343F73C;
00000060h:B1330CF2795BAA267C2A4FE97C990513;
dvbbs.mdb//密码为:yemeng.net
00000040h:BC4EDB6A893714D5F9FA8CCF4FE61927;
00000050h:E46015050F36D1E3DFB153651343EB3E;
00000060h:B13310F0795BB6247C2A4AE07C990513;
怎么试呢,还是异或。取0x42处开始的字节0xDB与空密码文件的0x42处字节异或,取0x62处的加密标志与空密码文件0x62处字节异或,然后再把取得的两个值相异或:
(0xDB^0xBE)^(0x10^0x0C)=0x79嘿嘿。这个值是Ascii的"y",然后取下一个字节(记得隔一个字节取一个)
上一篇:Oracle在win2000DOS下的启动 下一篇:SQLServer实用技巧
文章评论
共有位Admini5网友发表了评论 查看完整内容