Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > защита программы от копирования


Автор: windy 24.3.2005, 19:03
как привязать программу к серийному номеру какого-либо устройства так, чтобы на другом компе она не запускалась?

Код

program demo;
uses crt;
label exit,lab3;
const st='this program ';
      st1='was write in demo ';
      st2='Mariska F.';
      st3='do not copy';
      {lab3}
      stt='y lukomorja dub zelenii';
      stt1='zlataya cep na dube tom';
      stt2='i dnem i nochju kot ychenii';
      stt3='vse hodit po cepi krugom';
      stt4='idet napravo-pesn zavodit';
      stt5='nalevo-skazku govorit';
      stt6='-----------------------';
      parol='this parol';
var i,i1,j:integer;
    str,str1,parol1:string;
    k:char;
{}
procedure border(x,y:integer;head:string);
var i:integer;
begin
for i:=x to length(stt)+x+1 do
    begin
          gotoxy(i,y);write(chr(196));
          gotoxy(i,y+8);write(chr(196));
     end;
for i:=y to y+7 do
    begin
         gotoxy(x,i);write(chr(179));
         gotoxy(length(stt)+x+1,i);write(chr(179));
    end;
gotoxy(x,y);write(chr(218));
gotoxy(length(stt)+x+1,y+8);write(chr(217));
gotoxy(length(stt)+x+1,y);write(chr(191));
gotoxy(x,y+8);write(chr(192));
gotoxy(x+length(stt) div 2,y-1); write(head);
end;

procedure text(x,y:integer);
begin
     gotoxy(x+1,y+1);write(stt);
     gotoxy(x+1,y+2);write(stt1);
     gotoxy(x+1,y+3);write(stt2);
     gotoxy(x+1,y+4);write(stt3);
     gotoxy(x+1,y+5);write(stt4);
     gotoxy(x+1,y+6);write(stt5);
     gotoxy(x+1,y+7);write(stt6);
end;
{}

BEGIN
     clrscr;
     str:='pas';
     textcolor(white);
gotoxy(28,40);write('press "p" to continue...');
gotoxy(28,42);write('press "x" to exit or any key...');
for i:=53 to 78 do
    begin
         gotoxy(i,35);write(chr(196));
         gotoxy(i,40);write(chr(196));
    end;
for i:=36 to 39 do
    begin
         gotoxy(53,i);write(chr(179));
         gotoxy(78,i);write(chr(179));
    end;

        gotoxy(53,35);write(chr(218));
        gotoxy(78,35);write(chr(191));
        gotoxy(53,40);write(chr(192));
        gotoxy(78,40);write(chr(217));

        gotoxy(54,36);write(st);
        gotoxy(54,37);write(st1);
        gotoxy(54,38);write(st2);
        gotoxy(54,39);write(st3);
while not keypressed do
      begin
           textcolor(black);
           gotoxy(54,38);write(st2);
           textcolor(white);
           gotoxy(54,39);write(st3);
           delay(350);
           textcolor(white);
           gotoxy(54,38);write(st2);
           delay(350);
           textcolor(black);
           gotoxy(54,39);write(st3);
           delay(350);
      end;
textcolor(yellow);
k:=readkey;
if k='p' then
   begin
        gotoxy(55,45);writeln('input password');
        gotoxy(56,46);readln(str1);
if str<>str1 then
   begin
   textcolor(red);
   gotoxy(56,46);
   writeln('error! false!');
    for j:=1 to 10 do
    begin
    for j:=1 to 10 do
     begin
     for i1:=20 to 18000 do sound(i1);
     for i1:=18000 downto 20 do sound(i1);
     end;
   nosound;
  halt;
  end;
  end
else
textcolor(green);
gotoxy(56,46);
writeln('you can work!');delay(1000);
{repeat until keypressed;}goto lab3;
if k='x' then goto  exit;
   end;

