Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Азбука хакера 3. Компьютерная вирусология - Собейкис В.Г.

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 123 >> Следующая

вирус должен перехватить определенные прерывания.
Например, если вирус будет активироваться каждый раз при выполнении
программы, нам нужно перехватить функцию 4bh (загрузить/выполнить
программу) прерывания 2ih.
Давайте вспомним материал, с которым вы знакомились в Азбуне-2.
130
ГЛАВА 4. Вирус - резидент памяти
Прерывания
Каждый раз, когда прерывание вызывается из программы, данная программа
приостанавливается и выполняется ISR (Interrupt Service Routine -
программа обслуживания прерываний). Например, если мы вызовем функцию 09h
прерывания 2lh, программа приостановится и вызванная ISR напечатает на
экране символы в соответствии с заложенными параметрами. Как только ISR
закончит печатать символы, контроль вернется к первоначальной программе.
Это как бы набросок процедуры прерывания. А как она работает на самом
деле?
1. Когда программа вызывает прерывание, компьютер сохраняет текущее
состояние данной программы. Это делается с помощью "вталкивания"
содержания флагового регистра в стек. Для простоты мы пока оперируем
параметрами процессора 8086. 16-битный флаговый регистр этого процессора
указывает текущие статусы компьютера и его процессов. Каждый флаг
используется для тестирования определенного условия, отвечающего за
выполнение программы. При программировании в реальном режиме нас
интересуют 9 флагов.
2. Далее, выполняя прерывание, компьютер очищает два флага: флаг
прерывания и флаг ловушки. При установке в 0 флаг прерывания деактивирует
прерывания и активирует их, будучи установленным до 1. Когда флаг ловушки
установлен, процессор выполняет в одношаговом режиме по одной инструкции
за раз. Не старайтесь запомнить эти мелочи - просто попытайтесь понять,
что происходит за сценой.
3. Далее компьютер вталкивает регистр CS в стек. CS содержит стартовый
адрес сегмента кода программы. А мы с вами помним, что при использовании
инструкции push (втолкнуть в стек) SP (Stack Pointer - указатель стека)
декрементируется на 2, прежде чем передать слово в стек.
4. Далее следует вталкивание в стек IP (командного указателя). Когда IP
комбинируется с CS (cs:ip), эта пара создает офсет следующей инструкции,
которая будет выполняться текущей программой.
131
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
5. Теперь процессор готов передать контроль к ISR. Чтобы найти локацию
ISR, нам необходима ссылка на ГУТ (Interrupt Vector Table - таблица
векторов прерываний). Система 8086 содержит 256 различных прерываний в
ранге от 0 до 255. IVT содержит массив указателей на 256 адресов. IVT
располагается в адресе 0000:0000. Каждый указатель в IVT имеет 4 байта в
длину или 2 слова, содержащие сегмент и офсет ISR. Данная информация
важна для прямой манипуляции с IVT. По указанной ссылке адрес в IVT
загружается в cs:ip, и ISR выполняется.
После выполнения ISR компьютер должен передать контроль назад программе.
Процедура, требуемая для инициализации прерывания, по сути, выполняется
наоборот с помощью выполнения инструкции IRET. Инструкция IRET
выталкивает слово на вершине стека в IP. SP инкрементируется, и новое
слово на вершине стека выталкивается в CS, вслед за чем следует та же
процедура для флагового регистра.
При записи собственной ISR не забывайте сохранять все регистры и флаги,
которые могут изменяться при выполнении ISR. После завершения службы не
забывайте восстанавливать все регистры из стека.
Держите под рукой карандаш и бумагу, записывая регистры, которые следует
втолкнуть в стек. Это поможет вам сделать нужные ссылки, когда придет
время выталкивать их из стека. В некоторых вирусах вы увидите, что
вирусмейкеры вталкивают в стек все регистры (включая флаговый) в начале
их ISR. Это гарантирует, что ваша ISR не вызовет какие-либо изменения.
Теперь вы должны разобраться с манипуляциями процесса прерывания.
Манипуляции с таблицей векторов прерывания
Давайте рассмотрим процесс изменений в IVT (Interrupt Vector Table) при
выполнении ISR - службы обработки прерываний. Процесс изменения в
прерывании или захвате функции прерывания называется "перехватом"
прерывания. Для манипуляций с IVT используются две функции прерывания.
132
ГЛАВА 4. Вирус - резидент памяти
Вызов этих функций с правильными параметрами позволяет IVT указывать на
ваш код вируса. Некоторые мастера предпочитают прямое изменение IVT с
указанием фактического адреса указателя прерываний. Но я укажу обе
функции:
функция 35h INT 21h: - получить вектор прерывания mov ah,35h
mov al.int# ;желаемый номер прерывания int 21
и функция 25h INT 21h: - установить вектор прерывания mov ah,25h
mov al.int# ;желаемый номер прерывания lea dx.new ;новый адрес
прерывания
int 21 h
Когда вызывается первая из вышеуказанных функций прерываний, сегментюфсет
ISR возвращается в es:bx. Следовательно, вам нужно сохранить результаты,
чтобы оригинальная ISR могла быть вызвана из кода вируса, когда ваша ISR
завершит выполнение. Но функцию "получить вектор прерывания" можно
использовать иначе.
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 123 >> Следующая