这是Office97的解法:(2000你要不?)
这是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;
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);
|