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

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

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

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

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

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

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

FILE_OK помогает нам избегать проблем, присущих паразитическим вирусам, -
а главной из них является многократное заражение файлов.
FILE_OK принимает решение: инфицировать или нет потенциальную жертву.
Сначала эта подпрограмма открывает файл, пересылаемый для нее
подпрограммой FIND_FILE, и определяет длину файла. Если тот слишком
большой и прикрепление к нему вируса может вызвать сбой, то наш "зверек"
пропускает его. Но что означает "слишком большой"?
Это тот случай, когда вирус не может разместить стек в верхней части
жертвы. Хотя он использует стек не очень активно, мы должны помнить о
том, что аппаратные прерывания могут обращаться к стеку в любое время. То
есть стек постоянно нуждается, по крайней мере, в 100Н байтах. Чтобы
обезопасить себя, мы должны выполнить условие: (размер Example) + (размер
жертвы) + (размер PSP) < 0FF00H.
Для выполнения такого условия FILE_OK открывает потенциальную жертву с
помощью DOS-функции 3DH и пытается сделать это в режиме чтения/записи. Мы
уже встречали эту функцию. Теперь она будет использоваться в режиме
чтения/записи:
mov dx,9EH ;адрес имени файла в DTA
mov ax,3D02H ;открыть в режиме чтение/запись
int 21Н
Если открыть в таком режиме не удается, то он, вероятно, предназначен
"только для чтения", a Example игнорирует такие файлы.
Далее подпрограмма FILE_OK должна определить, насколько большой этот
файл. Сведения об этом можно взять прямо из DTA в офсете 1АН. Но имеется
и другой способ (без использования поисковых DOS-функций). Именно им и
воспользуется наш вирус. Данный метод вовлекает указатель
117
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
файла.
Чтобы узнать, насколько велик файл, подпрограмма FILE_OK перемещает
указатель файла в конец файла. Указатель файла - это 4-байтовое целое
число, сохраняемое DOS и содержащее путь (к месту, откуда DOS читает или
пишет в файл). Во вновь открытом файле этот указатель файла указывает на
первый байт и затем автоматически перемещается DOS по мере чтения или
записи файла.
Для перемещения указателя файла на любое желаемое значение используется
DOS-функция 42Н. Для ее вызова регистр Ьх должен быть установлен с
помощью индекса файла, a cx:dx должна содержать 32-битное целое число,
говорящее, куда переместить указатель файла. Данная функция применяется
тремя разными методами, которые определяются содержанием регистра al.
Если ale0, то указатель файла устанавливается относительно начала файла.
Если al=i, то он инкрементируется (поединично прибавляется) относительно
текущей локации. А если а1=2, то cx:dx используется как офсет из конца
файла.
При возврате функция 42Н рапортует о текущем значении файлового указателя
(относительно начала файла) в регистровой паре dx:ax. Поэтому, чтобы
узнать размер файла, нам нужно установить указатель в конец файла:
Нижний секгмент
Верхний сегмент
Рис. 6. Вирус создает образ инфицированной жертвы
11Я
ГЛАВА 3. Сложные СОМ-инфекторы
mov ах,4202Н ;поиск относительно конца хог сх.сх ;cx:dx=0
xor dx,dx ;офсет от конца
int 21Н
Значение, вернувшееся в dx:ax будет размером файла! FILE_OK должно
проверить это число и увериться, что оно не слишком большое. Если dx"0,
то файл больше 64К и, следовательно, считается слишком большим:
or dx.dx ;dx = 0?
jnz FOK_EXlT_C ; нет, выход с установкой флага с
Сходным образом, если мы добавляем OFFSET HOST к ах, и
сумма больше, чем 0FF00H, то файл считается слишком большим: add
ах,OFFSET HOST .прибавляет размер вируса + PSP
cmp ax.OFFOOH ;слишком большой?
ja FOK EXIT C ;да, выход с установкой флага с
Если FILE OK получает этот дальний возврат, то новый файл не слишком
большой. Поэтому дальше мы читаем весь файл в памяти и проверяем его
содержимое. Он загружается сразу за вирусом в верхнем сегменте. То есть,
если файл годится для инфекции, вирус тут же создает образ инфицированной
программы в памяти (см. рис. 6).
Сам процесс инфицирования очень прост. Example просто записывает этот
образ обратно на диск!
Чтобы прочитать файл в памяти, мы сначала должны вернуть указатель файла
обратно в начало файла с помощью подфункции 0 DOS-функции 42 Н:
mov ах,4200Н ; перемещаем указатель файла
хог сх,с ;0:0 относительно начала старта xor dx.dx. int 21Н ,
119
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Затем DOS-функция 3FH читает файл в памяти. Для этого нужно установить Ьх
равным индексу файла, а сх - на число байтов для чтения из файла. Пару
ds:dx необходимо установить на локацию в памяти, где будут сохраняться
данные, прочитанные из файла (метка HOST).
pop сх ;сх содержит размер жертвы
push сх ;сохраняем его для дальнейшего
использования mov ah,3FH ;готовимся к чтению файла mov dx,OFFSET HOST ;в
локации жертвы int 21Н '.выполняем
Прежде чем инфицировать новую жертву, Example выполняет еще две проверки
в подпрограмме FILE_OK. Сначала он смотрит, не инфицирована ли уже
потенциальная жертва. Для этого FILE_OK сравнивает первые 20 байтов
жертвы с собственными первыми 20 байтами. Если они сходны, то файл уже
Предыдущая << 1 .. 29 30 31 32 33 34 < 35 > 36 37 38 39 40 41 .. 123 >> Следующая