Vous êtes sur la page 1sur 2

Protegendo seu sistema contra cópias ilegais

Ola, meu nome é Mário e espero que este meu artigo possa ajudar os colegas
programadores, visto que a pirataria é um de nossos maiores desafios. Apresentarei aqui
uma técnica que utiliza o serial lógico de uma unidade de disco do computador, que
apesar de poder ser modificada após uma formatação, por exemplo, já é um bom
começo!

Bom, vamos lá. Tendo em vista a preocupação dos colegas com pirataria e 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.

Abaixo há uma função que pega o número de serie do CD que esta na respectiva
unidade. O sistema só irá rodar se aquele determinado CD estiver no drive. Tanto faz se
vc colocar o CD na unidade D, E ou F, a função irá verificar cada unidade a procura do
número de serie correto e caso não o ache retorna false. Apesar da idéia ser criada com
base em um CD, pode ser adaptada para o uso com HD's.

Para testar o código, você precisará acrescenta rum label e um button em seu form. Em
seguida, implementar a função tbVolSerial, a procedure VerificalSerialH e o evento
onClick do botão, conforme abaixo:

// função que pega o numero serial do dispositivo


function Tform2.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 Tform2.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 Tform2.Button1Click(Sender: TObject);


begin
Label1.Caption := 'Este sistema é...';
Label1.Repaint;
VerificaSerialH('G');
end;

Espero ter ajudado!

Por: Mario (mariorgrossi)


Contato: mariorochagrossi@ig.com.br

Vous aimerez peut-être aussi