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

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

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

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

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

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

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

понадобится выполнить данную подпрограмму.
В нашем вирусе мы будем использовать четыре регистра общего назначения:
ах, Ьх, сх и dx. Сумматор, или ах используется для операций I/O
(input/output - ввод/вывод) и арифметических вычислений. Ьх - он же
базовый регистр - используется для вычислений или в качестве индекса для
расширенной адресации, сх, или счетчик, используется для вычислений и для
подсчета циклов в петлевых операциях, dx или регистр данных, подобно ах,
используется для операций I/O, а также для операций умножения и деления,
в которых используются большие числа.
Теперь вернемся к нашей подпрограмме get_fly, которая находит файл для
инфицирования. Ее результатом, или output, будет первый файл, найденный в
директории, - файл, обладающий нужными нам атрибутами. Следовательно, мы
должны загрузить условия в общие регистры и выполнить прерывание.
Хм, я напомню вам, что регистры общего назначения являются 16-битными: 8
битов в верхней части и 8 - в нижней, ах делится на две половины: старшую
АН и младшую AL. Все регистры общего назначения следуют той же логике: ВН
- BL, СН - CL и DH - DL.
Какие значения нам нужно загрузить в общие регистры для этой
подпрограммы?
Во-первых, 4е hex в АН. Во-вторых, сх должен быть нулевым, чтобы
установить нормальные файловые атрибуты. В-третьих, dx нуждается в
строке, содержащей определение искомого файла.
Чтобы переместить значение 4е hex в АН, мы используем команду MOV.
Команда MOV переносит значение второго операнда в первый без изменения
значения второго операнда. Иными словами, MOV АН, 4еЬ перемещает'значение
4е hex в АН.
51
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
find_fly: хог сх,сх
Далее, нам нужно обнулить значение сх. Это можно сделать двумя способами.
Первый очевиден: MOV СХ, 0. Но истинный вирусмейкер всегда нацелен на
оптимизацию кода. Инструкция MOV СХ, 0 требует 3 байта, в то время как
XOR СХ, СХ берет только 2 байта. Логическая инструкция "эксклюзивного
или" интересна тем, что при равенстве операндов первый операнд
сбрасывается до нуля.
lea dx,comsig
Затем нам нужно загрузить в dx строку с файловым определением, по
которому мы ищем файл. В данном случае мы ищем COM-файлы. Следовательно,
строкой будет *.СОМ. "Звездочка" заказывает поиск всех файлов с
расширением ".СОМ". Строка определяется в адресе comsig в сегменте данных
нашего вируса.
Чтобы переместить эту строку в dx, нам требуется инструкция LEA DX,
comsig, то есть Load Effective Address - загрузить эффективный адрес
comsig в dx. Для этой операции мы, конечно, могли бы использовать команду
MOV: MOV dx, офсет comsig, загружая офсет адреса comsig в dx.
int 21h
Команда INT выполняет желаемую функцию, которую вы установили для нее.
Вкратце говоря, программа останавливается, и таблица векторов прерывания
становится доступной для адреса прерывания, который мы определили. Нам
предлагаются 256 возможных прерываний.
Как я уже говорил, прерывание выполняет подпрограмму, которую мы
определяем с помощью загрузки регистров общего назначения. Теперь пришла
пора позаботиться о результате.
52
ГЛАВА 2. Самовоспроизводство
jc wart growth
Нашей следующей инструкцией является условный прыжок. Если в процессе
встречаются некоторые условия, офсет wart growth (в данном примере)
добавляется в IP, и программа продолжает свою работу в локации
wart_growth, которую определяет пользователь. Существуют множество
условных прыжков и один безусловный прыжок JMP, который прыгает
независимо от существующих условий.
Инструкция прыжка используется для пропуска некоторых данных или для
выполнения другой подпрограммы. В нашем примере мы выполняем проверку и
смотрим, существуют ли какие-то условия.
Как только прерывание выполняется из предыдущей строки и если СОМ-
программа найдена, флаг переноса устанавливается в ноль.
Если программа не найдена, флаг переноса устанавливается в единицу.
Команда JC проверяет, установлен ли флаг переноса в единицу.
Если да, она прыгает к wart growth и выполняет команду в этом офсете.
Если флаг переноса установлен в ноль, говоря о найденйой программе,
прыжок игнорируется и выполняется следующая строка кода.
Вы забыли, то такое флаг? Вкратце скажем, что флаги хранят текущий статус
компьютера и уже выполненного процесса. Среди многих других
использований, флаги могут сохранять или проверять определенные условия,
которые установлены в компьютере на данный момент.
open_fly:
mov ax,3d02h
mov dx,9eh
int 21h
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Ладно, предположим, что наш вирус успешно нашел в текущей директории COM-
файл, и нам теперь нужно открыть его. Это выполняется с помощью int 21 и
определенных настроек регистров. В AL нужно загрузить код доступа.
Используя код 02h, мы открываем файл в режиме чтения/записи. 00h в AL
откроет файл только для чтения, а 01 h в AL установит только запись.
Помните, что ах является 16-битным регистром и состоит из двух частей: АН
и AL.
Следовательно, мы можем загружать оба значения одновременно - например,
Предыдущая << 1 .. 12 13 14 15 16 17 < 18 > 19 20 21 22 23 24 .. 123 >> Следующая