Руководство по HamsterCMS от TomoTomoTan
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Предисловие и глава 1. - Как включить
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 2 - О шаблонах и содержимом
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 3 - Доступ к сайту через FTP, редактирование шаблона
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 4 - Устройство шаблона. Немного о включениях.
Ручной «Хомяк» – наглядное пособие по Hamster CMS. Глава 5 - Создание собственного шаблона. Загрузка файлов на сайт с помощью WebFTP

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

Moderator: push0ret

User avatar
push0ret
Набирающий обороты
Posts: 32
Joined: Sun Dec 29, 2024 2:48 pm
Has thanked: 22 times
Been thanked: 26 times

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

Post by push0ret »

Hello, world!

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

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

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

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

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

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

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

Code: Select all

.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
Мы видим, что программа вывела на экран сообщение об активации. При этом программа удалена, а вместо неё новая с именем nocopy.com.
nocopy.PNG
Запуск программы nocopy.com:
нескопированная программа.PNG
Наша программа вывела на экран благодарность за то, что мы её не копировали.

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

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

Спасибо за внимание!
С уважением, push0ret!
You do not have the required permissions to view the files attached to this post.

Code: Select all

push 0
ret

Return to “Системное программирование”