e-mail    Debatní kniha    Mapa stránek    Hlavní  
 perličky 
 

Ochrana programov pred ich spustením

Ing. Svatoslav Šimonfy

Program umožňuje jednoduchú ochranu programov pred spustením po ich neoprávnenom skopírovaní na iný počítač. Princíp spočíva vo vytvorení kontrolného súboru, v ktorom je uložený dátum (i zakódovaný) vytvorenia adresára, na ktorom je chránený program uložený. Chránený program pri spustení porovnáva tento dátum so skutočným dátumom vytvorenia adresára, a ak tento nesúhlasí, resp. ak neexistuje kontrolný súbor, program končí svoju činnosť. Čiže ak sa po skopírovaní chráneného programu nespustí program, ktorý vytvorí kontrolný súbor, chránený program je nefunkčný.

Nevýhodou je, že autor chráneného programu musí sám nainštalovať tento program u užívateža (vytvoriť súbor DATA.DAT programom INSTALL).

Inštalácia
V chránenom programe (pozri program Skuska) umiestnime na jeho začiatok riadok:

IF NOT TEST_ADR THEN _HALT

a skompilujeme ho s použitím unit-u ZISTI_ADR. Ten porovnáva čas vytvorenia adresára, v ktorom sa nachádza chránený program a čas, ktorý je zapísaný v súvore DATA.DAT, ktorý vznikol po spustení programu INSTALL.EXE. Ak toto nesúhlasí, program ukončí svoju činnosť.

{$N+}
unit ZISTI_ADR;
interface
uses crt,dos;

type
    veta_inst = record
      kont_d  : single;
    end;

var
   DirInfo     : SearchRec;
   inst        : file of veta_inst;
   vinst       : veta_inst;
   datum       : longint;
   vtime       : DateTime;

Function Test_adr : boolean;
Procedure _halt;
implementation

Function Test_adr : boolean;
begin
     FindFirst('C:*',DIRECTORY,DirInfo);
     if Doserror = 0 then
       begin
            assign(inst,'data.dat');
            {$I-}
            reset(inst);
            {$I+}
            if ioresult <> 0 then
              test_adr := false
            else
              begin
                   read(inst,vinst);
                   UnpackTime(dirinfo.time,vtime);
                   datum := vtime.hour + vtime.min
                                       + vtime.sec;
                   if datum = vinst.kont_d then
                     test_adr := true
                   else
                     test_adr := false;
                   close(inst);
              end;
       end
     else
       test_adr := false;
end;

Procedure _Halt;
begin
     window(1,1,80,25); textattr := 16*black+white;
                        clrscr;
     gotoxy(15,13); write('Neopravnene skopirovany
 program !!!');
     halt;
end;
end.



{$N+}
program install;
uses crt,dos;

type
    veta_inst = record
      kont_d  : single;
    end;

var
   DirInfo     : SearchRec;
   vtime       : DateTime;
   inst        : file of veta_inst;
   vinst       : veta_inst;

begin
     window(1,1,80,25); textattr := 16*black+lightgray;
                        clrscr;
     FindFirst('C:*',DIRECTORY,DirInfo);
     if Doserror = 0 then
       begin
            assign(inst,'data.dat');
            rewrite(inst);
            UnpackTime(dirinfo.time,vtime);
            vinst.kont_d := vtime.hour + vtime.min
                                       + vtime.sec;
            write(inst,vinst);
            close(inst);
       end;
     clrscr;
end.


program Skuska;
uses crt,zisti_adr;

begin
     if not test_adr then _halt;
     writeln('OK !');
end.



Pascal - hlavní
Překladače
Vlastní články
Převzaté články
Věci na stáhnutí
Odkazy k tématu
BP7 buglist
Chyba Run-time 200

BASIC