Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagedelphi
const CK_SINGATURE = '!CK!';
const CK_MAX_MSG_LEN = 1024*8;

function CKReadPassword(sFileName:string):string;
var
  sFilelenPWD: TFileStreamWORD;
  lenPWD, lenPWD_oldbuff: WORDPAnsiChar;
  sEncryptedPWDsFile: AnsiStringTFileStream;
  buffsEncryptedPWD: PAnsiCharAnsiString;
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);
        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;

...