{}
lab3:
border(5,3,'PZU');
text(5,3);
border(75-length(stt),3,'OZU');
gotoxy(1,12);
writeln('if you want copy program from PZU into OZU, then input parol');
write('(for exit press 0): ');
readln(parol1);
if parol1='0' then halt;
if parol1=parol then
   begin
        text(75-length(stt),3);
        gotoxy(1,12);
        clreol;
        gotoxy(1,13);
        clreol;
        write('CONGRATULATION!!!PROGRAM WAS COPY IN OZU');
   end;
if parol1<>parol then
   begin
        textcolor(black);
        text(5,3);
        gotoxy(1,12);
        clreol;
        gotoxy(1,13);
        clreol;
        textcolor(white);
        writeln('PAROL NEVERNII! PROGRAM WAS DIE THEMSELF!');
        writeln('IF YOU NOT KNOW THEN GO AWAY!!!');

   end;
readln;
{}
exit:
END.



Добавлено @ 19:11
Код

uses crt, app;
label exit,lab3;
const st='this program ';
      st1='was write in demo mode';
      st2='Fedorenko M.';
      st3='do not copy';
      stt='y lukomorja dub zelenii';
      stt1='zlataya cep na dube tom';
      stt2='dnem i nochu kot ycheni';
      stt3='hodit po cepi krugom: ';
      stt4='napravo-pesn zavodit';
      stt5='nalevo-skazku govorit';
      stt6='-----------------------';
      parol='parol';
var
   k:char;
   str,str1,parol1:string;
   i,j:integer;

{}
procedure border(x,y:integer;head:string);
var i:integer;
begin
for i:=x to length(stt)+x+1 do
    begin
          gotoxy(i,y);write(chr(196));
          gotoxy(i,y+8);write(chr(196));
     end;
for i:=y to y+7 do
    begin
         gotoxy(x,i);write(chr(179));
         gotoxy(length(stt)+x+1,i);write(chr(179));
    end;
gotoxy(x,y);write(chr(218));
gotoxy(length(stt)+x+1,y+8);write(chr(217));
gotoxy(length(stt)+x+1,y);write(chr(191));
gotoxy(x,y+8);write(chr(192));
gotoxy(x+length(stt) div 2,y-1); write(head);
end;

procedure text(x,y:integer);
begin
     gotoxy(x+1,y+1);write(stt);
     gotoxy(x+1,y+2);write(stt1);
     gotoxy(x+1,y+3);write(stt2);
     gotoxy(x+1,y+4);write(stt3);
     gotoxy(x+1,y+5);write(stt4);
     gotoxy(x+1,y+6);write(stt5);
     gotoxy(x+1,y+7);write(stt6);
end;
{}

procedure okno;
var
   notebook: TApplication;
begin
     notebook.Init;
     notebook.Run;
     notebook.Done;
end;

procedure lab1;
var
   i:integer;
begin
     textcolor(green);
for i:=27 to 52 do
    begin
         gotoxy(i,9);write(chr(196));
         gotoxy(i,14);write(chr(196));
    end;
for i:=10 to 13 do
    begin
         gotoxy(27,i);write(chr(179));
         gotoxy(52,i);write(chr(179));
     end;

        gotoxy(27,9);write(chr(218));
        gotoxy(52,9);write(chr(191));
        gotoxy(27,14);write(chr(192));
        gotoxy(52,14);write(chr(217));

        gotoxy(28,10);write(st);
        gotoxy(28,11);write(st1);
        gotoxy(28,12);write(st2);
        gotoxy(28,13);write(st3);

while not keypressed do
      begin
           textcolor(black);
           gotoxy(28,12);write(st2);
           textcolor(white);
           gotoxy(28,13);write(st3);
           delay(350);
           textcolor(white);
           gotoxy(28,12);write(st2);
           delay(350);
           textcolor(black);
           gotoxy(28,13);write(st3);
           delay(350);
end;
end;

