Вирусы под Windows 95
Вирусы под Windows 95
Формат Portable Executable используется Win32, Windows NT и Windows 95, что делает его очень популярным, и в будущем, возможно, он станет доминирующим форматом EXE. Этот формат значительно отличается от NE-executable, используемого в Windows 3.11.
Вызов Windows 95 API
Обычные приложения вызывают Windows 95 API (Application Program Interface) используя таблицу импортируемых имен. Когда приложение загружено, данные, необходимые для вызова API, заносятся в эту таблицу. В Windows 95, благодаря предусмотрительности фирмы-производителя Microsoft, модифицировать таблицу импортируемых имен невозможно.
Эта проблема решается непосредственным вызовом KERNEL32. То есть необходимо полностью игнорировать структуру вызова и перейти непосредственно на точку входа DLL.
Чтобы получить описатель (Handle) DLL/EXE, можно использовать вызов API GetModuleHandle или другие функции для получения точек входа модуля, включая функцию получения адреса API GetProcAddress. Как вызывать API, имея возможность вызывать его и в то же время такой возможности не имея? Ответ: вызывать API, расположение которого в памяти известно – это API в файле KERNEL32.DLL, он находится по постоянному адресу.
Вызов API приложениями выглядит приблизительно так:
call API_FUNCTION_NAME
например:
call CreateFileA
После компиляции этот вызов выглядит так:
db 9Ah ;инструкция call dd ???? ;смещение в таблице переходов
Код в таблице переходов похож на такой:
jmp far [offset into import table]
Смещение в таблице импортируемых имен содержит адрес диспетчера для данной функции API. Этот адрес можно получить с помощью GetProcAddress API. Диспетчер функций выглядит так:
push function value call Module Entrypoint
Зная точки входа, можно вызывать их напрямую, минуя таблицу этого модуля. Поэтому можно заменить вызовы KERNEL32.DLL в его стандартной точке на вызовы непосредственно функций. Просто сохраняем в стеке значение функции и вызываем точку входа в модуль.
Модуль KERNEL32 располагается в памяти статически – именно так и предполагалось. Но конкретное место его расположения в разных версиях Windows 95 отличается. Это было проверено. Оказалось, что одна функция (получение времени/даты) отличается номером. Для компенсации этих различий добавлена проверка двух различных мест на наличие KERNEL32. Но если KERNEL32 все-таки не найден, вирус возвращает управление программе-носителю.
Адреса и номера функций
Для June Test Release KERNEL32 находится по адресу 0BFF93B95h, для August Release – по адресу 0BFF93C1Dh. Можно найти другие значения функции, используя 32-битный отладчик. В таблице 3.1 приведены адреса функций, которые нужны для работы вируса.
Таблица 3.1. Адреса некоторых функций KERNEL
Соглашения о вызовах
Windows 95 написан на языках C++ (в основном) и Assembler. И, хотя соглашения о вызовах просты для применения, Microsoft их не использует. Все API под Win95 используют Pascal Calling Convention. Пример – API, описанный в файлах справки Visual C++:FARPROC GetProcAddress(
HMODULE hModule, // описатель DLL?модуля
LPCSTR lpszProc // имя функции
);На первый взгляд кажется, что достаточно лишь сохранить в стеке описатель DLL-модуля (он стоит перед указателем на имя функции) и вызвать API. Но это не так. Параметры, согласно Pascal Calling Convention, должны быть сохранены в стеке в обратном порядке:
push offset lpszProc
push dword ptr [hModule]
call GetProcAddressИспользуя 32-битный отладчик, можно оттрассировать вызов и найти вызов KERNEL32 для каждого конкретного случая. Это позволит получить номер функции и обойтись без необходимой для вызова таблицы импортируемых имен.
Заражение файлов формата PE-executable
Определение положения начала PE-заголовка происходит аналогично поиску начала NE-заголовка. Если смещение таблицы настройки адресов (поле 18h) в заголовке EXE-файла 40h или больше, то по смещению 3Ch находится смещение PE-executable заголовка. Сигнатура PE-executable («PE») находится, как и у NE-executable EXE-файла, в начале нового заголовка.
Внутри PE-заголовка находится таблица объектов. Ее формат наиболее важен по сравнению с прочими. Для добавления вирусного кода в носитель и перехвата вирусом управления необходимо добавить элемент в таблицу объектов.
Основные действия заражения PE-executable файла:
1. Найти смещение заголовка PE-executable в файле.
2. Считать достаточное количество информации из заголовка для вычисления его полного размера.
3. Считать весь PE-заголовок и таблицу объектов.
4. Добавить новый объект в таблицу объектов.
5. Установить точку входа RVA на новый объект.
6. Дописать вирус к файлу по вычисленному физическому смещению.
7. Записать измененный PE-заголовок в файл.
Для определения расположения таблицы объектов следует воспользоваться значением переменной «HeaderSize» (не путать с «NT headersize»), которая содержит совместный размер заголовков DOS, PE и таблицы объектов.
Для чтения таблицы объектов необходимо считать HeaderSize байт от начала файла.
Таблица объектов расположена непосредственно за NT-заголовком. Значение «NTheadersize» показывает количество байт, следующих за полем «flags». Итак, для определения смещения таблицы объектов нужно получить NTheaderSize и добавить размер поля флагов (24).
Добавление объекта: получив количество объектов, умножить его на 40 (размер элемента таблицы объектов). Таким образом определяется смещение, по которому будет расположен вирус.
Данные для элемента таблицы объектов должны быть вычислены с использованием информации в предыдущем элементе (элементе носителя).RVA=((prev RVA+prev Virtual Size)/OBJ Alignment+1)
*OBJ Alignment
Virtual Size=((size of virus+buffer any space)/OBJ Alignment+1)
*OBJ Alignment
Physical Size=(size of virus/File Alignment+1)*File Alignment
Physical Offset=prev Physical Offset+prev Physical Size
Object Flags=db 40h,0,0,C0h
Entrypoint RVA=RVAТеперь необходимо увеличить на единицу поле «количество объектов» и записать код вируса по вычисленному «физическому смещению» в размере «физического размера» байт.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Вирусы
Вирусы Вирус – это приносящая вред компьютерная программа, способная размножаться, создавая свои копии, которые, в свою очередь, также сохраняют способность к размножению (рис. 10.1). В последние годы в связи с бурным развитием сетевых технологий определение слова «вирус»
Обыкновенные вирусы
Обыкновенные вирусы К этой категории относятся программы, которые являются классическими вирусами в чистом виде. В данном подразделе они стоят всего лишь на четвертом месте потому, что в наши дни эти вирусы потеряли былую распространенность. Обыкновенные вирусы
Вирусы и черви
Вирусы и черви Вирус — это обычная программа, которая выполняет вредные, а иногда и просто разрушительные действия. Вы спросите, что может сделать вирус? Да практически все, что можно сделать в вашей операционной системе. Давайте рассмотрим это чуточку подробней на
7. 1.1. Вирусы в Linux
7.1.1. Вирусы в Linux Первым делом нужно разрушить миф о том, что в Linux нет вирусов. Вирусы в Linux есть. По данным сайта www.virus-list.com для Linux написано всего 1111 вирусов (на момент написания этих строк). Почему "всего"? Потому что по данным того же www. viruslist.com всего вирусов и их
1.1. Гонки на выживание: Windows ХР, Windows Vista и Windows 7
1.1. Гонки на выживание: Windows ХР, Windows Vista и Windows 7 Время не стоит на месте, и уж тем более на месте не стоят новые технологии. Появление многоядерных процессоров, мощных видеокарт и других новых устройств, которые не могут полностью раскрыть свой потенциал в существующих
6.3.2. Троянские вирусы
6.3.2. Троянские вирусы Вы знаете, что такое троянский конь? Очень давно троянский царевич Парис украл гречанку Елену из города Спарты. Ее муж, царь Спарты, собрал войско и пошел на Трою. Осада Трои длилась очень долго и безуспешно. Поэтому царь Спарты Менелай решил обхитрить
Компьютерные вирусы
Компьютерные вирусы Наверное, невозможно сегодня встретить пользователя компьютера, который не слышал бы о компьютерных вирусах. Эти вредоносные программы в огромном количестве «представлены» в Интернете, и их количество растет с каждым днем. Самое неприятное, что
Вирусы и антивирусы
Вирусы и антивирусы Компьютерные вирусы возникли довольно давно. Компьютерный вирус – это по сути программа, которая подобно вирусам в живой природе способна сама себя воспроизводить и заражать пока еще «здоровые» компьютеры. Помимо самостоятельного воспроизведения
25.5.1. Вирусы и Linux
25.5.1. Вирусы и Linux Linux считается одной из самых безопасных операционных систем. Она устойчива, ее сетевые сервисы надежны и… для Linux существует очень мало вирусов. Почему? Давайте подумаем. Представим на некоторое время, что мы — вирусописатели. Для какой операционной
Вирусы и трояны
Вирусы и трояны Атака состоит в применении специально спроектированного компьютерного вируса или червя для заражения установленной у вас программы PGP. Этот гипотетический вирус может быть устроен так, чтобы перехватывать закрытый ключ и пароль или содержимое
Компьютерные вирусы
Компьютерные вирусы Что такое компьютерный вирус? Я встречал людей, которые искренне считают, что компьютерный вирус похож на биологический организм (рис. 7.3). Но компьютерный вирус — это просто компьютерная программа. И заразить компьютер воздушно-капельным путем
11.1.2. Троянские вирусы
11.1.2. Троянские вирусы Вы знаете, что такое троянский конь? Если нет, то я вам вкратце объясню. Очень давно троянский царевич Парис украл гречанку Елену из города Спарты. Ее муж, царь Спарты, собрал войско и пошел на Трою. Осада Трои длилась очень долго и безуспешно. Поэтому
Глава 1 СОМ-вирусы
Глава 1 СОМ-вирусы В этой главе рассказано об алгоритмах работы вирусов, заражающих COM-файлы, и способах их внедрения. Представлен исходный текст одного из таких вирусов с подробными комментариями. Также приведены основные сведения о структуре и принципах работы
Глава 2 EXE-вирусы
Глава 2 EXE-вирусы В этой главе рассказано о вирусах, заражающих EXE-файлы. Приведена классификация таких вирусов, подробно рассмотрены алгоритмы их работы, отличия между ними, достоинства и недостатки. Для каждого типа вирусов представлены исходные тексты с подробными
Глава 3 Вирусы под Windows
Глава 3 Вирусы под Windows В этой главе рассказано о вирусах, заражающих файлы в операционной среде Windows. Наиболее подробно рассмотрены вирусы под Windows 95. Представлены исходные тексты вирусов с подробными комментариями. Также приведены основные сведения о запускаемых файлах
Вирусы под Windows 3.11
Вирусы под Windows 3.11 В исполняемом файле Windows содержатся в различных комбинациях код, данные и ресурсы. Ресурсы – это BIN-данные для прикладных программ. Учитывая возможность запуска файла из DOS, формат данных должен распознаваться обеими системами – и DOS, и Windows. Для этого все