49689 (Защита программы от нелегального копирования), страница 6
Описание файла
Документ из архива "Защита программы от нелегального копирования", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "49689"
Текст 6 страницы из документа "49689"
es:=seg(B); {ES:BX - адрес буфера}
bx:=ofs(B);
Intr13(R,'Ошибка форматирования');
{Заполняем сектор случайными числами}
Randomize;
for k:=2 to 255 do
C[k]:=Random(256);
{Запрашиваем количество инсталяций на ЖД}
Write('Кол-во установок на ЖД: ');
ReadLn(C[200]);
C[17]:=0;
{Cчитываем контрольную сумму}
N:=0;
for k:=2 to 255 do
N:=N+C[k];
C[256]:=N mod 256;
{Шифруем сектор}
C[1]:=Random(255)+1;
for k:=2 to 256 do
C[k]:=C[k] xor C[1];
{Записываем сектор}
ah:=$03; {Код операции записи}
al:=1; {Записать 1 сектор}
ch:=TRK; {На дорожке TRK}
cl:=1; {Начиная с сектора 1}
dh:=0; {На поверхности 0}
dl:=DSK; {Диск DSK}
es:=seg(C);{Адрес буфера С для записи}
bx:=ofs(C);
Intr13(R,'Ошибка записи');
{Читаем сектор}
ah:=$02;
al:=1;
ch:=TRK;
cl:=1;
dh:=0;
dl:=DSK;
es:=seg(D); {Адрес буфера D для чтения}
bx:=ofs(D);
Intr13(R,'Ошибка чтения')
end;
{Проверяем совпадение}
for k:=1 to Size do
if c[k]<>d[k] then
begin
WriteLn('Несовпадение данных');
SetIntVec($1E,Old);
Halt
end;
WriteLn('Создана и проверена ',TRK+1,
'-я дорожка с секторами по ',Size,' байт');
{измеряем время доступа к новой дорожке}
Write('Время доступа к скрытой дорожке: ');
WriteLn(AccessTime(DSK,TRK):6:2,' c');
{измеряем время доступа к стандартной дорожке}
DBT^.SizeCode:=2; {Указываем стандартную длину сектора в ТПД}
Write('Доступ к обычной дорожке: ');
WriteLn(AccessTime(DSK,20):6:2,' c');
{Восстанавливаем старую ТПД}
SetIntVec($1E,Old)
end.
-
ТЕКСТ ПРОГРАММЫ TEXT.EXE
uses F_Prot,F_Disk;
procedure Alarm;Far;
begin
writeln('Нелегальная копия')
end;
procedure Norma;Far;
begin
writeln('Легальная копия')
end;
function ParStr:String;
var
S:string;
k:Byte;
begin
S:=ParamStr(1);
for k:=1 to Length(S) do S[k]:=UpCase(S[k]);
ParStr:=S
end;
var
p1,p2:Pointer;
d:Integer;
dsk:Byte;
begin
p1:=@Norma;
p2:=@Alarm;
if ParStr='/SET' then
Writeln('Установка на ЖД: ',SetOnHD)
else
if ParStr='/REMOVE' then
writeln('Удаление с ЖД: ',RemoveFromHD)
else
begin
ProtCheck(p1,p2,d);
Writeln('Результат проверки ',d);
readln
end
end.