破解Access数据库密码
这是Office97的解法:(2000你要不?)
function GetAccessPassword(FilePath:string):string;
const
xorString:array[0..12]of byte=
( $86, $FB, $EC, $37,
$5D, $44, $9C, $FA,
$C6, $5E, $28, $E6,$13 );
var
passBuf:array[0..14]of byte;
pass:array[0..14]of char;
resultPass:string;
B:Byte;
F:TFileStream;
i:integer;
begin
F:=TFileStream.Create(FilePath,fmShareDenyNone);
//office 97
try
F.Seek($42,soFromBeginning);
F.Read(passBuf,14);
for I:=0 to 13 do
begin
B := passBuf[i] xor xorString[i];
pass[i]:=char(B);
end;
pass[sizeof(pass) - 1] := #0;
resultPass:=StrPas(Pass);
finally
F.Free;
end;
result:=resultPass;
/// office 2000
f.seek($42,sofrombeginning);
f.read(passbuff2,40);
i:=0;j:=0;
while i<40 do
begin
b := passbuff2[i] xor xorstring2[j];
pass2[j]:=char(b);
inc(i,2);inc(j);
end;
pass2[sizeof(pass2) - 1] := #0;
edit2.text:=strpas(pass2);
finally
f.free;
end;
///end 2000
end;
*************
[FOR ACCESS97]
predef97:array[0..12] of byte=
($86,$fb,$ec,$37,
$5d,$44,$9c,$fa,
$c6,$5e,$28,$e6,$13);
[FOR ACCESS2000]
predef2k:array [0..20]of byte=
($d3,$ec,$08,$9c,
$93,$28,$46,$8a,
$01,$7b,$a0,$df,
$22,$13,$9a,$b1,
$61,$79,$c7,$7c,$5b);