精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VB和Basic>>〓〓...数据库技术...〓〓>>access2000数据库的解密!

主题:access2000数据库的解密!
发信人: zrsoft()
整理人: fishy(2000-04-07 21:40:03), 站内信件
以下内容来自“峥嵘软件室”http://zrsoft.8u8.com
Access2000数据库的解密

    与Access97相比,Access2000的数据库的密码增至20位(97为13位),而且

加密方式略有不同,它的密码存放在从第67字节开始的40个字节中。为什么20位

的密码占用了40个字节呢?因为Access2000的每个密码占用两个字节,但是不要

怕,虽然占用了两个字节,但是其中有用的还是第一个字节,也就是说,我们只

要处理其中的一半就可以了。和Access97一样的是,Access2000的加密仍然用的

是异或的方法,说了这么多,还是先来看一下解密的思路吧。

    先用Access2000创建一个新的库,库里有没有内容都无所谓,命名为DB1即可

;然后再创建一个新库,并且对它进行加密,密码任意(最好采用最大长度—20

位),只要你能记住就可以了(费话,密码当然自己能够刻记得)。现在已经有

了两个库,一个是加了密的,一个是没有加密的,我们只需要用一个最简单的DO

S命令,就可以查看出沱们二者之间的不同。做法是退到DOS状态,输入命令:FC

/B DB1.MDB DB2.MDB|MORE,我们会发现,从第42字节(十六进制)开始,下面有

若干字节不同,而且都是隔了一个字节,这就是我们所要找的密码了。我们把DB

1数据库(没有加密的)的从42字节开始的几个字节记住供以后使用,如果我没记

错的话,它们应该是:50、EC、8B… …,不过要注意,我这里所说的,均是十六

进制的。

    罗嗦了半天,到底是如何进行异或加密的呢?举个例子吧,我们现在只加了

一位密码“1”, “1”的ASCII码是49,十六进制是31,用它与没有加密时的字

串中的第一个字节进行异或,得到一个数61(十六进制数),即为密码位,不信

?你可以试一下。反过来,如果发现密码位是61,那到让它与50进行展异或,得

到31,即为字符“1”。以下依此类推即可求出多达20位的密码了。

    下面我将自己的心得写成了一段小程序,在此奉献给大家,也可以直接下载

可源程序和可执行文件:

    此程序用VC编制,具体如何操作VC,在此不做过多说明,我只把其中的一段

核心程序说一下。

HFILE hFile;

OFSTRUCT ofs;

unsigned char temp[40];

int Source[21]; //存放没有加密时的几个字节的内容

char Password[21]; //用于存放密码

Source[0] = 0x50;

Source[1] = 0xec;

Source[2] = 0x8b;

Source[3] = 0x9c;

Source[4] = 0x10;

Source[5] = 0x28;

Source[6] = 0xc5;

Source[7] = 0x8a;

Source[8] = 0x82;

Source[9] = 0x7b;

 

Source[10] = 0x23;

Source[11] = 0xdf;

Source[12] = 0xa1;

Source[13] = 0x13;

Source[14] = 0x19;

Source[15] = 0xb1;

Source[16] = 0xe2;

Source[17] = 0x79;

Source[18] = 0x44;

Source[19] = 0x7c;

 

if((hFile=OpenFile(filename,&ofs,OF_READ))==HFILE_ERROR) 

MessageBox("Open file error!");

else

{

_llseek( hFile, 0x42l, 0 );

_lread( hFile, temp, 40 );

 

if (temp[0] == 0x50)

MessageBox("The database is not encrypted!,you can open it normally!")

;

else

{

int i=0;

while (temp[i*2+1] ^ Source[i] )

{

Password[i] = (temp[i*2+1] ^ Source[i] );

i++;

}

Password[i]=0;

Password[20]=0; 

m_password=Password;

UpdateData(false);

}

}

}


--
※ 修改:.zrsoft 于 Apr  7 12:03:33 修改本文.[FROM: 202.96.40.13]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.40.13]

[关闭][返回]