Registrar o sistema no registro no Windows
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
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
Curtidas 0
Respostas
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.
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
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
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
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:
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
24/01/2006
Valeu, vou estudar o código.
Neto
Neto
GOSTEI 0