仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 790|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网站制作之避免Access 2000暗码被破译的办法

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:26:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
曾经的功能列表可能会迅速变得过时了。而且,有些功能对有的应用程序非常重要,但是对别的应用程序则不一定。假如你太过信托Access2000数据库的暗码回护,你大概会因而而承受丧失。这是由于Access2000的数据库级暗码其实不平安,相反它很懦弱,乃至上面这段十分小的程序就能够攻破它:

程序一(VB6):Access2000暗码破译
PrivateSubCommand1_Click()
ConstOffset=&H43文件偏移地点:Access数据库今后处入手下手寄存加密暗码
DimbEmpty(1To2)AsByte,bPass(1To2)AsByte
DimiAsInteger,PasswordAsString
翻开一个空数据库作为参照
Open"D:VB6_TestMDB_PasswordNew_Empty_DB.mdb"ForBinaryAs#1
翻开被暗码回护的数据库
Open"D:VB6_TestMDB_PasswordPass_Protected_DB.mdb"ForBinaryAs#2
Seek#1,Offset
Seek#2,Offset
Fori=1To20Access2000数据库暗码最长同意20位
Get#1,,bEmpty个中每位暗码占两个字节
Get#2,,bPass一个汉字也仅是一名暗码,占两个字节
If(bEmpty(1)XorbPass(1))0Then
Password=Password+Chr(bEmpty(1)XorbPass(1))将暗码解密
EndIf
Next
Close1,2
MsgBox"Password:"+Password显现暗码
EndSub
1、深切剖析
上述程序乐成的关头是利用了一个空数据库(New_Empty_DB.mdb)。该数据库的创立日期必需与被暗码回护的数据库(Pass_Protected_DB.mdb)相分歧。换句话说,Access2000仅仅是利用“数据库创立日期”来加密用户暗码。

应注重的是:下面的“创立日期”只是操纵体系级的,也就是Windows纪录在文件夹目次里的信息(依据文件名的是非,每一个文件在目次里占用最少32个字节,包含:文件名、属性、文件巨细、首蔟号、创立工夫、修正工夫和会见工夫等)。
Access2000在数据库中也纪录了该数据库的“创立日期”。加密数据库暗码的恰是数据库外部纪录的这个“创立日期”。该日期只要在数据库被乐成翻开后才干看到。但在一样平常情形下,操纵体系级的和数据库内保留的“创立日期”是完整一样的,因而这为破译者供应了便利。
上述程序中另有一点必要申明:为简明起见,解密暗码时仅处置了双字节的首字节,因而它仅对非汉字暗码无效。若要解密汉字暗码,须对双字节均做处置。
2、提防措施
1、埋没“创立日期”
从下面的剖析能够看出,既然“创立日期”是破译的关头,那末我们应“有的放矢”,将实在的“创立日期”埋没起来。
第一步,创立数据库时,利用一个“难以想象的、他人不容易推测”的日期。做法为:修正Windows体系日期,比方改成2026年05月15日,创立数据库后再将体系日期改回。这个“难以想象”的日期即为该数据库的实在“创立日期”。
第二步,修正操纵体系级的“创立日期”。上述第一步完成后,该数据库在操纵体系级的创立日期也是2026年05月15日,必需加以修正,以到达埋没实在创立日期的目标。修正操纵体系级的“创立日期”能够由上面的程序二完成。

