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

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

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

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

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

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

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 81 82 83 84 85 86 < 87 > 88 89 90 91 92 93 .. 123 >> Следующая

int 21h.
Если вирус находит их в этом сегменте, он изменяет сегмент на новое
значение. Код программы для этой операции будет выглядеть так:
350
ГЛАВА 7. Многоцелевые вирусы
хог ах,ах
mov ds.ax ;ds=0
mov bx',21H*4 проверяем вектор int 21 h
cmp [bx] .OFFSET int_21h ;он здесь?
jne F1ND21H ;нет, меняем локацию,
mov ax,cs . ;чтобы лучше осмотреться '
cmp [bx+2],ax
je SET21H ;в ином случае изменить значения в таблице
; векторов прерываний
FIND21H: push es
mov es,[bx+2] ; не нашли вектор - ищем
pop ds ;ds=HOBbtf сегмент
mov di,0 ;он под другим перехватчиком
mov cx,7FFEH
cld
F21L:
mov ax,OFFSETint_2lh ;ищем cs:OFFSET int_21h repnz scasw ;в этом сегменте
jnz ABORT_GO_LOW ;не найдены, нельзя становиться ; резидентом mov ax.cs
;ОК, найден OFFSET int_21h
add di,2 проверяем правильный cs
dec cx
cmp es:[di],ax ;он здесь? jne F21L ;нет, продолжаем поиск
mov ax.ds ;да, нашли!
mov es:[di],ax -.заменяем его на новый cs SET21H:mov [bx+2],es
;меняем вектор int 21 h
Перенос перехватчика int 13h кажется еще более хитрым приемом. Он может
быть глубоко погребен по драйверами устройств. Но, на наше счастье,
имеется мало известная функция, которая мо-
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
жет вернуть вам это прерывание. Речь идет о функции 13Н прерывания 2FH.
Вам нужно лишь вызвать ее с помощью es:bx и ds:dx, настроенных на новый
вектор, и все!
После переноса перехватчиков прерываний вирусу остается лишь освободить
верхнюю память, которую первоначально зарезервировал. Для этого МР
восстанавливает первоначальное значение размера памяти в 0:413Н. Далее он
проходит по цепочке МСВ (блоков контроля памяти), находит Z-блок и
увеличивает его так, чтобы тот занял место, прежде отведенное для вируса.
Затем он настраивает функцию 31Н int 21h и выполняет ее. Вместе с этим МР
исчезает из верхней памяти и живет тихой жизнью обычного DOS TSR. Дальше
наш "зверек" ничем не отличается от уже рассмотренного нами вируса,
загруженного из ЕХЕ-файла.
3. Инфицирование файлов
Вирус Military Police инфицирует ЕХЕ-файлы, перехватывая DOS-функции 11Н
и 12Н. Он сначала смотрит, был ли уже заражен данный файл, и затем
инфицирует только один файл после завершения поиска. Вместо открытия
файла, чтения и сканирования содержания на уже проведенную инфекцию,
вирус просто помещает флаг в часть директорной записи и тем самым
отмечает свое присутствие. Этот флаг загружается в память подпрограммой
поиска. Затем вирус решает, был ли ранее заражен атакованный файл. Он
проверяет память и ищет идентификационный флаг.
Некоторые вирусы используют очень простые флаги, просто перемещая данные
в штампе времени на сотню лет вперед. Но такие флаги легко сканируются
антивирусными программами. Поэтому лучше делать их менее необычными и
примечательными.
Вирус Military Police использует штамп даты и штамп времени, прибавляет
их друг к другу и выделяет младшие пять битов. Фактически, он добавляет
день месяца к секундам. Если сумма этих двух чисел равна 31, значит файл
инфицирован. Если сумма равна другому значению, то файл "чистый". Как
только пригодный файл обнаружен, начинается процесс инфицирования. МР
прикрепляет свой код концу ЕХЕ-файла и модифицирует ЕХЕ-заголовок, чтобы
при выполнении файла производился старт вируса. Он также модифицирует
счет секунд в штампе дата/время, чтобы сумма секунд и дней равнялась 31.
ОГЛ
ГЛАВА 7. Многоцелевые вирусы
4. Загрузка из файла
Когда Military Police загружается в память из файла, он начинает
выполнение в метке START_EXE. Вы можете рассматривать многоцелевой вирус
как инфектор с двумя разными точками входа. Он использует точки входа в
зависимости от того, к чему крепится. Если это происходит в загрузочном
секторе, то точкой входа будет офсет 7С00Н загрузочного сектора. Если
вирус крепится к ЕХЕ-файлу, точкой входа будет START_EXE. Сначала нам
следует подстроить сегменты кода и данных. Дело в том, что он
ассемблирован на начало в офсете рядом с местом, где стартует загрузочный
сектор. Если вирус не будет выполняться в правильном офсете, то любые
ссылки на абсолютные адреса станут неверными. Метка BBS указывает на
стартовый офсет, поэтому нужно сделать следующее:
mov bx.OFFSET BBS ;рассчитать значение для перемещения ;сегмента
mov cl,4
shr bx.cl .значение для вычитаемого находится ;в Ьх
mov ax.cs sub ax.bx
Мы рассчитываем новый сегмент (в ах). Затем Прыгаем к нему, вталкивая в
стек соответствующие адреса и выполняя retf. После подстройки МР
проверяет, находится ли он в памяти. В отличие от запуска загрузочного
сектора МР, стартуя в ЕХЕ-файле, должен следить за этим, так как вирус
может быть уже загруженным из ЗС или из другого ЕХЕ-файла, который
выполнялся ранее.
Для данного теста МР использует ах-7933Н и выполняет фиктивный вызов int
13h. Обычно этот вызов не существует. Мы получаем возврат с установленным
флагом переноса. Но если МР в памяти, то данный вызов существует, и мы
получаем возврат без переноса.
Предыдущая << 1 .. 81 82 83 84 85 86 < 87 > 88 89 90 91 92 93 .. 123 >> Следующая