标题: ACCESS的数据库密码2 [打印本页] 作者: vfp123456 时间: 2006-7-20 17:21 标题: ACCESS的数据库密码2 function TPassForm.Make01(F: string; P: string = ''): boolean;
var
Linker: string;
Access: OleVariant;
begin
if FileExists(F) then DeleteFile(F);
Linker :=
? 'Provider=Microsoft.Jet.OLEDB.4.0;Data ' +
? 'Source=%s;Jet OLEDBatabase Password=%s;';
Access := CreateOleObject('ADOX.Catalog');
Access.Create(format(Linker, [F, P]));
end;
function TPassForm.Make02(F: string): boolean;
var
Access: OleVariant;
begin
if FileExists(F) then DeleteFile(F);
Access := CreateOleObject('Access.Application');
Access.NewCurrentDatabase(F);
Access.Quit;
Access := null;
end;
procedure TPassForm.FormDestroy(Sender: TObject);
begin
FileBox1.Free;
end;
procedure TPassForm.ExecDirectory(S: string);
var
i: integer;
P: PassType;
begin
FileBox1.Directory := S;
ListView1.Items.BeginUpdate;
ListView1.Items.Clear;
for i := FileBox1.Count - 1 downto 0 do begin
? S := FileBox1.Items;
? P := ExecFile(S);
? if P.PassCode = '' then Continue;
? with ListView1.Items.Add do begin
?? Caption := S;
?? ImageIndex := 0;
?? SubItems.Add(P.FileType);
?? SubItems.Add(P.PassCode);
?? SubItems.Add(FormatDateTime(model, P.FileTime));
? end;
? ListView1.Items.EndUpdate;
end;
end;
procedure TPassForm.GetMDBDir(Sender: TObject);
var
S: string;
begin
if not SelectDirectory('选择数据库目录', '', S) then Exit;
Edit1.Text := S;
ExecDirectory(S);
end;
procedure TPassForm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key <> #13 then Exit;
if Trim(Edit1.Text) = '' then Exit;
ExecDirectory(Edit1.Text);
end;
procedure TPassForm.CloseForm(Sender: TObject);
begin
Close;
end;
function TPassForm.ExecFile(FName: string): PassType;
function CovTime(FD: _FileTime): TDateTime;
var
? TCT: _SystemTime;
? Tmp: _FileTime;
begin
? FileTimeToLocalFileTime(FD, Tmp);
? FileTimeToSystemTime(Tmp, TCT);
? Result := SystemTimeToDateTime(TCT);
end;
var
Stream: TFileStream;
i, n: integer;
TP: TSearchRec;
WTime: TDateTime;
WSec: DWord;
M, S: string;
Buf: array[0..200] of byte;
Date0: TDateTime;
Date1: TDateTime;
Date2: TDateTime;
const
XorStr = $823E6C94;
begin
FindFirst(FName, faAnyFile, TP);
//?FT := CovTime(TP.FindData.ftCreationTime);
Stream := TFileStream.Create(FName, fmOpenReadWrite);
Stream.Seek($00, 00); Stream.Read(Buf[0], 200);
if Buf[$14] = 0 then begin
? PassCode := '';
? Stream.Seek($42, 00); Stream.Read(Buf[0], 20);
? for i := 0 to 19 do
?? PassCode := PassCode + chr(Buf xor InCode97);
? Result.PassCode := PassCode;
? Result.FileType := 'ACCESS-97';
? Result.FileTime := Now;
? Exit; // 按Access97版本处理
end;
Stream.Seek($42, 00); Stream.Read(ReaderArray[0], 40);
Stream.Seek($75, 00); Stream.Read(DateStr, 4);
Stream.Free;
for i := $42 to $42 + 55 do begin
? if i = $72 then M := '-' else M := '';
? S := S + #32 + M + IntToHex(Buf, 2);
end;
Dele作者: 2769 时间: 2006-7-20 17:59
好贴