程序二(VB6):修正文件在操纵体系级的“创立日期”
PrivateTypeFILETIME
dwLowDateTimeAsLong
dwHighDateTimeAsLong
EndType
PrivateTypeSYSTEMTIME
wYearAsInteger
wMonthAsInteger
wDayOfWeekAsInteger
wDayAsInteger
wHourAsInteger
wMinuteAsInteger
wSecondAsInteger
wMillisecondsAsInteger
EndType
PrivateConstGENERIC_WRITE=&H40000000
PrivateConstOPEN_EXISTING=3
PrivateConstFILE_SHARE_READ=&H1
PrivateConstFILE_SHARE_WRITE=&H2
PrivateDeclareFunctionSetFileTimeWriteLib"kernel32"Alias_
"SetFileTime"(ByValhFileAsLong,lpCreateTimeAsFILETIME,_
ByValNullPAsLong,ByValNullP2AsLong)AsLong
PrivateDeclareFunctionSystemTimeToFileTimeLib"kernel32"_
(lpSystemTimeAsSYSTEMTIME,lpFileTimeAsFILETIME)AsLong
PrivateDeclareFunctionCreateFileLib"kernel32"Alias"CreateFileA"_
(ByVallpFileNameAsString,ByValdwDesiredAccessAsLong,ByVal_
dwShareModeAsLong,ByVallpSecurityAttributesAsLong,ByVal_
dwCreationDispositionAsLong,ByValdwFlagsAndAttributesAsLong,_
ByValhTemplateFileAsLong)AsLong
PrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsLong)_
AsLong
PrivateDeclareFunctionLocalFileTimeToFileTimeLib"kernel32"_
(lpLocalFileTimeAsFILETIME,lpFileTimeAsFILETIME)AsLong
PrivateSubCommand1_Click()
DimYearAsInteger,MonthAsInteger,DayAsInteger
DimHourAsInteger,MinuteAsInteger,SecondAsInteger
DimTimeStampAsVariant,FilenameAsString,XAsInteger
Year=2001:Month=3:Day=13筹办设定的“创立日期”
Hour=12:Minute=0:Second=26
TimeStamp=DateSerial(Year,Month,Day)+TimeSerial(Hour,Minute,Second)
Filename="D:VB6_TestMDB_PasswordPass_Protected_DB.mdb"方针文件名
X=ModifyFileStamp(Filename,TimeStamp)
EndSub
FunctionModifyFileStamp(FilenameAsString,TimeStampAsVariant)AsInteger
DimXAsLong,HandleAsLong,System_TimeAsSYSTEMTIME
DimFile_TimeAsFILETIME,Local_TimeAsFILETIME
System_Time.wYear=Year(TimeStamp):System_Time.wMonth=Month(TimeStamp)
System_Time.wDay=Day(TimeStamp)
System_Time.wDayOfWeek=Weekday(TimeStamp)-1
System_Time.wHour=Hour(TimeStamp):System_Time.wSecond=Second(TimeStamp)
System_Time.wMilliseconds=0
X=SystemTimeToFileTime(System_Time,Local_Time)
X=LocalFileTimeToFileTime(Local_Time,File_Time)转换成可用的范例
Handle=CreateFile(Filename,GENERIC_WRITE,FILE_SHARE_READOr_
FILE_SHARE_WRITE,ByVal0&,OPEN_EXISTING,0,0)翻开文件
X=SetFileTimeWrite(Handle,File_Time,ByVal0&,ByVal0&)设置日期
CloseHandleHandle封闭文件
EndFunction
图三显现的是数据库的实在“创立日期”和经程序二假装的操纵体系级的“假象”日期。

能够看出,埋没“创立日期”的办法对破译者来讲只是增年夜了破译的事情量,增添了破解实验的次数。只要将该办法与下述的“办法二”相分离,才干到达“既治本又治标”的效果。不外在一样平常的情形下“办法一”已够用,由于假如破译者肇端利用的测试日期与终极的实在日期相差百年,他必要支付数万次的勉力!
2、利用用户级平安机制
经由过程设置分歧的用户帐号和组帐号对数据库中的各类资本举行权限办理。这类增强了的平安机制固然给一样平常利用(特别是单用户利用)带来了方便,但在有平安隐患的中央仍然有设置的需要。
设置各类帐号及响应权限的复杂办法是利用“设置平安机制导游”(见图四)。图四还显现了平安机制启动后请求用户登录的画面。

3、结论
所谓“道高一尺魔高一丈”,由于这世上并没有相对的平安。上述办法一的目标是进步破译的本钱以到达凡人难以承受的水平;而办法二的初志是增添暗码的数目。两种办法的分离足以使破译者望而生畏。不外这其实不意味着百分之百的平安。但从头脑上进步平安认识,防患于已然,这究竟是准确的选择。
甚至一个有经验的Windows管理者也可以轻松部署并开始学习它,而你不需投入一分钱来了解这个数据库。
飘飘悠悠 该用户已被删除
沙发
发表于 2015-1-19 12:18:47 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
透明 该用户已被删除
板凳
发表于 2015-1-25 17:55:18 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
小女巫 该用户已被删除
地板
发表于 2015-2-3 12:22:17 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
谁可相欹 该用户已被删除
5#
发表于 2015-2-8 22:54:06 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
海妖 该用户已被删除
6#
发表于 2015-2-26 12:59:10 | 只看该作者
比如日志传送、比如集群。。。
老尸 该用户已被删除
7#
发表于 2015-3-8 15:23:18 | 只看该作者
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
因胸联盟 该用户已被删除
8#
发表于 2015-3-16 03:10:41 | 只看该作者
大侠们有推荐的书籍和学习方法写下吧。
简单生活 该用户已被删除
9#
发表于 2015-3-22 19:11:57 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-3 05:22

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表