Блог → Снова о методах защите программного обеспечения

Каждый раз, когда встаёт вопрос защиты программы от нелегального копирования, всплывает мысль, что было бы неплохо "привязать" установленную копию программы к некому уникальному идентификатору компьютера, эдакому "отпечатку пальца", который позволил бы точно сказать, то ли это устройство, за которое оно себя выдаёт. Идея неплоха сама по себе, но точно так же, наталкивается на множество ограничений, первым среди которых идёт лёгкость, с которой в настоящее время, меняется "начинка" компьютера (включая его апгрейды - наращивание памяти, замена процессоров, жёстких дисков и даже материнских плат). Когда-то, в былые времена, подобный метод работал значительно лучше, но тем не менее, и сейчас можно кое-что сделать. Итак, мы переходимв к вопросу об индивидуальных параметрах компьютеров.

Кроме копирования накопителей "диск в диск", возможно копирование только информационных или исполняемых файлов, на другой компьютер. При этом для определения факта переноса, помимо проверки некопируемых меток на винчестере, можно учитывать и стабильные индивидуальные, или же редко встречающиеся параметры аппаратной части компьютера. Например, к ним можно отнести:
- серийные номера процессора, микросхемы BIOS;
- стандартную аппаратную конфигурацию данной ПЭВМ;
- содержание ПЗУ;
- частотные и временные характеристики узлов ПЭВМ.

Недостатком данного метода является то, что процессоры Intel 8086, Intel 80286 не имеют серийного номера, который можно было бы считать программными средствами; содержание ПЗУ для некоторых экземпляров ПЭВМ бывает одинаково; дата создания микросхемы BIOS отсутствует или одинакова у ПЭВМ типа IBM PC/XT. Поэтому, учитывать только эти параметры недостаточно для надежной идентификации ПЭВМ.

Кроме выделенных параметров для компьютеров, имеющих энергонезависимую память (для работы часов и хранения конфигурации), возможно записывать свою информацию в эти области памяти и далее проверять ее наличие и содержание. Такая метка очень легко ставится и так же легко находится, поскольку свободной памяти в CMOS мало. Кроме того, в последнее время широкое распространение получили продукты, которые используют плату расширения BlOS'a (аппаратно-программная антивирусная защита Virus Eleminator, плата шифрования Krypton-3 и т.д.). В том случае, если ваше программное обеспечение достоверно используется на ПЭВМ, оснащенных расширением BlOS'a, возможно проверять его наличие или анализировать фрагменты кода или данных, в этих расширениях BlOS'a. Это не составляет труда, поскольку расширение имеет легко определяемый адрес сегмента. Давайте рассмотрим примеры (считывание даты создания BIOS'а и считывание слова аппаратной конфигурации компьютера):

; дата создания BlOS'a находится в ПЗУ по адресу F000:FFF5
; и занимает 8 байт в формате мм/дд/гг, где: мм — месяц,
; дд — число, гг — две последние цифры года
; в этой переменной разместится считанная дата создания BlOS'a
b_date db 8 dup (0)

mov ax,0F000h
mov es,ax
mov bx,0FFF5h
xor di,di

m: mov ax,es:[bx]
mov b_date[di],ax
add di, 2
add bx, 2
cmp di, 8
jne m

; вывод строки на экран
mov dx,offset b_date
mov ah,09h
int 21h



mov ах,041Oh
mov es, ах
mov bx, 0
mov ах,es:[bx]

; в регистре AX получено слово аппаратной конфигурации
; биты (содержание)
; 0 (наличие дисковых устройств)
; 1 (наличие сопроцессора)
; 2-3 (размер RAM)
; 4-5 (текущий видеорежим)
; 6-7 (число дисководов)
; 8 (наличие DMA контроллера)
; 9-11 (число RS232 портов)
; 12 (наличие игрового адаптера)
; 14-15 (число установленных принтеров)


Что касается частотных параметров, то их проверка сопряжена с риском изменения из-за температурной или иной нестабильности. Особенно это касается частот строчной и кадровой развертки видеотерминала. Достаточно стабильным являются временные параметры механической части (время передвижения головок) винчестера (HDD). На этом я заканчиваю эту заметку, но обязательно продолжу цикл, и в слудующей статье мы подробнее поговорим о методах защиты программ от дизасемблирования и отладки (несколько более сложный вопрос, занимаются этим, как правило, профессионалы, и если ваши программы подвергаются таким процедурам, значит - они того стоят).