Fórum Registrar o sistema no registro no Windows #310534
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
Curtir tópico
+ 0Posts
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.
Gostei + 0
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
Gostei + 0
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.
Gostei + 0
27/01/2006
Neto
Neto
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)