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

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

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

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

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

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

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 37 38 39 40 41 42 < 43 > 44 45 46 47 48 49 .. 123 >> Следующая

заголовок, который описывает атрибуты блока. Сами блоки памяти делятся на
16-байтовые параграфы. Когда DOS назначает блоки памяти для программы,
МСВ описывает, как будет использован данный блок памяти.
МСВ располагается прямо перед блоком памяти, который он описывает. Все
МСВ образуют цепь, и каждый МСВ в цепи имеет определенный статус - М или
Z.
Статус М указывает, что данный МСВ расположен в цепи, а статус Z
указывает на последний МСВ в цепи.
МСВ -
Блок памяти -
- МСВ -
- Блок памяти -
- МСВ -
- Блок памяти -
и так далее...
Рис. 8. Формат МСВ
146
ГЛАВА 4. Вирус - резидент памяти
Какую же информацию мы можем найти в МСВ? Формат МСВ следующий:
Табл. 5. Характеристики формата МСВ
Блоки управления памятью
Офсет Имя Длина (байты) Описание
0 Локация 1 Ctarryc МСВ (М или Z)
1 Владелец 2 PSP сегмент начала памяти
3 Размер 2 Длина в параграфах
5 Неизвестно 3 Зарезервировано
8 Имя владельца 8 Имя файла (появляется в картах памяти)
Теперь рассмотрим техники, которые используют манипуляции с МСВ для
выделения памяти вирусному коду.
Мы уже обсудили перехват прерываний для активизации вирусного кода и
методы становления резидентом памяти.
Сейчас нам нужно научиться назначать память с помощью DOS-функций и
манипуляций с МСВ.
Ниже представлен рисунок, который отражает логику метода МСВ в процессе
вирусной инфекции.
Программа-жертва получила всю доступную память.
Вирус должен позаимствовать у жертвы часть памяти для себя и
переместиться в эту область памяти.
147
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
До инфицирования После инфицирования
МСВ
Блок
памяти
МСВ
Программа
Верхняя часть памяти
Верхняя часть памяти
Рис. 9. Логика метода МСВ в процессе вирусной инфекции
При назначении памяти мы будем использовать следующие прерывания: функцию
4ah (установить размер блока памяти) и функцию 48h (назначить блок
памяти) прерывания 21.
Сначала вирус должен затребовать максимальное количество доступной
памяти. Это выполняется с помощью функции 4ah.
Наша стратегия такова: мы требуем неординарное количество памяти, функция
не может обеспечить нас этим количеством и указывает нам фактическое
количество доступной памяти. Код будет следующим:
mov ah,4ah mov bx.Offffh int 21 h
Запрос Offffh означает 65535 параграфов памяти - абсолютно неправильное
значение.
МСВ
Блок
памяти
МСВ
Программа
МСВ
Вирус
148
ГЛАВА 4. Вирус - резидент памяти
В результате в регистр Ьх вернется максимальное значение фактической
доступной памяти. Имеются другие методы для этой операции.
К примеру, вы можете получить непосредственный доступ к МСВ и прочитать
значение оттуда. Когда программа загружается в памяти, ей выделяется вся
доступная память. Это значение появляется в МСВ в офсете 3.
Мы можем получить непосредственный доступ к МСВ, декрементируя сегментный
регистр до адреса МСВ. Код для этой операции таков:
mov ax.ds dec ах mov ds.ax
; получаем МСВ из DS mov bx.word ptr ds:[03]
В bx содержится размер МСВ или полной доступной памяти.
Вооружившись данной информацией мы можем вычесть из размера МСВ известный
нам размер вируса плюс 1 и выполнить функцию снова. Например:
mov ax,4ah
sub bx,(endOfVirus-beginOfVirus+15)/16+1 int 21 h
При расчете количества назначаемой памяти не забывайте, что счет ведется
в параграфах. Поэтому размер вируса нужно разделить на 16. Размер вируса
вычисляется вычитанием офсета для конца вируса из офсета начала и
добавлением 15. Добавление 15 - это способ округления.
Расчет должен быть точным, чтобы не превысить требуемого количества. Если
вы переместите в память хотя бы один неучтенный байт, возникнет
вероятность того, что будет переписано "М> в следующем МСВ, а это вызовет
сбой системы.
Код назначения памяти для вируса будет следующим: mov ax,48h
149
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
mov bx,(endOfVirus-beginOfVirus+15)/16 int 21 h
После того как мы назначили память для вируса, нам нужно изменить МСВ и
переместить вирус в память. При успешном выполнении функции 48h
сегментный адрес назначенного блока памяти возвращается в ах. А мы с вами
знаем, что МСВ располагается перед своим блоком памяти. Чтобы получить
доступ к МСВ, нам нужно декрементировать сегментный адрес в ах и
передвинуть адрес в регистр дополнительного сегмента, то есть в ES.
Взгляните на этот код:
dec ах mov es.ax
Итак, мы можем взять МСВ из ES. Теперь рассмотрим структуру МСВ и
прикинем, что нам нужно изменить. Прежде всего мы изменим статус МСВ на
"Z" - конец цепи. Здесь вы можете использовать "Z" или его
шестнадцатиричный эквивалент (5ah). Опытные мастера меняют PSP-сегмент
владельца в офсете 1 и указывают, что данный блок принадлежит DOS. Это
выполняется перемещением 8 в локацию.
Если в этой локации находится ноль, то блок свободный. Фактически, вы
можете установить сегментный адрес, чтобы тот указывал на код вируса, но
в целях выживания среди злобных антивирусных программ владельцем лучше
сделать DOS, установив значение 8.
Предыдущая << 1 .. 37 38 39 40 41 42 < 43 > 44 45 46 47 48 49 .. 123 >> Следующая