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

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

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

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

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

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

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

загружая в ах значение 3d02h. В коде мы всегда используем
шестнадцатиричные значения. Если вы будете выполнять эти простые DOS-
прерывания без подстановки "Ь" после int 21, возникнет ошибка.
Позаботившись об ах, мы переходим к dx. В dx нужно загрузить строку
ASCIIZ, которая является именем атакованного нами файла.
Наверное, вы спросите: "А что там за 9е hex? Это не очень похоже на имя
файла".
Значение 9е hex не является строкой. Оно является офсетом адреса,
содержащего сроку.
Значение 9е hex располагается в PSP, о котором мы говорили выше, в
области, называемой DTA (<D>isk <T>ransfer <A>rea - область обмена с
диском). Как вы помните, PSP стартует в 00h.
Адресом начала DTA является 80 hex. В DTA мы ищем информацию о файле,
найденном в предыдущей подпрограмме. Нам нужно имя файла, которое
находится в офсете leh от начала DTA.
Если мы сложим эти офсеты вместе, то получим 9eh. Загружаем это значение
в регистр dx и далее обращаемся к int 21 h, чтобы выполнить подпрограмму.
eat_fly:
xchg bx,ax mov ah,40h
mov cx,offset homy - offset first fly lea dx,first_fly
54
ГЛАВА 2. Самовоспроизводство
int 21h
Сейчас перед нами стоит задача реального инфицирования открытого файла.
Для этого мы используем int 21h с 40h загруженным в АН.
В предыдущей подпрограмме при открытии файла ваш компьютер назначил файлу
уникальный файловый дескриптор и поместил его в ах. К сожалению, для
функции записи этот дескриптор нужен нам в Ьх. Что делать? Использовать
MOV Ьх, ах?
Да, это сработало бы, но мы стремимся к оптимизации. Давайте я познакомлю
вас с новой директивой Xchg (или eXCHanGe - обмен). Эта команда позволяет
нам обменивать данные между двумя регистрами - то, что нам нужно.
Используя xchg вместо mov, мы экономим 1 байт.
Для современных машин один байт является песчинкой на берегу моря памяти.
Но создание крепкогр (оптимизированного) кода является признаком хорошего
стиля программирования и чертой Искусства.
Далее нам нужно загрузить в сх то количество байтов, которое мы хотим
записать. Вместо числового значения мы используем трюк и позволяем
компьютеру рассчитать расстояние между офсетами предписанных меток.
Мы говорим компьютеру, что расстояние от first_fly до horny равняется
количеству байтов, которое мы хотим записать. Затем мы загружаем в dx
адрес, из которого будет проводиться запись. Адрес first_fly загружается
в dx. Это начало того кода, который мы хотим записать в атакуемый файл.
Выполняем уже знакомую команду int 2ih, и инфекция завершена.
stttch_up:
mov ah,3oh int 21 h mov ah,4fh jmp flnd_tiy
55
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Хорошо, файл инфицирован. Теперь нам нужно закрыть файл с помощью int 21h
и 3eh, вставленных в АН. Поскольку мы уже поместили файловый дескриптор в
Ьх, нам не нужно заботиться о нем.
Далее, наш вирус стартует и ищет следующий файл для инфицирования. Мы
загружаем 4fh в АН и прыгаем назад к подпрограмме поиска файла. Наверное,
вы уже заметили, что мы используем те же самые регистры общего
назначения.
Вирус Toad представляет собой одну большую петлю. Эта петля заражает файл
за файлом, пока флаг переноса не будет установлен в единицу, указывая на
то, что других COM-файлов не обнаружено. После этого пользователю
демонстрируется сообщение и вирус останавливает свою работу.
wart_growth: mov ah,О mov dx.offset wart int 21h
Следующая подпрограмма может быть удалена без вреда для вируса. Она
просто выводит сообщение на экран. Это делается загрузкой int 21h с 09h в
АН.
Адрес строки с содержанием того, что мы хотим изобразить на экране,
загружается в dx. Фактически, сообщение, изображаемое на экране, означает
конец работы вируса. После него выполняется следующая строка:
суа: int 20h
После демонстрации сообщения вирусу нужно прервать свое действие.
Загружаем 4СН в АН и выполняем int 21h. Как видите, в программе
используется int 20h. Это древнее, вышедшее из употребления прерывание,
но оно все еще работает. Мы можем применять любое из двух прерываний. При
выборе int 20h нам не нужно устанавливать регистры.
56
ГЛАВА 2. Самовоспроизводство
comsig db "*.com",0 wart db Поздравления! Вы заразили все COM-файлы в
этой', 10,13 db '/вфвктарии вирусом lbad. Хорошего вам дня.', 10,13,'S'
Теперь мы переходим к более легкой части вируса - к блоку данных. Именно
здесь определяются данные.
Сначала определяем comsig. Это наша сигнатура (подпись) СОМ-файла -
"звездочка" (*) и расширение ".СОМ". Мы применяем DB (define byte -
определяющий байт) и определяем им строку, которая находится в кавычках.
Предписывая для comsig значение "*.СОМ", мы ставим запятую и 0, указывая
на конец строки.
Предписывая строку wart из нескольких символов, мы включаем 10 и 13 в
конец каждой строки. Если после первой строки мы не поставим 10 и 13, то
две строки сольются и будут выведены на экран вместе.
Символ $ в конце второй строки завершает полную строку сообщения.
horny label near
Horny (рогатая) - это метка в процедуре Toad (жаба). Она действует только
Предыдущая << 1 .. 13 14 15 16 17 18 < 19 > 20 21 22 23 24 25 .. 123 >> Следующая