BEGIN
clrscr;
textcolor(white);
gotoxy(14,5);write('press "p" to continue...');
gotoxy(14,6);write('press "x" to exit or any key...');
lab1;
k:=readkey;
if k='p' then
begin
str:='pas';
textcolor(yellow);
gotoxy(28,23);writeln('input password');
gotoxy(29,24);readln(str1);
if str<>str1 then
   begin
   textcolor(red);
   gotoxy(28,24);
   writeln('error! false!');
    for j:=1 to 10 do
     begin
     for i:=20 to 18000 do sound(i);
     for i:=18000 downto 20 do sound(i);
     end;
   nosound;
  halt;
  end
else
    textcolor(green);
    gotoxy(28,25);
    writeln('you can work!');delay(1000);
    {okno;}goto lab3;
    if k='x' then goto  exit;
end;

{}
lab3:
clrscr;
border(5,3,'PZU');
text(5,3);
border(75-length(stt),3,'OZU');
gotoxy(1,12);
writeln('if you want copy program from PZU into OZU, then input parol');
write('(for exit press 0): ');
readln(parol1);
if parol1='0' then halt;
if parol1=parol then
   begin
        text(75-length(stt),3);
        gotoxy(1,12);
        clreol;
        gotoxy(1,13);
        clreol;
        write('CONGRATULATION!!!PROGRAM WAS COPY IN OZU');
   end;
if parol1<>parol then
   begin
        textcolor(black);
        text(5,3);
        gotoxy(1,12);
        clreol;
        gotoxy(1,13);
        clreol;
        textcolor(red);
        writeln('PAROL NEVERNII! PROGRAM WAS DIE THEMSELF!');
        writeln('IF YOU NOT KNOW THEN GO AWAY!!!');

   end;
readln;
{}
exit:
END.





извиняюсь, предыдущий код зацикливается

Автор: Coder 25.3.2005, 15:22
привяжи к дате изготовления ПЗУ (bios):

Код

var
i : integer;
begin
for i:=0 to 7 do
write(chr(mem[$f000:$fff5+k]));
end;


только для начала забей ее в константы своей программы.

P.S. Что это за листинги? чет так впадлу разбиратся. зачем они?

Автор: windy 25.3.2005, 22:37
такое у меня есть
и ещё есть следующее:
Код

uses crt;
begin
clrscr;
case mem[$f000:$fffe]of
$ff:writeln('pc');
$fe:writeln('xt');
$fd:writeln('pcjr');
$fc:writeln('at')
else
writeln('was found not standart type of pc',mem[$f000:$fffe]);
end;
repeat until keypressed;
end.


Код

uses crt;
var k:integer;
begin
clrscr;
for k:=0 to 7 do
write(chr(mem[$f000:$fff5+k]));
writeln;
repeat until keypressed;
end.


как теперь? как привязать? сделать присвоение строки? потом? 

ЗЫ: прога выдает этикетку, там типа имя автора мигает...потом вводится пароль, потом появляется 2 рамки, вводится ещё 1 пароль, потом (если 2-й пароль верный) из 1-й рамки всё копируется во 2-ю...короче, лаба такая

Автор: Coder 26.3.2005, 02:22
вместо repeat until keypressed нипиши ReadKey - также будет ждать нажатие любой клавиши.

Для начала узнай свою дату и забей ее в константы. Потом при запуске программы проверяй равна ли эта константа реальной дате.
Код

uses crt;
const
  MyDate = '09/12/01'; {заранее забитая дата}
var
  k:integer;
  date : string;
begin
  clrscr;
  date:='';
  for k:=0 to 7 do
    date:=date+(chr(mem[$f000:$fff5+k]));
  writeln(date);
  {проверочка}
  if date<>MyDate then
    begin
       writeln('Это другой комп!');
       halt;
    end;


наврятли тебе поможет определение индивидуальности по типу ПК. Если ты брал эти все советы из книги Фаронова, то посмотри там есть куча советов: память, версия дос, дата ПЗУ, особенности физических носителей, .....

И еще держи пароль в программе в зашифрованном виде, а то так кто угодно сможет воспользоваться твоей программой имея под рукой всего лишь HEX редактор...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)