Registrar o sistema no registro no Windows

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

Respostas

24/01/2006

Aroldo Zanela

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.


Responder Citar

26/01/2006

Neto

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


Responder Citar

26/01/2006

Aroldo Zanela

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&93;);
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.



Responder Citar

27/01/2006

Neto

Valeu, vou estudar o código.
Neto


Responder Citar