[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Операционные системы / Разное /

Прерывания 30h и 31h

Прерывания 30h и 31h не используются в DOS и о них ничего не говорится в обычных руководствах программиста по DOS. Строго говоря, их вообще нельзя назвать прерываниями и тем более пытаться их выполнить. Ни к чему хорошему это не приведет, поскольку ячейки памяти, зарезервированные для векторов этих двух прерываний (0:00C0 - 0:00C7) не содержат, как обычно, адресов процедур, выполняющих обработку прерываний.

Вместо зтого, начиная с адреса 0:00C0 (адрес вектора прерывания 30h) располагается команда JMP FAR seg:off, которая указывает на альтернативный обработчик прерывания 21h. В результате, зная правила передачи параметров и и другой необходимой для обработчика прерывания информации, можно осуществить прямой доступ в DOS, не генерируя прерывание 21h, а просто выполняя переход на описанную команду.

Естественно, зтот способ позволяет получить доступ только к оригинальному обработчику прерывания 21h. И если программой был установлен другой обработчик этого прерывания, управление указанным способом ему передано не будет. Во многих случаях зто, конечно, очень удобно. Однако нельзя забывать, что это еще более удобно для вирусов, желающих, чтобы их обращения к функциям DOS осталось незамеченным.

Своим существованием эта команда обязана желанию разработчиков PC-DOS и MS-DOS обеспечить совместимость с операционной системой CP/M, где для вызова функции DOS было необходимо выполнить команду CALL 0005, предварительно загрузив номер функции в регистр CL. Этот вызов выполнял команду, находяшуюся по смещению 5 в PSP, а та, в свою очередь, вызывала DOS.

Описанный способ доступа к DOS существует в PC-DOS, начиная с версии 1.1, и в большинстве версий MS-DOS.

;----------------------------------------------------------------------------
;	Пример вызова функции DOS через альтернативный обработчик
;	прерывания 21h.

		mov	ax, offset RETURN     ; Взять смещение адреса возврата
		push	ax                    ; Занести в стек флаги, сегмент
		push	cs                    ;    и смещение адреса возврата
		pushf                         ;    в обратном порядке.
		mov	cl, 9                 ; Функция: показать строку.
		mov 	dx, offset MESSAGE    ; Загрузить адрес сообщения.
		push	cs                    ; Для уверенности, что DS
		pop	ds                    ;    указывает на текущий код.
		jmp	dword ptr ALT_DOS_PTR ; Выполнить функцию.

RETURN:		mov	ah, 4Ch               ; Завершить процесс через DOS.
		int	21h                   ;

LT_DOS_PTR	dw	00C0h, 0000           ; Адрес для перехода в альтер-
					      ;    нативный обработчик
MESSAGE		db	0Dh, 0Ah, "Example of backdoor MS-DOS "

		db	"function call.", 0Dh, 0Ah, 7, "$"



Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Операционные системы / Разное /

Содержимое PSP: Ячейки 05h-09h описание действий для вызова функций DOS в стиле CP/M
15-02-2010   

В операционной системе CP/M программисты для вызова функций DOS использовали близкий CALL: по смещению 5 в PSP каждойпрограммы находится команда CALL FAR seg:off, которая теоретически позволяет вызвать DOS выполнением команды CALL 0005, точно так же, как в CP/M... подробнее

Кол. просмотров: общее - 3107 сегодня - 0

Альтернативный обработчик прерывания int 21h
15-02-2010   

Альтернативный обработчик прерывания 21h предъявляет другие требования к входным параметрам, чем обычный вызов INT 21h. Его использование требует некоторых специальных действий и понимания того, что он позволяет... подробнее

Кол. просмотров: общее - 2956 сегодня - 0

Функция 13h прерывания 21h. Недокументированные возможности
15-02-2010   

Функция 13h прерывания 21h относится к серии функций, выполняющих операции с файлами с использованием FCB. Она удаляет файл или группу файлов... подробнее

Кол. просмотров: общее - 2904 сегодня - 0

Прерывания 30h и 31h
15-02-2010   

Прерывания 30h и 31h не используются в DOS и о них ничего не говорится в обычных руководствах программиста по DOS. Строго говоря, их вообще нельзя назвать прерываниями и тем более пытаться их выполнить. Ни к чему хорошему это не приведет, поскольку ячейки памяти, зарезервированные для векторов этих двух прерываний (0:00C0 - 0:00C7) не содержат, как обычно, адресов процедур, выполняющих обработку прерываний... подробнее

Кол. просмотров: общее - 2645 сегодня - 0

Эксперименты с QNX
26-01-2009   

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

Кол. просмотров: общее - 2779 сегодня - 0



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects