Защита программ на жёстком диске от несанкционированного копирования (DOS)
Добавлено: Пт янв 10, 2025 11:53 pm
Hello, world!
В этой статье разберём защиту программы на жёстком диске от копирования. Есть несколько методов защиты программ
на жёстком диске:
1. "Привязка" программы к физическому расположению на жёстком диске.
2. Запись в неиспользуемый участок последнего кластера файла контрольного числа (при копировании и восстановлении этот участок будет пустым).
3. "Привязка" к версии BIOS.
Это не все способы защиты программы на жёстком диске, способов ровно столько, на сколько хватает ваших знаний и фантазии. Я не буду рассматривать в этой статье защиту программ от отладки, возможно, это будет разобрано потом. Сейчас же покажу один из способов защиты программы от копирования.
Первый способ заключается в записи в файл с программой её цепочки кластеров (либо физических секторов) на жёстком диске, если программа большая по размеру, то можно использовать контрольную сумму номеров кластеров, либо физических секторов. При копировании на другой жёсткий диск программа не запустится, т.к. её физическое расположение на нём будет отличаться. Это и есть её минус, при выходе из строя жёсткого диска, её запустить заново не удастся.
Второй способ заключается в записи в неиспользуемую часть последнего кластера файла. При копировании и восстановлении эта неиспользуемая часть последнего кластера файла не будет учтена и не копируется. Минус тот же, что и у первого способа.
И последний способ, это запись в область памяти файла версии BIOS. Минус в том, что при покупке одной партии компьютеров, скорее всего, версия BIOS у них будет одна и та же.
Я написал программу - пример защиты от копирования, использовал третий способ, защита заключается в записи в область памяти программы кода модели процессора, версии BIOS и дополнительного кода модели процессора, если одно из этих значений не совпадёт со значением вашего компьютера, то программа выведет соответствующее сообщение:
При запуске программы, она записывает в файл код модели процессора, версию BIOS, дополнительный код модели процессора, далее удаляет себя и создаёт новую программу с именем nocopy.com. При запуске программы nocopy.com мы увидим сообщение с благодарностью за то, что данную программу мы не скопировали. Если копировать её на компьютер с другой версией BIOS или с другим процессором, то программа выведет сообщение о том, что её скопировали.
Первый запуск программы:
Мы видим, что программа вывела на экран сообщение об активации. При этом программа удалена, а вместо неё новая с именем nocopy.com.
Запуск программы nocopy.com:
Наша программа вывела на экран благодарность за то, что мы её не копировали.
А теперь давайте скопируем её на другой компьютер с другой версией BIOS и другим процессором:
Вот простой механизм защиты от копирования программы на другой компьютер, надеюсь, что было интересно!
Была использована версия компилятора MASM 6.11 в контексте операционной системы MS DOS 6.22!
Спасибо за внимание!
С уважением, push0ret!
В этой статье разберём защиту программы на жёстком диске от копирования. Есть несколько методов защиты программ
на жёстком диске:
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
Первый запуск программы:
Мы видим, что программа вывела на экран сообщение об активации. При этом программа удалена, а вместо неё новая с именем nocopy.com.
Запуск программы nocopy.com:
Наша программа вывела на экран благодарность за то, что мы её не копировали.
А теперь давайте скопируем её на другой компьютер с другой версией BIOS и другим процессором:
Вот простой механизм защиты от копирования программы на другой компьютер, надеюсь, что было интересно!
Была использована версия компилятора MASM 6.11 в контексте операционной системы MS DOS 6.22!
Спасибо за внимание!
С уважением, push0ret!