Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 14 de Agosto de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
182 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Protegendo seu sistema contra cópias ilegais
Publicado por ActiveDelphi : Quarta, Abril 22, 2009 - 11:22 GMT-3 (4952 leituras)
Comentários 13 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Olá! Meu nome é Mário e este é o meu primeiro artigo, onde falarei sobre a prevenção contra a pirataria de nossos softwares. Espero que possa ajudar os colegas programadores

Tendo em vista a preocupação dos colegas com a tal pirataria e com as cópias ilegais, desenvolvi um código que verifica o número de série de um determinado dispositivo conectado ao computador e faz uma comparação.

A lógica é: Há uma função que pega o número de serie do CD que está na unidade de CD. O sistema só irá rodar se aquele determinado CD estiver no drive. Tanto faz se você colocar o CD na unidade D, E, F, etc, pois a função irá verificar cada unidade a procura do número de série correto e, caso não o ache, retorna false. Segue abaixo todo o código para o vosso estudo:

unit Unit1;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    function tbVolSerial(const Drive: Char; Path: PChar): Cardinal;
    procedure VerificaSerialH(Driver: char);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// função que pega o numero serial do dispositivo
function
TForm1.tbVolSerial(const Drive: Char; Path: PChar): Cardinal;
var
  MaxCompLen, FileSysFlag, PrevErrorMode: Cardinal;
begin
  if Path = nil then
    Path := PChar(Drive + ':\');
  PrevErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    if not
GetVolumeInformation(PChar(Path), nil, 0,
      @Result, MaxCompLen, FileSysFlag, nil, 0) then
      Result := 0;
  finally
    SetErrorMode(PrevErrorMode);
  end;
end;

//Esta função faz a varredura em todos os dispositivos a procura
//do serial valido. retorna true ou false.

procedure
TForm1.VerificaSerialH(Driver: char);
const
  drive: array[0..25] of char = ('a','b','c','d','e','f','g','h',
  'i','j','k','l','m','n','o','p','q'
  ,'r','s','t','u','w','v','x','y','z');
var
  j:integer;
  ini:TIniFile;
  SerialHardware,AdquireSerial:string;
  erro:Boolean;
begin
  if not FileExists('.\serial.ini') then
  begin

    AdquireSerial:=IntToStr(tbVolSerial(Driver,nil));
    ini:=TIniFile.Create('.\serial.ini');
    ini.WriteString('serial','Hardware',AdquireSerial);
    ini.Free;
  end
  else
  begin

    ini:=TIniFile.Create('.\serial.ini');
    SerialHardware:=ini.ReadString('serial','Hardware','');
    ini.free;
  end;
  for j:=0 to 25 do
  begin
    if
(IntToStr(tbVolSerial(Drive[j],nil)))= SerialHardware then
    begin

      Erro:=false;
      Label1.Caption:='Original';                                             
      break;
    end
    else

      Erro:=true;
  end;
  if Erro then
    Label1.Caption:='Pirata'
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption:='Este sistema é...';
  Label1.Repaint;
  VerificaSerialH('G');
end;

end.

Espero ter ajudado.

Por: Mário (mariorgrossi)
Contato: mariorochagrossi@ig.com.br



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: gilsonnrodrigues (gilsonnr@hotmail.com) : Abr 23, 2009 - 02:18
(Informações sobre o membro | Enviar uma mensagem) http://
e os HDs clonados?

e os formatadores q dá opção de setar o serial "lógico"?


por: anderson.delphi (anderson.ufs@gmail.com) : Abr 23, 2009 - 04:05
(Informações sobre o membro | Enviar uma mensagem)
Muito bom seu artigo. Mas, com uma imagem do sistema emulada por um "daemon tools" like, a função não seria comprometida?


por: VSF (hereim@ig.com.br) : Abr 29, 2009 - 04:54
(Informações sobre o membro | Enviar uma mensagem) http://www.igara.com.br/victory
Uma alternativa tb é o uso de hardlocks conforme publiquei um artigo q se encontra no site http://www.linhadecodigo.com.br/Artigo.aspx?id=139

O problema da sua implementação é q se algum componente de hardware do cliente "pifar" seu sistema tb para!


por: 1v4n! (ivan.pantoja@tjap.jus.br) : Jan 11, 2010 - 04:10
(Informações sobre o membro | Enviar uma mensagem) http://
olá, mário. Apesar de não ser 100% eficiente, mas o q importa é q vc começou de algum lugar. Tenho certeza de que em breve chegarás a encontrar uma outra solução mais segura. Pois, como diz o ditado popular: "água mole e pedra dura, tanto bate até que fura" É só não desisti! abraço.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados