-
Junior Member
- Вес репутации
- 54
Кажется, проблема с SearchSign в скриптах AVZ?
Доброе всем время суток!
Описание ситуции.
1. Создал тестовый файл с именем VIRUS.EX_ и содержимым 'MZ SIGNATURE'. В 16-ричном виде это: 4D 5A 20 53 49 47 4E 41 54 55 52.
2. Написал и выполнил в AVZ следующий скрипт:
begin
if LoadFileToBuffer('c:\virus.ex_') then AddToLog('ok') else AddToLog('failed');
AddToLog(IntToStr(SearchSign('4D 5A', 0, 2) ));
AddToLog(IntToStr(SearchSign('53 49 47 4E 41 54 55 52', 3, ));
AddToLog(IntToStr(SearchSign('5A 4D', 0, 2) ));
FreeBuffer
end.
3. Получил неправильные (на мой взгляд) результаты:
ok
-1
-1
-1
По моему мнению, -1 должно быть только в последнем случае? Или я что-нибудь не так делаю?
P.S. Проверял на нескольких разных версиях AVZ, включая 4.32. Монопенисуально.
P.P.S. С материалами
http://www.z-oleg.com/secur/avz_doc/...searchsign.htm и
http://www.z-oleg.com/secur/avz_doc/...ignexample.htm знаком.
-
Будь в курсе!
Будь в курсе!
Надоело быть жертвой? Стань профи по информационной безопасности, получай самую свежую информацию об угрозах и средствах защиты от ведущего российского аналитического центра Anti-Malware.ru:
-
Это не баг, это фича На самом деле вопреки моим надеждам этим движком никто почему то не пользовался, потому тонкости не документированы и не подвергались тщательным тестам...
1. AddToLog(IntToStr(SearchSign('4D 5A', 0, 2) )); - не работает потому, что зона поиска равна по размеру сигнатуре. Как оказалось, там контроль, что для поиска сигнатуры зона поиска должна быть хотя-бы на байт больше длинны искомого, т.е. AddToLog(IntToStr(SearchSign('4D 5A', 0, 3) )); сработает, равно как AddToLog(IntToStr(SearchSign('4D 5A', 0, 0) )); (нуль в длинне понимается как "искать до конца буфера"
2. Вторая конструкция не сработала по той-же причине - сигнатура по размеру равна буферу, а логика контроля AVZ требует, чтобы буфер был хотя-бы на байт длиннее сигнатуры (в файл можно добавить пробел в хвост и все заработает, или из сигнатуры убрать 1 байт последний)
Я не помню, откуда выросли эти ограничения "на еще 1 байт" - кажется, это как-то связано с поиском по маскам или с чем-то еще ... я записал это как багу и подправлю в следующей версии. При этом побайтный доступ к буферу естественно полный, т.е.
Код:
var
i : integer;
begin
if LoadFileToBuffer('c:\virus.ex_') then AddToLog('ok')
else AddToLog('failed');
for i := 0 to GetBufferSize - 1 do
AddToLog( IntToHex(GetBufferByte(i), 2) );
FreeBuffer;
end.
даст нам
Код:
ok
4D
5A
20
53
49
47
4E
41
54
55
52
45
Последний раз редактировалось Зайцев Олег; 01.09.2009 в 11:32.
-
-
Junior Member
- Вес репутации
- 54
Сообщение от
Зайцев Олег
Это не баг, это фича
Спасибо за ответ.
я записал это как багу и подправлю в следующей версии.
Замечательно. А то "продвинутая" работа с AVZ планируется для студентов специальности КОИБАС, будут методички и т.п. Поэтому хотелось бы определенности.
Еще раз спасибо.
-
Сообщение от
drmad
Спасибо за ответ.
Замечательно.
А то "продвинутая" работа с AVZ планируется для студентов специальности КОИБАС, будут методички и т.п. Поэтому хотелось бы определенности.
Еще раз спасибо.
да не за что, если будут подобные вопросы и непонятки - обязательно обращайтесь, будем разбирать каждую ситуацию и по результатам я или подрихтую доку, или поправлю баги
-