![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Помогите пожалуйста реализовать быстрый поиск HEX строки в файле... Все методы которые я нашел в интернете довольнотаки медленные (можно сказать очень медленные) особенно для больших файлов, а например антивирус clamav использует HEX строки как сигнатуры вирусов, и поиск порядка 40000 сигнатур в одном файле занимает у него довольно мало времени (100 - 200ms) помогите реализовать такойже быстрый поиск на Delphi...
|
|
#2
|
||||
|
||||
|
Если бы ты внимательно посмотрел пример поиска Массива в Массиве, то увидел бы, что точно так же можно искать НЕХ - последовательность в файле.
Что касается Антивирусов, то они поступают следующим образом - 1. Генерируют базу данных с КОНТРОЛЬНЫМИ СУММАМИ сигнатур. 2. Сканируют НЕ весь файл, а только некоторую часть от Точки Входа + РЕ заголовок. 3. Из того, что они насканировали вычисляют контрольную суму 4. Сравнивают полученную контрольную сумму с теми, что находятся в базе данных Поэтому он так быстро и работают. А если бы они сканировали и сравнивали непосредственно сигнатуры, то и файл с антивирусными базами занимал бы сотни мегабайт. (Одна сигнатурка занимает порядка 2-4 кбайт, а если их 40 тысяч, то файл соответственно будет 80-160 Мб) Последний раз редактировалось Thrasher, 07.03.2008 в 10:11. |
|
#3
|
|||
|
|||
|
Про остальные антивирусы не знаю, а конкретно в clamav сканируется весь файл, тем более Точка Входа + РЕ заголовок существуют только у PE файлов, а сканируются файлы всех типов...
Например если приписать вот такую последовательность (890eb301b801039c2eff1ebb017216b801035a52b600b9010 00e078d1e00019c2eff1ebb01) к любому авишному файлу куданить в самый конец файла то clamav увидит в нем вирус (Gen.3Devils.B), значит он сканирует весь файл, и с очень большой скоростью! |
|
#4
|
||||
|
||||
|
Да очень просто все! Бери и читай весь файл в массив, а потом ищи в нем необходимую последовательность!
|
|
#5
|
|||
|
|||
|
Цитата:
Да пробовал я читать файл в массив а потом прогонять поиск... но скорость ужасная! раз в 15 - 20 медленнее чем у clamav... Может алгоритм какой надо использовать??? или может ктонить знает как реализован поиск в кламе??? Подскажите... |
|
#6
|
||||
|
||||
|
Может он проверяет несколько файлов сразу. Или он проверяет не весь файл сразу, а разбивает его на части и сканирует каждую из них. Может даже и то, и другое одновременно. =)
|
|
#7
|
|||
|
|||
|
Цитата:
|