Защита резидентной программы от повторной загрузки. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Защита резидентной программы от повторной загрузки.



 

Если в резидентной программе нет защиты от повторной загрузки, то при повторном её запуске станет резидентной её вторая копия. И т.д. этот процесс может продолжаться до тех пор, пока не будет исчерпана оперативная память. Если резидентная программа в процессе своей работы передает управление старому обработчику прерывания, то при инициализации n-ой копии будет вызываться n-1 и первая копия. Если в программе имеются счетчики или команды типа inc, dec, add, работающие с памятью то несколько команд одной и той же резидентной программы будут работать неверно. Поэтому обязательным элементом любой резидентной программы является процедура защиты её от повторной загрузки.

Наиболее распространенным методом защиты резидентной программы от её повторной установки является использование мультиплексного прерывания 2fh, специально предназначенного для взаимодействия с резидентными программами.

 

Прерывание 2fh - мультиплексное прерывание

Вызов:

 

ah = номер мультиплексного процесса (идентифицирует обработчик прерывания)

00h-7fh Резерв DOS

80h-b7h доступны

b8h-8fh резерв для сетей

c0h-ffh доступны для прикладных программ

 

В частности номера 00 и 01 закреплены за резидентной программой DOS print.com

02h-рез. порция assign

10h-рез порция share

 

al-номер функции

al=00h - дать статус установки процесса

 

Возвращает

al - статус установки

00h - не установлен - можно устанавливать

01h - не установлен - нельзя устанавливать

ffh - установлен

 

Для того, чтобы резидентная программа могла отозваться на int 2fh, в ней должен иметься обработчик этого прерывания. Через этот обработчик может быть осуществлена не только проверка на повторную инициализацию, но и вообще связь с резидентной программой - смена режима её работы или получения от нее каких-то параметров. Задания действий осуществляются с помощью функции, заданной в al.

Таким образом обработчик должен прежде всего проверить номер процесса в ah и при обнаружении своего номера проанализировать al и выполнить затребованные действия, после чего с помощью iret передать управление вызвавшей программе. Однако, если обработчик обнаружил в ah - номер чужого процесса, он должен командой jmp передать управление по цепочке тому обработчику, адрес которого был ранее в векторе 2fh. В результате вызов int 2fh из любой программы будет проходить по цепочке через все загруженные программы, пока не достигнет «своей» программы или не вернет управление в вызвавшую программу через обработчик DOS, который, очевидно, всегда будет самым последним в цепочке.

Часто через дополнительные регистры передается символьная информация, например имя программы. Например если программа dump.com проверяет можно ли остаться резидентным в памяти, то получив в al код ffh и в регистрах cx и dx символьные коды ‘du’ и ‘mp’, то она уверена, что её копия уже есть в памяти. Если же в al - ffh, а в cx и dx - другие коды, то уже есть процесс с нашим номером, в этом случае можно сменить функцию или воспользоваться альтернативным мультиплексным прерыванием int 2dh.

int 2dh

ah - мультиплексный номер

al - функция

00h - проверка инсталляции

Возврат

al=0 -не установлен

al=ffh установлен

cx-версия

dx:di - строка сигнатуры

al=02h - выгрузка

 

Пример:

int_2fh_vector DD?

int_2fh proc far

cmp ax,0b700h; или 0c700

jne Pass_2fh

mov al,0ffh

iret

Pass_2fh:

jmp dword ptr cs:[int_2fh_vector]

int_2fh endp

;======================================

begin:

mov ax,0b700h; установить статус процесса мультиплексного прерывания

int 2fh

cmp al,0

jz not_installed

 

lea dx,msg

call print

int 20h

msg db ‘Программа уже инициализирована’, 13, 10, ‘$’

 

not_installed

 

Программа не должна использовать мультиплексный номер. Программа должна сканировать мультиплексные номера с 00h по ffh, запомнить первый свободный, т.е номер процесса, который не инсталлирован. Программа должна сравнивать 16 байт сигнатуры для всех мультиплексных номеров, которые используются с целью определения - is already installed. (установлена ли программа на этом номере). Если не установлена, то берется первый свободный номер.

Формат сигнатуры:

offset size descriptor

00h 8 bytes имя произв

08h 8bytes имя прогр.

10h 64bytes asciz опсание продукта

 



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 262; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.255.162 (0.009 с.)