русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Способы защиты от копирования

Рассмотрим методы пометки защищенных гибких дисков, которые могут быть проверены без использования устройств, отличных от FDC. Эти способы работают на любом системном оборудовании с совместимым FDC.

Уточним, что подразумевается под копированием дискет — будем говорить о процессе дублирования гибкого магнитного носителя при помощи стандартного дисковода (одного или двух). В случае одного дисковода содержание диска в один или несколько приемов считывается в оперативную память или в файл, а затем записывается на диск; в случае двух дисководов процесс может происходить напрямую.

Важно, что в обоих случаях в процессе копирования участвует устройство цифровой магнитной записи и данные, находящи­еся на дискете, представлены в некотором стандартном виде, а именно — б виде последовательности треков (дорожек), на которых выделяются сектора определенной длины и с определен­ным расположением на дорожке.

Обеспечить некопируемость информация с дискеты — значит добиться того, чтобы при переносе на другую дискету парамет­ры представления данных на копии существенно изменились по сравнению с оригиналом.

Некопируемой меткой назовем совокупность информацион­ных признаков магнитного носителя, существенно изменяю­щейся при его копировании.
Существуют два основных способа формирования таких ме­ток:

  • нанесением магнитной метки;
  • нанесением физической метки.

Особенность первого случая состоит в том, что метка наносит­ся оборудованием того же типа, которым и читается. Однако, чаще всего копирование происходит не на той ПЭВМ, на кото­рой метка была проставлена. Поэтому, процесс копирования может внести в параметры представления информации на ди­скете особенности дисковода или дисководов, на которых производилось копирование, а также особенности того или иного способа копирования.

С другой стороны, возможно так создать метку, чтобы она не могла быть корректно считана и/или записана. Например, форматировать большое число секторов малой длины, а запи­сывать информацию в виде длинных секторов и т. д.
Итак, при нанесении магнитной метки можно выделить следующие приемы:

  • Вынос метки за пределы стандартного поля копирования;
  • Нестандартная разметка дорожки (дорожек) дискеты;
  • Привязка к временным параметрам чтения/записи;
  • Комбинированные методы (сочетание первых трех).

Для этого можно применить также прерыва­ние INT 13h, изменив соответствующим образом таблицу базы гибкого диска. Ссылка на таблицу базы диска находится по адресу: (0000:0078h)
Стандартное содержание таблицы базы диска для дискет 1.44 Мбайт:


Смещение:

0

1

2

3

4

5

6

7

8

9

10

Содержание:

DF

02

25

02

12

FF

54

F6

01

08

Из параметров базы диска наиболее интересны следующие:

  • размер сектора (0 —128 байт, 1 — 256 байт, 2 — 512 байт, 3 — 1024 байта);
  • номер последнего сектора на дорожке;
  • межсекторный интервал для операций чтения и запи­си;
  • межсекторный интервал для операции форматирова­ния.
 

Времянезависимые способы защиты от копирования

Инженерные дорожки

Создание дорожек за пределами рабочей зоны диска, например создание 41 дорожки для дискеты емкостью 360 Кбайт или 81 дорожки для дискеты емкостью 1,2 Мбайт.

Другой пример - использование нестандартного номера дорожки. Программа форматирует дорожку (стандартным образом) с номером 81. Обычно считается, что дискеты могут содержать 40 или 80 дорожек, соответственно с номерами 0...39 или 0...79, однако возможно использование и дорожек с большими номерами. Обычные программы копирования будут копировать только 40 или 80 дорожек, "не заметив" нашей лишней дорожки.

Из-за недостатков и ограничений всех вышеперечисленных способов защиты наибольшее распространение в нашей стране получил способ идентификации программы и носителя с помощью записи идентифицирующей информации на инженерные цилиндры. Инженерными называются цилиндры, которые формируются при нестандартных параметрах форматирования. Если цилиндры нумеруются от нуля, для дискет объемом 360 Кбайт инженерными будут являться цилиндры с номерами начиная с 40, а для дискет 1,2 Мбайт - начиная с 80. Поскольку информация об этих цилиндрах для DOS отсутствует, они не копируются стандартными средствами (например, командой DISKCOPY). Поэтому само наличие инженерных цилиндров говорит о том, что программа находится на легальном носителе. В качестве полезной информации на такие цилиндры может записываться разрешенное число копий, которое уменьшается на единицу после каждой инсталляции.

Как уже было отмечено, дискеты с паролем на инженерных цилиндрах нельзя скопировать стандартными средствами, но существуют специальные инструментальные средства, достаточно широко распространенные (например, программы EXPLORER или COPYWRIT), которые позволяют это сделать. Программисты из группы 2В (Велюр В.А., Серегин В.В., Сидоров В.А.) в своей статье показали, как с помощью этих средств скопировать дискеты, защищенные программами JAWS, НОТА, SHIELD или системой защиты СП "Диалог". Тем не менее, находятся разработчики, пытающиеся использовать защиту, основанную на записи различных параметров на инженерные цилиндры.

