论文部分内容阅读
摘要:Access数据库结构简单、功能比较齐全、使用维护方便,因此,在功能能够满足要求的条件下,往往成为一些小型数据库软件的首选。但是由于数据库的加密机制非常简单,很容易破解数据库密码,安全性差。本文在分析了MS Access数据库的加密原理以及现有破解方法的基础上,给出了简便易行的保护措施。并且,用VB给出了切实可行的实现方案。应用表明,该保护措施能有效地提高数据库的安全性。
关键词:ACCESS数据库;加密; 破解;保护
中图分类号:TP309文献标识码:A文章编号:1009-3044(2007)05-11206-02
1 引言
Microsoft的ACCESS数据库,是我们常用的桌面数据库之一,大多中小企业的数据库管理系统都可以采用它,但其安全性一直令人担忧。本文分析了ACCESS数据库的加密原理和破解方法,并且,用VB实现了一种保护措施,实践证明是有效的。
2 MS Access的加密原理
MS Access数据库是以MDB为文件扩展名的单个文件形式存储的,加密后的文件可以在不同计算机上以相同的密码打开,说明该数据库的密码一定存在于文件之中。通过使用UltraEdit软件对加密前后的同一个数据库文件进行对比,就可以确定加密后的密码在文件中的大概位置。
Access数据库系统通过将用户输入的密码与某一密匙进行异或来形成一个加密串,并将其存储在*.mdb文件中从地址&H42开始的区域内[1]。就MS Access97来说,其MDB文件的密码最多能设置14位,是存放在这个文件头部第66个字节至第79个字节共14个字节的固定序列。由于异或操作的特点是“经过两次异或就恢复原值”,因此,用这一密匙与*.mdb文件中的加密串进行第二次异或操作,就可以轻松的得到Access数据库密码[2]。
对于Access97数据库,密匙是固定的:
而Access2000和Access2002的数据库加密方式相同,所以以下只针对Access2000数据库。Access2000的数据库加密系统进行了较大的改进,它的密钥是按日期随机生成的。也就是说,不同的时间产生的MDB文件,其密钥是不同的。但是Access2000还是把加密的密码字串放在以第66字节开始的文件区域内。Access2000提供让用户可以设定最多20位的密码,其密码区域不是连续存储的,而是隔位放置密码串。40位的字节长度内,有用的20个字节;再从这20个字节入手分析会发现,其中的10个字节的密钥是固定的,它们不是按日期随机生成的。因为,密钥是按日期随机生成的,日期相同,密钥也相同。因此,破解Access2000数据库密码,只要建一个与该数据库同日期的没有密码的Access2000数据库,找到密匙,那么还是可以得到数据库密码的。另外,Access的加密密钥虽然是按日期随机生成的,但随机密钥序列是相互关联的,共有256组密钥。所以,只要获取了这个序列中任何一组密钥,根据其相互关系也可以找到序列中其他组的密钥,用穷举法,瞬间可以通过检校获得正确的密码[3-5]。
3 破解方法分析
通过以上分析,对于不同版本的Access数据库,破解的方法是不同的:
3.1 Access97数据库
因为Access97数据库的密匙是固定的,因此,用这固定密匙与*.mdb文件中的加密串进行异或操作,就可得到Access数据库密码。
3.2 Access2000及其以上版本数据库
Access2000数据库密钥是按日期随机生成的,因此,可以采用两种方式来破解:
第一种:日期法
因为,密钥是按日期随机生成的,日期相同,密钥也相同。建一个与该数据库同日期的没有密码的Access2000数据库,找到密匙,得到密码。
第二种:穷举法
Access的加密密钥虽然是按日期随机生成的,但随机密钥序列是相互关联的,共有256组密钥。建一个没有密码的Access2000数据库,从中得到一组密匙,比如是: &H94,&HEC,&H4F,&H9C,&HD4,&HD4,&H28,&H1,&H8A,&H46,&H7B,&HE7,&HDF,&H65,&H13,&HDD,&HB1,&H26,&H79,&H80,&H7C。利用这一组密匙,找出其他255组,使用这256组密匙用ADO2.5以上来测试连接数据库,这样很快就可以得到密码。
4 保护措施
破解数据库,首先要判断文件的版本,是MS Access97还是MS Access2000或MS Access2002。判断数据库的版本与0x14处的字节有关,如果是0就为Access97,如果是1就为Access2000或2002。
对于不同的版本,破解的方法不同,因此只要把0x14处的字节修改,那么就无法破解了。比如:对于加密的Access97数据库,把0x14处的字节修改为1,那么破解软件就按照Access 2000数据库格式进行破解,当然密码就不对了。另外用UltraEdit打开MDB文件可以看到,文件前16个字节的内容:00 01 00 00 53 74 61 6E 64 61 72 64 20 4A 65 74。如果随便更改几个,再用ACCESS打开,就会出现不可识别的数据库格式的错误,因为ACCESS前面保存的信息都是一些MDB文件的定义和口令,如果更改这些内容,数据库就无法打开,而且这样不会对数据库的内容作更改,不会破坏原有的数据。
基于以上分析,下面就Access2000用VB作个简单的加密、还原程序,程序片断如下:
5 结束语
Access数据库是目前应用最为广泛的中小型数据库系统。但是由于其在加密方面设计欠周密,可以方便的破解数据库密码。本文在分析Access数据库加密原理和破解原理的基础上,给出了一种方便可行的保护措施。
参考文献:
[1] 罗英均, 徐兵, 冉戎且. 浅谈Access数据库安全策略[J]. 电脑知识与技术, 2005,5:25-27.
[2] 曾涛, 黄净. Access数据库的安全机制、隐患及改进策略[J]. 大众科技. 2006,7:102-103.
[3] 廖启亮, 曾健思, 廖赤球. Access数据库加密系统安全性剖析及改进策略[J]. 中国安全科学学报, 2005,15(5):80-83.
[4] Petroutsos Evangelos; 邱仲潘, 等译. Visual Basic 6.0从入门到精通[M]. 北京:电子工业出版社, 1999.
[5] 陈俊源. 活用Visual Basic 5.0数据库编程[M]. 北京: 清华大学出版社, 1998.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:ACCESS数据库;加密; 破解;保护
中图分类号:TP309文献标识码:A文章编号:1009-3044(2007)05-11206-02
1 引言
Microsoft的ACCESS数据库,是我们常用的桌面数据库之一,大多中小企业的数据库管理系统都可以采用它,但其安全性一直令人担忧。本文分析了ACCESS数据库的加密原理和破解方法,并且,用VB实现了一种保护措施,实践证明是有效的。
2 MS Access的加密原理
MS Access数据库是以MDB为文件扩展名的单个文件形式存储的,加密后的文件可以在不同计算机上以相同的密码打开,说明该数据库的密码一定存在于文件之中。通过使用UltraEdit软件对加密前后的同一个数据库文件进行对比,就可以确定加密后的密码在文件中的大概位置。
Access数据库系统通过将用户输入的密码与某一密匙进行异或来形成一个加密串,并将其存储在*.mdb文件中从地址&H42开始的区域内[1]。就MS Access97来说,其MDB文件的密码最多能设置14位,是存放在这个文件头部第66个字节至第79个字节共14个字节的固定序列。由于异或操作的特点是“经过两次异或就恢复原值”,因此,用这一密匙与*.mdb文件中的加密串进行第二次异或操作,就可以轻松的得到Access数据库密码[2]。
对于Access97数据库,密匙是固定的:
而Access2000和Access2002的数据库加密方式相同,所以以下只针对Access2000数据库。Access2000的数据库加密系统进行了较大的改进,它的密钥是按日期随机生成的。也就是说,不同的时间产生的MDB文件,其密钥是不同的。但是Access2000还是把加密的密码字串放在以第66字节开始的文件区域内。Access2000提供让用户可以设定最多20位的密码,其密码区域不是连续存储的,而是隔位放置密码串。40位的字节长度内,有用的20个字节;再从这20个字节入手分析会发现,其中的10个字节的密钥是固定的,它们不是按日期随机生成的。因为,密钥是按日期随机生成的,日期相同,密钥也相同。因此,破解Access2000数据库密码,只要建一个与该数据库同日期的没有密码的Access2000数据库,找到密匙,那么还是可以得到数据库密码的。另外,Access的加密密钥虽然是按日期随机生成的,但随机密钥序列是相互关联的,共有256组密钥。所以,只要获取了这个序列中任何一组密钥,根据其相互关系也可以找到序列中其他组的密钥,用穷举法,瞬间可以通过检校获得正确的密码[3-5]。
3 破解方法分析
通过以上分析,对于不同版本的Access数据库,破解的方法是不同的:
3.1 Access97数据库
因为Access97数据库的密匙是固定的,因此,用这固定密匙与*.mdb文件中的加密串进行异或操作,就可得到Access数据库密码。
3.2 Access2000及其以上版本数据库
Access2000数据库密钥是按日期随机生成的,因此,可以采用两种方式来破解:
第一种:日期法
因为,密钥是按日期随机生成的,日期相同,密钥也相同。建一个与该数据库同日期的没有密码的Access2000数据库,找到密匙,得到密码。
第二种:穷举法
Access的加密密钥虽然是按日期随机生成的,但随机密钥序列是相互关联的,共有256组密钥。建一个没有密码的Access2000数据库,从中得到一组密匙,比如是: &H94,&HEC,&H4F,&H9C,&HD4,&HD4,&H28,&H1,&H8A,&H46,&H7B,&HE7,&HDF,&H65,&H13,&HDD,&HB1,&H26,&H79,&H80,&H7C。利用这一组密匙,找出其他255组,使用这256组密匙用ADO2.5以上来测试连接数据库,这样很快就可以得到密码。
4 保护措施
破解数据库,首先要判断文件的版本,是MS Access97还是MS Access2000或MS Access2002。判断数据库的版本与0x14处的字节有关,如果是0就为Access97,如果是1就为Access2000或2002。
对于不同的版本,破解的方法不同,因此只要把0x14处的字节修改,那么就无法破解了。比如:对于加密的Access97数据库,把0x14处的字节修改为1,那么破解软件就按照Access 2000数据库格式进行破解,当然密码就不对了。另外用UltraEdit打开MDB文件可以看到,文件前16个字节的内容:00 01 00 00 53 74 61 6E 64 61 72 64 20 4A 65 74。如果随便更改几个,再用ACCESS打开,就会出现不可识别的数据库格式的错误,因为ACCESS前面保存的信息都是一些MDB文件的定义和口令,如果更改这些内容,数据库就无法打开,而且这样不会对数据库的内容作更改,不会破坏原有的数据。
基于以上分析,下面就Access2000用VB作个简单的加密、还原程序,程序片断如下:
5 结束语
Access数据库是目前应用最为广泛的中小型数据库系统。但是由于其在加密方面设计欠周密,可以方便的破解数据库密码。本文在分析Access数据库加密原理和破解原理的基础上,给出了一种方便可行的保护措施。
参考文献:
[1] 罗英均, 徐兵, 冉戎且. 浅谈Access数据库安全策略[J]. 电脑知识与技术, 2005,5:25-27.
[2] 曾涛, 黄净. Access数据库的安全机制、隐患及改进策略[J]. 大众科技. 2006,7:102-103.
[3] 廖启亮, 曾健思, 廖赤球. Access数据库加密系统安全性剖析及改进策略[J]. 中国安全科学学报, 2005,15(5):80-83.
[4] Petroutsos Evangelos; 邱仲潘, 等译. Visual Basic 6.0从入门到精通[M]. 北京:电子工业出版社, 1999.
[5] 陈俊源. 活用Visual Basic 5.0数据库编程[M]. 北京: 清华大学出版社, 1998.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。