Array
(
)

Registrar o sistema no registro no Windows

Neto
   - 24 jan 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


Aroldo Zanela
   - 24 jan 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.


Neto
   - 26 jan 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


Aroldo Zanela
   - 26 jan 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:

#Código


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.



Neto
   - 27 jan 2006

Valeu, vou estudar o código.
Neto