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
|