Защита программ на жёстком диске от несанкционированного копирования (DOS)

Модератор: push0ret

Ответить
Аватара пользователя
push0ret
Имеющий мнение
Сообщения: 15
Зарегистрирован: Вс дек 29, 2024 2:48 pm
Благодарил (а): 8 раз
Поблагодарили: 18 раз

Защита программ на жёстком диске от несанкционированного копирования (DOS)

Сообщение push0ret »

Hello, world!

В этой статье разберём защиту программы на жёстком диске от копирования. Есть несколько методов защиты программ
на жёстком диске:

1. "Привязка" программы к физическому расположению на жёстком диске.
2. Запись в неиспользуемый участок последнего кластера файла контрольного числа (при копировании и восстановлении этот участок будет пустым).
3. "Привязка" к версии BIOS.

Это не все способы защиты программы на жёстком диске, способов ровно столько, на сколько хватает ваших знаний и фантазии. Я не буду рассматривать в этой статье защиту программ от отладки, возможно, это будет разобрано потом. Сейчас же покажу один из способов защиты программы от копирования.

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

Второй способ заключается в записи в неиспользуемую часть последнего кластера файла. При копировании и восстановлении эта неиспользуемая часть последнего кластера файла не будет учтена и не копируется. Минус тот же, что и у первого способа.

И последний способ, это запись в область памяти файла версии BIOS. Минус в том, что при покупке одной партии компьютеров, скорее всего, версия BIOS у них будет одна и та же.

Я написал программу - пример защиты от копирования, использовал третий способ, защита заключается в записи в область памяти программы кода модели процессора, версии BIOS и дополнительного кода модели процессора, если одно из этих значений не совпадёт со значением вашего компьютера, то программа выведет соответствующее сообщение:

Код: Выделить всё

.model  tiny
.286
code    segment
org     100h

start:

cmp run, 0
jz sysinit		;if program not runned, go to init

cmp ctrl, 0
jz msg_pirate		;if ctrl = 0, it copy

jmp systest

;Init system and write configuration in file

sysinit:

mov ah, 3Dh		;open file descriptor
mov al, 2d
mov dx, offset a_name
int 21h

mov handle, ax 

mov bx, ax		;read file
mov ah, 3Fh
mov dx, offset file
mov cx, 400d
int 21h 

;Change file contents

mov di, offset file
mov si, offset ctrl
sub si, 100h
add di, si

mov ah, 0C0h
int 15h

mov al, byte ptr es:[bx+2]
mov byte ptr[di], al

mov al, byte ptr es:[bx+3]
mov byte ptr[di+1], al

mov al, byte ptr es:[bx+4]
mov byte ptr[di+2], al

mov byte ptr[di+3], 1d

mov bx, handle

mov ah, 3Eh		;close file descriptor
int 21h

mov ah, 3Ch		;create file descriptor
mov dx, offset b_name
mov cx, 0
int 21h

mov bx, ax
mov ah, 40h		;write file
mov dx, offset file
mov cx, 400d
int 21h

mov ah, 3Eh		;close file descriptor
int 21h

mov ah, 41h		;delete file
mov dx, offset a_name
int 21h

jmp msg_activate

;Test on copy

systest:

mov ah, 0C0h
int 15h

mov al, byte ptr es:[bx+2]
cmp al, ctrl
jnz msg_pirate

mov al, byte ptr es:[bx+3]
cmp al, ctrl+1
jnz msg_pirate

mov al, byte ptr es:[bx+4]
cmp al, ctrl+2
jnz msg_pirate

mov run, 0

mov ah, 9d
mov dx, offset good
int 21h

jmp exit

msg_activate:

mov ah, 9d
mov dx, offset done
int 21h

jmp exit

msg_pirate:

mov ah, 9d
mov dx, offset copied
int 21h

exit:

mov ax, 4c00h
int 21h

ctrl	db	3d dup(0)
run	db	0

good	db	'Thank your for not copying the program!$'
copied	db	'The program has been copied$'
done	db	'The program has been activate! Run it a second time!$'

file	db	400d dup(0)
a_name	db	'a1.com', 0
b_name	db	'nocopy.com', 0
handle	dw	?

code    ends
end     start

При запуске программы, она записывает в файл код модели процессора, версию BIOS, дополнительный код модели процессора, далее удаляет себя и создаёт новую программу с именем nocopy.com. При запуске программы nocopy.com мы увидим сообщение с благодарностью за то, что данную программу мы не скопировали. Если копировать её на компьютер с другой версией BIOS или с другим процессором, то программа выведет сообщение о том, что её скопировали.

Первый запуск программы:
первый запуск программы.PNG
первый запуск программы.PNG (20.47 КБ) 79 просмотров
Мы видим, что программа вывела на экран сообщение об активации. При этом программа удалена, а вместо неё новая с именем nocopy.com.
nocopy.PNG
nocopy.PNG (47.73 КБ) 79 просмотров
Запуск программы nocopy.com:
нескопированная программа.PNG
нескопированная программа.PNG (17.48 КБ) 79 просмотров
Наша программа вывела на экран благодарность за то, что мы её не копировали.

А теперь давайте скопируем её на другой компьютер с другой версией BIOS и другим процессором:
скопированная программа.PNG
скопированная программа.PNG (3.26 КБ) 79 просмотров
Вот простой механизм защиты от копирования программы на другой компьютер, надеюсь, что было интересно!

Была использована версия компилятора MASM 6.11 в контексте операционной системы MS DOS 6.22!

Спасибо за внимание!
С уважением, push0ret!
Ответить

Вернуться в «Системное программирование»