Создание антивирусного программного обеспечения с применением языка программирования низкого уровня: Методические указания по выполнению лабораторных работ по курсу «Информационная безопасность», страница 11

Воспринимает два параметра: 1-й – количество байт памяти, 2-й флаги, определяющие тип выделяемой памяти. Наиболее часто встречаемый флаг – HEAPZEROINIT, который означает, что выделяемую память необходимо инициализировать нулями. Без этого флага состояние памяти не определено.

Возвращает в EAX линейный адрес начала выделенного участка в случае успешного выполнения операции.

Пример вызова:

VMMCall _HeapAllocate, <65536, HEAPZEROINIT>

mov  [Buf1], eax

_HeapFree – освобождает выделенную драйверу память. Вызывается с двумя параметрами: 1-й – адрес памяти, предварительно выделенной с помощью _HeapAllocate, второй – зарезервирован и должен быть ноль.

Пример:

VMMCall _HeapFree, <[Buf1], 0>

Следует отметить, что драйверу не следует слишком часто обращаться к функциям выделения и освобождений системной памяти, т.к. при этом она фрагментируется (т.е. разбивается на маленькие кусочки), а средств, позволяющих дефрагментировать системную «кучу» в Windows 9x нет.

Поэтому, разработчик драйвера должен вначале оценить требуемое ему количество памяти, а после этого начинать создавать драйвер.


Заключение

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

При анализе причины заражения компьютера вирусом и принципа попадания вируса в компьютер было принято решение создать антивирусный монитор, который будет встраиваться в ядро операционной системы и контролировать операции с файлами, производимыми ею. При нахождении вируса, монитор должен запретить доступ к такому файлу.

Для решения поставленной задачи был выбран вариант написания драйвера виртуального устройства (файл VxD) под операционные системы Windows-95 OSR2, Windows 98 и Windows Millennium Edition с помощью применения программирования на языке низкого уровня – ассемблере.

В результате проведенной работы был создан монитор, который проверяет все открываемые текстовые файлы на компьютере на наличие «вируса», т.е. в данном случае – это заранее определенная последовательность байт.

При тестировании монитора было выявлено, что он 100% отслеживает все обращения к файловой системе, независимо от того, где они производятся (проводник Windows, Windows Commander, Far Manager, Дос-задача, другой драйвер и т.д.). На основании этого можно считать, что поставленная при написании этого методического пособия цель была достигнута.


Приложение – полный исходный текст антивирусного монитора

Файл «AV.ASM»

.686p

include vmm.inc

include vwin32.inc

include shell.inc

include ifs.inc

include ifsmgr.inc

;-- Declare device

DECLARE_VIRTUAL_DEVICE  AV, 4, 0, AV_Control,\

                  UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER

;-- Locked data

VxD_LOCKED_DATA_SEG

pOldFSHook  dd    0     ;ptr to Old IFS hook

Buf1        dd    0     ;ptr to Memory buffer

FileNameBuf dd    0

FileBuf     dd    0     ;ptr to File buffer

MyReq       dd    0     ;Flag = 1 if my request, 0 otherwise

HelloTxt    db    'Antiviral monitor started...', 0

VirusTxt    db    '!Virus!', 0

VirusFoundTxt     db    'Warning! Virus found in this file:', 0

VxD_LOCKED_DATA_ENDS

;-- Locked code

VxD_LOCKED_CODE_SEG

Begin_control_dispatch  AV

            Control_Dispatch W32_DeviceIoControl, OnDeviceIoControl

            Control_Dispatch SYS_DYNAMIC_DEVICE_INIT, OnSysInit

            Control_Dispatch SYS_DYNAMIC_DEVICE_EXIT, OnSysExit

End_control_dispatch    AV

;-- OnSysInit

BeginProc   FileSysApiHook

            push  ebp

            mov   ebp,esp

@@pISF            equ   ebp + 08h

@@FuncNum   equ   ebp + 0Ch

@@Drive     equ   ebp + 10h

@@ResFlag   equ   ebp + 14h

@@CodePage  equ   ebp + 18h

@@PioReq    equ   ebp + 1Ch

            cmp   [MyReq], 0

            jnz   @@def

            cmp   dword ptr [@@FuncNum], IFSFN_OPEN

            jz    @@OpFile

@@def:

            mov   eax, [pOldFSHook]