16.39.11. Пример реализации сигнатурного искателя
// Добавление сообщения в протокол
Procedure AddAlarm(AFileName, AMsg : string);
begin
AddtoLog('>>>>> '+AFileName+' подозрение на '+AMsg);
end;
// Сканирование файла
Procedure ScanFile(AFileName : string);
begin
SetStatusBarText(AFileName);
// Загрузка файла в буфер анализа
LoadFileToBuffer(AFileName);
// Поиск сигнатуры
if SearchSign('2E 61 64 2D 77 2D 61 2D 72 2D 65 2E 63 6F',-20000, 0) >= 0 then
AddAlarm(AFileName, 'Adware.Look2me');
// Освобождение памяти, занятой под буфер
FreeBuffer;
end;
// Сканирование папки (с рекурсивным обходом)
Procedure ScanDir(ADirName : string; AScanSubDir : boolean);
var
FS : TFileSearch;
begin
ADirName := NormalDir(ADirName);
FS := TFileSearch.Create(nil);
FS.FindFirst(ADirName + '*.*');
while FS.Found do begin
if FS.IsDir then begin
if AScanSubDir and (FS.FileName <> '.') and (FS.FileName <> '..') then
ScanDir(ADirName + FS.FileName, AScanSubDir)
end else
ScanFile(ADirName + FS.FileName);
FS.FindNext;
end;
FS.Free;
end;
begin
ScanDir('c:\', true);
end.
В примере использовались: AddtoLog, FreeBuffer, LoadFileToBuffer, NormalDir, SearchSign, SetStatusBarText