const CK_SINGATURE = '!CK!';
const CK_MAX_MSG_LEN = 1024;
function CKReadPassword(sFileName, sPWD:String):string;
var
sFile: TFileStream;
lenPWD, lenPWD_old: WORD;
sEncryptedPWD: AnsiString;
buff: PAnsiChar;
begin
GetMem( buff, CK_MAX_MSG_LEN);
ZeroMemory( buff, CK_MAX_MSG_LEN);
if FileExists(sFileName) then begin
lenPWD_old := 0;
sFile := TFileStream.Create( sFileName, fmOpenRead);
if sFile.Handle<>THandle(nil) then begin
sFile.Seek( -4, soFromEnd);
sFile.Read( PAnsiChar(buff)^, 4);
if buff=CK_SINGATURE then
begin
// has master key, so need to erase it
sFile.Seek( -6, soFromEnd);
sFile.Read( lenPwd, 2);
ShowMessage( IntToStr(lenPwd));
sFile.Seek( -(lenPWD + 6), soFromEnd);
sFile.Read( PAnsIChar(buff)^, lenPWD);
Result := trim(string(buff));
end;
sFile.Destroy;
end;
end;
FreeMem(buff);
end;
function CKUpdatePassword(sFileName, sPWD:String):Boolean;
var
sFile: TFileStream;
lenPWD, lenPWD_old: WORD;
sEncryptedPWD: AnsiString;
buff: PAnsiChar;
begin
GetMem( buff, CK_MAX_MSG_LEN);
ZeroMemory( buff, CK_MAX_MSG_LEN);
if not FileExists(sFileName) then begin
Result := False;
end else begin
lenPWD_old := 0;
sFile := TFileStream.Create( sFileName, fmOpenReadWrite);
if sFile.Handle<>THandle(nil) then begin
sFile.Seek( -4, soFromEnd);
sFile.Read( PAnsiChar(buff)^, 4);
if buff=CK_SINGATURE then
begin
// has master key, so need to erase it
sFile.Seek( -6, soFromEnd);
sFile.Read( lenPwd, 2);
sFile.Seek( -(lenPWD + 6), soFromEnd);
lenPWD_old := lenPWD;
end else sFile.Seek( 0, soFromEnd);
while Length(sPWD)<lenPWD_old do sPWD := sPWD + ' ';
sEncryptedPWD := AnsiString(sPWD);
lenPWD := Length(sEncryptedPWD);
sFile.Write( PAnsiChar(sEncryptedPWD)^, lenPWD);
sFile.Write( lenPWD, 2);
sFile.Write( PAnsiChar(CK_SINGATURE)^, 4);
sFile.Destroy;
Result := True;
end else Result := False;
end;
FreeMem(buff);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if not FileExists(eMasterFile.Text) then begin
ShowMessage( 'Please select program file you want');
end else begin
if (CKUpdatePassword( eMasterFile.Text, ePWD.Text)=True) then begin
ShowMessage('Successfully Changed !!');
Close;
end;
end;
end;
|