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