Virus Development Kit | VDK Programmer Reference |
Basic InformationВ этом разделе описывается основные концепции написания вирусов используя VDK. 1. В начале Вы должны создать проект masm'а, который будет выглядеть так:
Во-первых, как вы заметили здесь нет секции данных ".data". Код и данные будут храниться в секции кода, либо в динамически выделяемой памяти. Во-вторых мы не включаем lib-файлы, т.к. адреса API-функций мы будет получать сами. Таким образом, удовлетворяя этим условиям мы частично реализуем концепция базонезависимого кода. Для полной базовой независимости в коде нельзя использовать абсолютные адреса памяти. 2. Вот мы уже создали проект и хотим использовать функции из VDK. Функции VDK вызываются, как CALL <имя_функции>, т.к. masm в этом случае генерирует относительный переход. Помимо функций, почти все функции VDK используют API-функции. Но их адреса мы получаем сами и кладем их в переменные. Из-за этого, чтобы использовать API-функции как угодно, мы договариваемся о именовании переменных в которых содержатся адреса API-функций в текущем АП процесса: Если функция называется CreateFile, то мы должны решить какая версия функции нам нужна ANSI или UNICODE. Если ANSI, то получается CreateFileA, иначе CreateFileW. Далее мы добавляем в начале имени переменной "_". В итоге получается имя переменной - _CreateFileA. Если в какой-либо функции VDK используется функция CreateFileA, то ее адрес она берет из переменной _CreateFileA. Как получать адрес API Вы узнаете из другого раздела. 3. Дельта-смещение мы будет хранить в регистре EBP, если мы не находимся внутри процедуры (из-за того что внутри процедуры EBP используется как указатель базы кадра стека). Если мы находимся внутри процедуры, то во-первых, мы будет передавать дельта смещение как параметр функции VDK, а во-вторых в функции мы будет хранить дельта-смещение в регистре EBX. EBX я выбрал потому, что этот регистр остается неизменным после вызова API-функций и он не требуется для часто используемых ассемблерных инструкций. 4. После трех пунктов наметился путь: получить дельта-смещение, получить адреса API, вызывать функции из VDK. Давайте же проделаем это в нашем коде:
Первое на что надо обратить внимание - это макросы startproc и endproc. Я буду их вызывать во-первых, в начале и в конце вируса соответственно, во-вторых, в начале и в конце процедур, чтобы соответствовать соглашениям. Эти макросы сохраняют и соответственно регистры ESI, EDI, EBX, EBP И регистр флагов. Для получения всех нужных адресов функций необходимо вызвать функцию GetAPIs. Функции требуется адрес блока переменных, где будут храниться адреса (имя переменных должны соответствовать соглашениям) и адрес массива строк с именами нужных функций. Также мы передаем в функцию количество функций для которых нужно получить адреса. С помощью GetAPIs можно получать адреса не только из библиотеки KERNEL32.DLL, а из любой другой. Но из KERNEL32.DLL функции нужны всегда. Например функция LoadLibraryA, которая позволяет загрузить новую библиотеку в АП текущего процесса. 5. После получения адресов API-функций можно вызывать функции VDK без особых проблем. | VDK Programmer ReferenceОписание функций и макросов ExamplesПримеры использования функций и макросов VDK "От зеленого к красному"Книга о написании вирусов для Windows от автора VDK DocumentsДокументы необходимые для создания вирусов для Windows ToolsПрограммы, которые Вам помогут AboutО Virus Development Kit
|