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

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

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

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

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

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

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 25 26 27 28 29 30 < 31 > 32 33 34 35 36 37 .. 123 >> Следующая

mov ax,4200h xor cx,cx xor dx.dx int 21 h
Чтобы записать прыжок в код вируса, мы перемещаем указатель файла в
начало программы-жертвы. После загрузки 42 hex в АН нам нужно обнулить сх
и dx. Для этого мы используем инструкцию XOR (так как, если регистр
"ХОИ"-ится сам с собой, он очищается до нуля). Интересно отметить, что
данная подпрограмма во многих вирусах пишется так:
to_begin:
mov ax,4200h cwd
xor cx.cx int 21 h
101
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Инструкция "cwd" (Convert Word to Doubleword - конвертирование слова в
двойное слово) расширяет значение в ах с помощью dx их WORD в Doubleword
и таким образом обнуляет dx.
writejump: mov ah,40h mov cx,3
lea dx,[bp+newjump] int 21 h
Эта подпрограмма записывает инструкцию прыжка, которая хранится в newjump
+ bp, в начало программы-жертвы. Длина прыжка равна 3 байтам, как это и
учтено в значении, загруженном в сх.
to_end:
mov ax,4202h xor cx,cx xor dx.dx int 21 h
По сути, это та же подпрограмма to_begin, кроме того, что она перемещает
указатель файла в конец жертвы, чтобы мы могли записать основное тело
вируса. Единственным отличием между to_end и to_begin является 02 hex,
загружаемое в AL.
write_body: mov ah,40h
mov cx,homy_toad-toad lea dx,[bp+toad] int 21 h
Эта подпрограмма практически является близняшкой writejump. С ее помощью
мы записываем основное тело вируса в конец жертвы, сх загружается длиной
вируса без учета первоначального прыжка. А мы помним, что сх является
системой
102
ГЛАВА 3. Сложные СОМ-инфекторы
меры, dx содержит стартовый адрес, из которого производится запись.
close.up: mov ah,3eh int 21 h
Установка 3e hex в АН и инициализация int 21 закрывает текущий файл. Эта
операция обновляет дату и размер файла в директории и в FAT (file
allocation table - таблице размещения файлов).
. next_bug: mov ah,4fh jmp next
Эта инструкция должна быть знакома вам по переписывающим вирусам.
Перемещение 4f hex в АН устанавливает подпрограмму поиска следующего
файла. Она берет атрибуты, загруженные при инициации подпрограммы с 4е
hex в get one, и находит следующий файл, содержащий эти атрибуты. Вы
можете заметить, что int 21 выполняется после того, как будет выполнен
прыжок к следующему файлу.
bug_out: mov dx,80h mov ah,1ah int 21 h retn
Подпрограмма bug out заменяет адрес DTA на 80 hex и передает контроль
программе-жертве. В случае выполнения первого поколения вируса известное
нам прерывание int 20 (приостановка программы) использует первые три
байта, чтобы приостановить операции. Инструкция "retn* говорит о том, что
мы возвращаем контроль программе-жертве. Инструкция возврата перемещает
слово на вершине стека в IP.
Помните, в подпрограмме first_three мы втолкнули di (100 hex) в стек? На
самом деле мы установили последовательность возврата, чтобы вернуть
контроль программе-жертве. Если бы мы
103
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
не втолкнули di (100 hex) в стек в начале вируса, нам пришлось бы сейчас
заменять инструкцию retn на:
movdi,100h jmp di
или на:
push 100h ret
Все эти строки кода передают контроль офсету 100 hex, то есть началу
жертвы в памяти.
comsig db '\com\0 thrbyte db 0cdh,20h,0 nevyjump db 0e9h,0,0
horny_toad label near
hide_dta db 43 dup (?)
Теперь займемся областью данных нашего вируса. По особому договору
программистов мы определяем все необходимые данные в конце вируса. Так
как мы не заявляли эту область как блок данных информация могла быть
размещена и в начале вируса. Но программисты тоже живут по понятиям, и
договор для них -. святое дело.
Информация, представленная здесь, выглядит знакомой, поскольку вирус уже
инициализировал все эти данные во время выполнения представленного выше
кода. Прежде всего, мы определяем thrbyte. Thrbyte содержит первые три
байта инфицируемой программы, которые заменяются прыжком к основному телу
вируса.
При первом выполнении вируса это будет 20 hex или программа приостановки
int 20h. Фактически, это те три байта, которые были записаны в память в
локацию 100 hex.
104
ГЛАВА 3. Сложные СОМ-инфекторы
При окончании процесса инфицирования мы передаем контроль жертве, и
выполняется инструкция в 100 hex. При первом выполнении вируса мы просто
хотели, чтобы вирус завершил свою работу после инфицирования всех
найденных СОМ-файлов. В ином случае мы получили бы бесконечную петлю, в
которой вирус продолжал бы поиск файлов "вечно" (пока его бы не
уничтожили).
Далее мы определяем newjump.
Первоначально newjump содержит только инструкцию пустого прыжка (е9 hex).
Newjump рассчитывается в jmp_size и записывается во вновь зараженный файл
в подпрограмме write_jump.
Следующая строка является маркером - horny_toad. Ту же метку мы
использовали в переписывающем вирусе как ссылку на конечную точку
вирусного кода. Здесь она служит той же цели.
Последней в вирусе мы определяем hide_dta. Это область, которую мы
используем для хранения DTA во время действия вируса. DTA имеет длину в
43 (2В hex) байта. Поэтому мы применяем инструкцию удвоения (duplicate) и
Предыдущая << 1 .. 25 26 27 28 29 30 < 31 > 32 33 34 35 36 37 .. 123 >> Следующая