Registrar o sistema no registro no Windows
24/01/2006
0
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
Posts
24/01/2006
Aroldo Zanela
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.
26/01/2006
Neto
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
26/01/2006
Aroldo Zanela
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.
Clique aqui para fazer login e interagir na Comunidade :)