Этим мы и воспользуемся, записав на 81-ю дорожку контрольную информацию. Для разнообразия в примере используем функции общего управления вводом/выводом GENERIC IOCTL. Первая программа предназначена для форматирования 81-й дорожки:

program format81;
uses sysp,crt;
label m1,m2,m3,m4;
var
dbp      : DPB;
dbp_f    : DPB_FORMAT;
sectors,i: word;
c        : char;
kod      : word;

begin
writeln ('Программа уничтожит содержимое 81 дорожки диска A:.');
writeln ('Желаете продолжить ? (Yes/No)');
{ Ожидаем ответ от оператора и анализируем его }
c := readkey;
if (c<>'Y') and (c<>'y')
then halt (1);
{ Получаем текущие параметры диска А:}
dbp.spec :=0;
{ Вызываем подфункцию 0Dh для выполнения
операции чтения текущих параметров диска А:}
asm
mov ax,440dh
mov bl,1
mov cx,0860h
mov dx,offset dbp
int 21h
mov kod,ax
{ проверяем флаг переноса }
jnc m1
end;
writeln ('Ощибка ',kod);
halt (1);
m1:
{ Заполняем блок параметров для форматирования }
dbp.spec  :=5;
{ Считываем из BPB количество секторов на дорожке }
sectors   :=dbp.bpb.seccnt;
{ Подготавливаем таблицу, описывающую формат дорожки
Записываем количество секторов на дорожке          }
dbp.trkcnt:=sectors;
{ Для каждого сектора на дорожке записываем в таблицу его номер и размер}
for i:=1 to sectors do
begin
dbp.trk[i].no  :=i;
dbp.trk[i].size:=512;
end;
{ Устанавливаем новые параметры для диска A: }
asm
mov ax,440dh
mov bl,1
mov cx,0840h
mov dx,offset dbp
int 21h
mov kod,ax
{ проверяем флаг переноса}
jnc m2
end;
writeln ('Ошибка ',kod);
halt (1);
m2:
{ Подготавливаем блок параметров устройства,
который будет использован при вызове операции
проверки возможности форматирования дорожки   }
dbp_f.spec :=1;
dbp_f.head :=0;
dbp_f.track:=81;
asm
mov ax,440dh
mov bl,1
mov cx,0842h
mov dx,offset dbp_f
int 21h
mov kod,ax
{ проверяем флаг переноса}
jnc m3
end;
writeln ('Ошибка ',kod);
halt (1);
m3:
{ Если указаний формат дорожки поддерживается, поле специальных функций 
будет содержать 0 проверяем это}
if (dbp_f.spec<>0)
then
begin
writeln ('Формат дорожки не поддерживается!');
halt (1);
end;
{ Заполняем блок параметров для выполнения операции форматирования }
dbp_f.spec :=0;
dbp_f.head :=0;
dbp_f.track:=81;
{ форматируем дорожку с номером 81, головка 0 }
asm
mov ax,440dh
mov bl,1
mov cx,0842h
mov dx,offset dbp_f
int 21h
mov kod,ax
{ проверяем флаг переноса}
jnc m4
end;
writeln ('Ошибка ',kod);
halt (1);
m4:
end.
Для записи и последующего чтения информации на дополнительную дорожку можно использовать следующую программу:
program test81;
Uses  sysp, crt;
Label m1,m2,m3;
Var
dbp_wr:DPB_WR;
buf   :array [1..1024] of char;
buf1  :string [80];
Err   :Word;

Begin
ClrScr;
Writeln ('Введите строку для записи в нестандартный сектор,');
Writeln (' длина строки не должна превышать 80 байт');
Readln (buf1);
Move (buf1,buf,sizeof(buf1));
{ Заполняем блок параметров для выполнения операции записи}
dbp_wr.spec:=0;
dbp_wr.head:=0;
dbp_wr.track:=81;
dbp_wr.sector:=0;
dbp_wr.sectcnt:=1;
dbp_wr.buffer:=addr(buf);
{ Выполняем операцию записи }
asm
mov ax,440dh
mov bl,1
mov cx,0841h
mov dx,offset dbp_wr
int 21h
mov err,ax
{ проверяем флаг переноса}
jnc m1
end;
writeln ('Ошибка при записи: ', err);
halt (1);
m1:
{ Заполняем блок параметров для выполнения операции чтения}
dbp_wr.spec:=0;
dbp_wr.head:=0;
dbp_wr.track:=81;
dbp_wr.sector:=0;
dbp_wr.sectcnt:=1;
dbp_wr.buffer:=addr(buf);
{ Выполняем операцию чтения дорожки }
asm
mov ax,440dh
mov bl,1
mov cx,0861h
mov dx,offset dbp_wr
int 21h
mov err,ax
{ проверяем флаг переноса}
jnc m3
end;
writeln ('Ошибка при чтении: ',err)
halt (1);
m3:
move (buf,buf1,sizeof (buf1));
writeln ('Прочитано из нестандартного сектора:',buf1);
End.

Просмотров: 15683


Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.