Есть несколько Access овских mdb файлов. Все с паролями на открытие. К части из них успешно доступаюсь через ODBC :
DriverName=clip(FIGOPEN)& 'Microsoft Access Driver (*.mdb)' &clip(FigClose)
ConnectionString0 ='Driver='& clip(DriverName) & |
';Dbq=' &CLIP(GPAR:DataPATH) & '\data.mdb;Uid=Admin;Pwd=OS08MX32AT6N1;'
Однако есть файлы,у которых в пароль входят непечатаемые символы и двухбайтовые символы:
22
†ÿ Ł£Δąś‡ę
ᡊ
Никак не могу подключиться к таким файлам.
Кроме того, есть текст программы на VB (?), которая точно убирает такой пароль.
Код: Выделить всё
Module Module1
Public Function SetDatabasePassword(DBPath As String, _
oldPassword As String, newPassword As String) As Boolean
SetDatabasePassword = False
If Dir(DBPath) = "" Then
Console.WriteLine("Не нахожу " + DBPath)
Exit Function
End If
Dim db As DAO.Database
Dim dbe As DAO.DBEngine
On Error Resume Next
dbe = New DAO.DBEngine
Console.WriteLine("Открываю " + DBPath)
db = dbe.OpenDatabase(DBPath, True, False, "MS Access;PWD=" + oldPassword)
If Err.Number <> 0 Then
Console.WriteLine("Не смог открыть, неверный пароль?")
Exit Function
End If
If newPassword = "" Then
Console.WriteLine("Открыл, снимаю пароль...")
Else
Console.WriteLine("Открыл, меняю пароль...")
End If
db.NewPassword(oldPassword, newPassword)
If Err.Number = 0 Then
If newPassword = "" Then
Console.WriteLine("Снял пароль.")
Else
Console.WriteLine("Сменил пароль.")
End If
Else
Console.WriteLine("Не смог установить новый пароль - скорее всего парольная защита снята.")
End If
SetDatabasePassword = Err.Number = 0
db.Close()
End Function
Sub Main(ByVal sArgs() As String)
Dim sr As IO.StreamReader
sr = New IO.StreamReader("10.mem", Text.Encoding.UTF8)
Dim f, p, fp, np As String
p = sr.ReadToEnd
fp = "" + Chr(13) + Chr(21) + "22 " + Chr(11) + Chr(12) + Chr(13) + Chr(14) + p + Chr(13) + ""
If sArgs.Length > 0 Then
f = sArgs(0)
Else
f = "db1.mdb"
End If
If sArgs.Length > 1 Then
np = sArgs(1)
Else
np = ""
End If
If sArgs.Length > 2 Then fp = sArgs(2)
SetDatabasePassword(f, fp, np)
End Sub
End Module
и это 21 байт : †ÿ Ł£Δąś‡ę
Переменная fp получает значение пароля
А мои попытки безуспешны
Код: Выделить всё
DOSFILE_OUT{Prop:Name}='10.mem' ! драйвер DOS , одно поле String(2048)
Open(DOSFILE_OUT,40h)
Get(DOSFILE_OUT,1)
SubPass_IN=OUT:RecString
close(DOSFILE_OUT)
SubPass_OUT = ThisStringTheory1.Utf8ToAnsi(SubPass_IN, SubPass_OUT_LEN) ! ф-ция из CAPESOFT
FullPass= Chr(13) & Chr(21) & '22 ' & Chr(11) & Chr(12) & Chr(13) & Chr(14) & |
clip(SubPass_OUT) & Chr(13)
ConnectionString4NEW ='Driver='& clip(DriverName) & ';Dbq=' &CLIP(GPAR:DataPATH) & '\data4.mdb;Uid=admin;Pwd='|
& clip(FullPass) & ';'