USB-Guard
Файл signature_engine.h

Потоковый сканер байтовых (HEX) сигнатур для посекторного чтения USB. Подробнее...

#include <stddef.h>

См. исходные тексты.

Классы

struct  VirusSignature
 Описание одной вирусной сигнатуры (последовательности байтов). Подробнее...
struct  ScanState
 Состояние потокового сканера. Хранит "хвост" предыдущего блока. Подробнее...

Макросы

#define SIG_MAX_LEN   32U
 Максимальная длина одной сигнатуры в байтах.

Перечисления

enum  Error_Codes_SI { SI_SUCCESS = 0 , SI_NULL_STATE_POINTER = 1 }
 Коды ошибок scan_init(). Подробнее...
enum  Error_Codes_SF {
  SF_SUCCESS = 0 , SF_NULL_STATE_POINTER = 1 , SF_NULL_BLOCK_POINTER = 2 , SF_NULL_SIGS_POINTER = 3 , SF_NULL_FLAG_POINTER = 4 , SF_NULL_MATCH_NAME_POINTER = 5 , SF_ZERO_SIGNATURE_LENGTH = 6 ,
  SF_SIGNATURE_TOO_LONG = 7
}
 Коды ошибок scan_feed(). Подробнее...

Функции

int scan_init (ScanState *state)
 Инициализирует состояние сканера (сбрасывает хвост).
int scan_feed (ScanState *state, const unsigned char *block, unsigned int block_len, const VirusSignature *sigs, unsigned int sig_count, int *virus_flag, const char **match_name)
 Скармливает сканеру один блок данных и ищет в нём сигнатуры.

Подробное описание

Потоковый сканер байтовых (HEX) сигнатур для посекторного чтения USB.

Движок не зависит от платформы: компилируется и на ПК (gcc), и в Arduino. Данные подаются блоками (например, секторами по 512 байт) через scan_feed(). Сигнатуры, лежащие на границе двух блоков, ловятся за счёт "хвоста" (carry).

Макросы

◆ SIG_MAX_LEN

#define SIG_MAX_LEN   32U

Максимальная длина одной сигнатуры в байтах.

Перечисления

◆ Error_Codes_SF

Коды ошибок scan_feed().

Элементы перечислений
SF_SUCCESS 
SF_NULL_STATE_POINTER 
SF_NULL_BLOCK_POINTER 
SF_NULL_SIGS_POINTER 
SF_NULL_FLAG_POINTER 
SF_NULL_MATCH_NAME_POINTER 
SF_ZERO_SIGNATURE_LENGTH 
SF_SIGNATURE_TOO_LONG 

◆ Error_Codes_SI

Коды ошибок scan_init().

Элементы перечислений
SI_SUCCESS 
SI_NULL_STATE_POINTER 

Функции

◆ scan_feed()

int scan_feed ( ScanState * state,
const unsigned char * block,
unsigned int block_len,
const VirusSignature * sigs,
unsigned int sig_count,
int * virus_flag,
const char ** match_name )

Скармливает сканеру один блок данных и ищет в нём сигнатуры.

Аргументы
stateСостояние сканера. Не должен быть NULL.
blockБлок данных (например, сектор 512 байт). Не должен быть NULL.
block_lenДлина блока в байтах.
sigsТаблица сигнатур. Не должна быть NULL.
sig_countКоличество сигнатур в таблице.
virus_flagВыход: 1 если найдена сигнатура, иначе 0. Не должен быть NULL.
match_nameВыход: имя найденной угрозы (или не трогается, если чисто). Не NULL.
Возвращает
SF_SUCCESS при успехе, иначе значение Error_Codes_SF.
Заметки
Сигнатуры на стыке блоков ловятся через carry предыдущего вызова.
Предупреждения
Длина каждой сигнатуры должна быть в диапазоне 1..SIG_MAX_LEN.

◆ scan_init()

int scan_init ( ScanState * state)

Инициализирует состояние сканера (сбрасывает хвост).

Аргументы
stateУказатель на состояние. Не должен быть NULL.
Возвращает
SI_SUCCESS при успехе, иначе значение Error_Codes_SI.