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

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

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

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

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

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

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 97 98 99 100 101 102 < 103 > 104 105 106 107 108 109 .. 123 >> Следующая

N+M+4 1 Конец маркера ресурсных имен (должен быть 0)
Определение записи типа ресурсов
Офсет Размер Имя Описание
0 2 Ю типа Одно значения для папки, другое для меню и т. д.
2 2 Счет Количество ресурсов этого типа в ехе-файле
4 4 В резерве
8 12*Cnt Информация об имени Массив структур для информации об
имени (описывается ниже)
Определение записи информации об имени
Офсет Размер Имя Описание
0 2 Офсет Офсет ресурсных данных (в логических секторах)
2 2 Длина Длина ресурса (в байтах)
4 2 Флаги 10Н=подвижный, 20Н="зашаренный", 40Н=предзагрузочный
6 2 ID Если старший бит установлен, это числовой ID; иначе, это
офсет к строке в таблице ресурсов относительно начала этой таблицы
8 4 В резерве
ГЛАВА 9. Вирусы под Windows
Инфицирование файла
Сейчас мы обсудим вирус Caro Magnum. Он похож на традиционный DOS-вирус и
так же выполняется перед жертвой, к которой крепится. Сначала вирус
находит первоначальную пару cs:ip для программы, которая хранится в
информационном блоке в офсете 14Н. Вход cs - это номер сегмента (например
1,2,3), который является индексом в сегментной таблице.
ip идентифицирует офсет в сегменте, в котором начинается выполнение
программы. Сегментная таблица содержит массив 8-байтовых записей - по
одной на каждый сегмент в файле. Вирус ищет соответствующую строку
таблицы и узнает, где расположен сегмент и какова его длина. Этот процесс
описан на рис. 23. Выполнив поиск, вирус прикрепляется после кода в этом
сегменте и подстраивает первоначальную cs:ip в информационном блоке.
Кроме того, он подстраивает размер этого сегмента в сегментной таблице.
Рис. 23. Поиск стартового сегмента кода Первоначальный сегмент кода
обычно не является последним сегментом ЕХЕ-файла. Если мы запишем вирусов
конец этого сегмента, то перепишем код в других сегментах. Значит, вирус
сначала должен переместить все, что следует за первоначальным сегментом
кода, и создать себе место. При этом нужно координировать перестановки в
файле с указателями в сегментной таблице и таблице ресурсов. То есть
вирус должен сканировать обе таблицы и подст-
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
раивать офсеты каждого сегмента и ресурса, которые размещаются после
первоначального сегмента кода.
В дополнение к подвижным сегментам вирус должен сдвинуть данные
перемещения в сегмент, который он инфицирует. В Windows EXE данные
перемещения для каждого сегмента хранятся после кода в этом сегменте.
Размер в записи сегментной таблицы является размером фактического кода.
Флаг в таблице входов указывает на наличие данных перемещения. Слово
после последнего байта кода в сегменте говорит о том, сколько 8-байтовых
векторов перемещения следует за кодом (см. рис. 24). Вирус должен
сдвинуть эти данные перемещения из конца кода жертвы в то место, где
заканчивался его собственный код перед вставкой в данный сегмент.
Завершив эти перемещения и подстройки таблиц, вирус может вставить свой
код в нужное место.
Закончив выполнение, он совершает прыжок к файлу и передает контроль
оригинальной точке входа. Дополнительная сложность заключается в том, что
все локации файла для сегментов и ресурсов хранятся в логических
секторах. Эти секторы не имеют ничего общего с секторами диска. Они
используют одно слово для размещения программных элементов в файле.
Размер такого сектора обычно варьируется от 16 до 512 байтов, но он может
быть равен 2N, где N хранится в информационном блоке в офсете 32Н. С
помощью этих секторов вирус динамично вычисляет локации в файле.
Рис. 24. Данные перемещений в сегменте
ГЛАВА 9. Вирусы под Windows
Использование Windows API
Многие DOS-службы прерывания 21Н доступны под Windows, включая те,
которые нужны для записи Windows вируса: обычные файловые I/O и
подпрограммы файлового поиска. В принципе, вызовы к Windows API
{Application Program Interface - интерфейс прикладной программы) не
обязательны. Вполне возможно написать вирус, который будет прыгать из
DOS-основанной программы в Windows-основанную программу. Тем не менее,
вирус Caro Magnum использует API. Это "мудрый" вирус, который может
напрямую вызывать Windows API. Дело в том, что "подпольные" DOS-службы
плохо документированы, и многие из них не "дружат" с Windows 9.x.
В высокоуровневых языках использование Windows API является легким делом.
На Ассемблере все значительно усложняется. К примеру, в DOS, если нужно
было открыть файл, вы применяли следующий код:
mov ax,3D02H
mov dx,OFFSET FNAME
int 21H
Мы по-прежнему можем использовать этот вызов, когда работаем в защищенном
режиме Windows. Но чтобы применить Windows API, нам нужно вызвать
Windows-функцию _1ореп. Эта функция объявляется следующим образом:
I
HFILE Jopen(lpszFileName.fnOpenMode)
Точнее, она выглядит так на языке С. А как такой вызов будет выглядеть в
Ассемблере? Здесь нам нужно углубиться в тему. Сначала рассмотрим файл
WINDOWS.H, поставляемый SDK или Borland C++. В нем вы используете поиск
определений и спускаетесь на достаточно низкий уровень, который можно
Предыдущая << 1 .. 97 98 99 100 101 102 < 103 > 104 105 106 107 108 109 .. 123 >> Следующая