Registrar o sistema no registro no Windows

Delphi

24/01/2006

Olá a todos.
Tenho procurado alguns mecanismos para garantir maior segurança quanto a pirataria de sistemas.
Imaginei o seguinte. Faço um programa específico que apenas adiciona um registro (com uma informação qualquer) nos registros do Windows.
A aplicação ao ser executada verifica se existe no registro do Windows determinada informação, caso exista o sistema á legal, caso não exista o sistema é uma cópia pirata.
Será que isso é uma saida que funciona???
O que a comunidade acha disso.
Abraços a todos
Neto


Neto

Neto

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

24/01/2006

Colega,

Eu utilizo algo parecido em algumas de minhas aplicações. Registro inclusive a data de instalação, data de execução e algumas outras rotinas. Entretanto, existem diversos aplicativos na WEB que podem monitorar o que está sendo gravado/lido o registro e logar num arquivo que poderá ser útil a quem desejar quebrar a segurança.
Se implementar algo parecido, tem que adicionar outros mecanismos de segurança, mas este é um deles com certeza.


GOSTEI 0
Neto

Neto

24/01/2006

Olá Aroldo, obrigado pela dica.
De qualquer forma sabe onde posso obter informações de como fazer um programa que registre ulgumas informações no registro do Windows.
Abraços
Neto


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

24/01/2006

Colega,

Aqui mesmo no fórum tem muitas threads sobre o assunto.

Abaixo, código de um componente que escrevi há algum tempo que contém os princípios que foram discutidos aqui. Na verdade, a versão funcional que utilizo hoje foi baseada neste código aqui:

unit ExpirationControl;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Registry;

type
  TExpirationControl = class(TComponent)
  private
    { Private declarations }
    FUltimaExecucao: TDateTime;
    FHoje: TDateTime;
    FValidate: Integer;
    FNomeProduto: String;
    FVersaoProduto: String;
    FBuilt: String;
    FHistorico: TStrings;
    procedure SetHistorico(Value: TStrings);
    procedure SetNomeProduto(Value: String);
    procedure SetVersaoProduto(Value: String);
    procedure SetBuilt(Value: String);

  protected
    { Protected declarations }
  public
    { Public declarations }
    Constructor Create(AOwner: TComponent); override;
    Destructor Destroy; override;
    procedure MontaTitulo;
    procedure WMTIMECHANGE(var Message: TWMTIMECHANGE);
    message WM_TIMECHANGE;
  published
    { Published declarations }
    property ProductName: String read FNomeProduto write SetNomeProduto;
    property ProductVersion: String read FVersaoProduto write SetVersaoProduto;
    property BuiltBy: String read FBuilt write SetBuilt;
    property ValidateDays: Integer read FValidate write FValidate;
    property Historical: TStrings read FHistorico write SetHistorico;
    function DateIsValid: Boolean;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents(´Zanela´, [TExpirationControl]);
end;

{ TExpirationControl }

constructor TExpirationControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
  FHistorico:= TStringList.Create;
end;

destructor TExpirationControl.Destroy;
begin
FHistorico.Free;
inherited Destroy;
end;

function TExpirationControl.DateIsValid: Boolean;
var Registro: TRegistry;
lSucesso: Boolean;
begin
lSucesso:= false;
Registro:= TRegistry.Create;
  FHoje:= Trunc(Date);
  try
  Registro.RootKey:= HKEY_CURRENT_USER;
    if not Registro.OpenKey(´ExpirationControl´,false) then
    begin
Registro.OpenKey(´ExpirationControl´,true);
      Registro.WriteDate(´StoredDate´, FHoje);
      Registro.WriteDate(´InstallationDate´, FHoje);
      lSucesso:= true;
    end else
    begin
    if (Registro.ReadDate(´StoredDate´)>FHoje) then
      begin
      FUltimaExecucao:= Registro.ReadDate(´StoredDate´);
      lSucesso:= false;
      end else
      begin
      Registro.WriteDate(´StoredDate´, FHoje); // Atualiza a data da última execução no registro
        FUltimaExecucao:= Registro.ReadDate(´StoredDate´); //
        lSucesso:= true;
end;
      if lSucesso Then
      begin
        if ((Registro.ReadDate(´InstallationDate´)+FValidate)<=FHoje) then lSucesso:= false;
      end;
    end;
  finally
  Registro.Free;
    Result:= lSucesso;
  end;

end;

procedure TExpirationControl.SetHistorico(Value: TStrings);
begin
  if FHistorico.Text <> Value.Text then
  begin
    try
      FHistorico.Assign(Value);
    finally
    end;
  end;
end;

procedure TExpirationControl.SetNomeProduto(Value: String);
begin
if FNomeProduto <> Value then FNomeProduto := Value;
  MontaTitulo;
end;

procedure TExpirationControl.MontaTitulo;
var cTitulo: String;
begin
cTitulo:= ´´;
if FNomeProduto<>´´ then cTitulo := cTitulo + FNomeProduto;
  if FVersaoProduto<>´´ then cTitulo := cTitulo + ´ - ´ + FVersaoProduto;
  if FBuilt<>´´ then cTitulo := cTitulo + ´ - Built by ´ + FBuilt;
Application.Title:= cTitulo;
end;

procedure TExpirationControl.SetBuilt(Value: String);
begin
if FBuilt  <> Value then FBuilt := Value;
  MontaTitulo;
end;

procedure TExpirationControl.SetVersaoProduto(Value: String);
begin
if FVersaoProduto <> Value then FVersaoProduto := Value;
  MontaTitulo;
end;

procedure TExpirationControl.WMTIMECHANGE(var Message: TWMTIMECHANGE);
begin
//if not DateIsValid then halt;
ShowMessage(´Ok´);
end;

end.



GOSTEI 0
Neto

Neto

24/01/2006

Valeu, vou estudar o código.
Neto


GOSTEI 0
POSTAR