![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
  |