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

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

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

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

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

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

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

кодировать в Ассемблере. Например, в WINDOWS.H мы находим прототип
функции:
HRLEWINAPI Jopen(LPCSTR.int)
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Используя его, мы находим такие кодовые имена, как HFILE, WIN API и
LPCSTR. Заменяя их, мы получаем:
int far pascal _lopen(char FAR*, int)
Другими словами, _lopen получает два параметра: дальний указатель на имя
файла и целое число, которое определяет режим для открытия файла. Это
процедура, которая вызывается дальним вызовом (используя паскалевское
соглашение о вызовах) и возвращает целочисленное значение. Вирус хочет
открыть файл в режиме READ_WRITE. Снова смотрим на WINDOWS.H и находим,
что READ_WRITE - 2.
Теперь мы рассмотрим паскалевское соглашение о вызовах, поскольку оно
применяется в Windows везде. Это соглашение разъясняет, как параметры
передаются к функции и возвращаются назад, как очищается стек при
окончании работы. Оно называется па-скалевским, так как исторически этот
подход использовался в пас-калевских компьютерах. Компилляторы С и C++
используют другой подход. В паскалевском соглашении о вызовах мы
заталкиваем параметры в стек слева направо. Допустим, ds:dx содержит
дальний указатель (селектор:офсет) на имя файла. Тогда мы можем написать
вызов к _1ореп следующим образом:
push ds ;вталкиваем в стек @ сегмент файлового имени push dx ; вталкиваем
в стек @ офсет файлового имени push 2 ; вталкиваем режим открытия файла
call FAR PTR Jo pen
Мы используем инструкции Ассемблера, поэтому можем вталкивать в стек
непосредственное значение.
Далее, паскалевское соглашение о вызовах говорит, что эта функция должна
нести ответственность за очищение стека после выполнения задачи. То есть
_1ореп должна обрываться инструкцией retf 6, а вызывающий оператор не
должен быть связан со стеком. В конечном счете, возвращенное
целочисленное значение передается вызывающему оператору в регистре ах.
В данном случае оно будет индексом файла при удачном выполнении _1ореп.
При неудачном выполнении в ах будет NULL (О или зеро).
4ЛЛ
ГЛАВА 9. Вирусы под Windows
Табл. 21. Запись таблицы перемещений импортированных порядковых
числительных
Офсет Размер Значение Смысл
0 байт 3 Идентифицирует 32-битный указатель .
1 байт 1 Идентифицирует импортированное порядковое число
2 слово Офсетное перемещение 1 Локация перемещения в файле
4 слово Модульная ссылка , Указывает модуль ссылки перемещения
6 слово Функциональная ссылка Указывает функцию ссылок перемещения
Но позвольте! Программа lopen является внешней. Каким образом мы можем
компилировать внешнее значение и ссылаться на него в нашем исполнительном
файле? И где располагается lopen? Здесь мы снова возвращаемся к процессу
динамического связывания. В обычной программе редактор связей выполняет
за вас всю черновую работу и заботится о связывании, используя библиотеку
LIBW.LIB. Библиотека LIBW.LIB содержит код для создания динамических
связей с функциями Windows API. Но вирус должен модифицировать
существующий ЕХЕ-файл. Следовательно, он должен сделать свою работу без
поддержки LIBW.LIB. Чтобы справиться с такой задачей, мы должны понять,
что происходит на более глубинном уровне.
Все функции I/O нашего файла являются частью модуля KERNEL (который может
поставляться с разными именами - например KRNL386.EXE). KERNEL - это
большая DLL для функций Windows API. Чтобы использовать их в программу,
мы должны кодировать поддельный дальний вызов к 0:FFFF (значение, которое
используется механизмом динамического связывания):
DB 09АН ;вызов FAR PTR REL1: DW OFFFFH ,0 ;0000:FFFF
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Рис. 25. Поиск KERNEL
\
Затем необходимо вставить в этот сегмент строку таблицы перемещения,
чтобы функция Windows Exec могла вложить в REL1 правильное значение,
когда файл будет загружаться в память. Таблица перемещения, как вы
помните, является массивом 9-байтовых структур, которые размещаются прямо
после кода в данном сегменте. Нас сейчас интересует создание
импортированных порядковых числительных. Мы хотим, чтобы перемещение
принимало форму, описанную в табл. 21.
Модульная ссылка зависит от файла и рассчитывается из ЕХЕ-заголовка.
Допустим, нас интересует доступ к модулю KERNEL Чтобы найти номер,
ассоциированный с ним, мы заглядываем в таблицу модульных ссылок в
заголовке и используем ее для проверки строк в таблице импортированных
имен (см. рис. 25). Номер записи таблицы модульных ссылок, указывающий на
строку 'KERNEL', является номером, который используется в записи таблицы
перемещения. Здесь мы можем срезать путь. Дело в том, что KERNEL - 1
работает с большинством программ. Каждая программа многократно использует
KERNEL Он требуется для всех программ, поэтому редактор связей вставляет
его первым в таблицу модульных ссылок. То есть мы могли бы ограничиться
первой строкой, но вирус Caro Magnum применяет более педантичный подход и
исследует всю таблццу.
Давайте перейдем к функциональной ссылке. Это значение определяется самим
Предыдущая << 1 .. 98 99 100 101 102 103 < 104 > 105 106 107 108 109 110 .. 123 >> Следующая