Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск шестнадцатеричной строки в бинарном файле 
:(
    Опции темы
h1tter
  Дата 25.6.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.6.2006

Репутация: нет
Всего: нет



Друзья, на днях столкнулся с одной проблемой:
Поиск шестнадцатеричной строки в бинарном файле.

На самом деле все очень просто: Считываешь байт,
Преобразуешь его, сравниваешь, если все байты найдены, то
строка найдена!
Но поиск ведется не по просто строке вида:
«1D5A16AB», а по маске, например «*1D?A??AB?»,
где между вопросами не равное количество символов.

Как сделать не знаю, опирался на алгоритм от «Петровича»
(«DRKB»,http://h1tter.nm.ru/masks.pas)  
PM MAIL   Вверх
Yanis
Дата 26.6.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(h1tter @  25.6.2006,  18:35 Найти цитируемый пост)
где между вопросами не равное количество символов.

А чем тогда "*" отличается от "?"?  

Это сообщение отредактировал(а) Yanis - 26.6.2006, 00:19


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
h1tter
Дата 26.6.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.6.2006

Репутация: нет
Всего: нет



Цитата(Yanis @  26.6.2006,  00:18 Найти цитируемый пост)
А чем тогда "*" отличается от "?"? 

"*" - можно пропустить по алгоритму пойска!
Так как осуществить пойск? 
PM MAIL   Вверх
Alexeis
Дата 26.6.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



h1tter, для этих целей следует использовать более продвинутое средство - Регулярные выражения. Существует специальный модуль. На форуме уже обсуждалось. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h1tter
Дата 27.6.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.6.2006

Репутация: нет
Всего: нет



Цитата(alexeis1 @  26.6.2006,  14:47 Найти цитируемый пост)
...для этих целей следует использовать более продвинутое средство - Регулярные выражения. Существует специальный модуль.


Покажите мне их!Как они работают? smile 

А если серъезно, то я скачал 
http://regexpstudio.com/Downloads/regexpr.rar.
И что с ним делать, как осуществить пойск сигнатуры в файле.
Если можно объясните вкратце smile 
 
PM MAIL   Вверх
Alexeis
Дата 27.6.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



1)Для начала нужно создать экземпляр класса TRegExpr
2)Затем нужно установить модификаторы (многосторочный - не многострочный, юникод - не юникод и т.д.)
3) Expression  присвоить маску поиска составленную по спец правилам (вы скачали компонент с английской справкой - у меня с русской). В хелпе подробно описаны правила.
4)InputString  присвоить строку с текстом.
5)Вызов Exec или ExecPos запустит поиск
6) Результат будет в Match[0] или  MatchPos[0] (первое появление) 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Yanis
Дата 27.6.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(alexeis1 @  27.6.2006,  15:53 Найти цитируемый пост)
)Для начала нужно создать экземпляр класса TRegExpr
2)Затем нужно установить модификаторы (многосторочный - не многострочный, юникод - не юникод и т.д.)
3) Expression  присвоить маску поиска составленную по спец правилам (вы скачали компонент с английской справкой - у меня с русской). В хелпе подробно описаны правила.
4)InputString  присвоить строку с текстом.
5)Вызов Exec или ExecPos запустит поиск
6) Результат будет в Match[0] или  MatchPos[0] (первое появление)  

Это что же и для бинарных файлов подходит? 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 27.6.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Yanis, h1tter писал о поиске по строке
Цитата(h1tter @  25.6.2006,  16:35 Найти цитируемый пост)
Но поиск ведется не по просто строке вида:«1D5A16AB», а по маске, например «*1D?A??AB?»,где между вопросами не равное количество символов.

Не знаю может я чего то не понял smile 
 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
drkot
Дата 27.6.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(h1tter @  25.6.2006,  17:35 Найти цитируемый пост)
«*1D?A??AB?»,

Вобще формат маски (как мне извесно):
  * - любое количество любых символов
  ? - один любой символ

если придерживаться этой концепции то:
  маска разбивается на фрагменты разделенные "*"
  для каждого фрагмента составляется битовая маска (в данном случае FF0F00FF (Mask)) тоесль на месте вопросов ставим нули, а фрагмент строки приводим к такому виду 1D0A00AB0 (Ask) 
  далее сканируем файл на предмет вхождения первого фрагмента ( (Sfile and Mask) = Ask если не напутал), при совпадении переходим ко второмы фрагменту (поиск начинаем с первого непроверенного байта). и так далее пока не завершатся все фрагменты.
 если получили совпадение по всем фрагментам, то искомая строка найдена.

Для начала определись с языком запросов!!!! 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Yanis
Дата 27.6.2006, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(alexeis1 @  27.6.2006,  18:33 Найти цитируемый пост)
Не знаю может я чего то не понял

Цитата(h1tter @  25.6.2006,  18:35 Найти цитируемый пост)
Друзья, на днях столкнулся с одной проблемой:
Поиск шестнадцатеричной строки в бинарном файле.

На сколько я понял, то h1tter хочет сделать что-то вроде антивирусной проверки -- по маске. Поиск по маске и ещё и в файле это довольно сложно... Сам с таким не сталкивался. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 28.6.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Yanis, В этом случае любой байт можно рассматривать как 1 символ и искать нужную последовательность.
5     соответствует #5
241 соответствует #241
Мне кажется, что и в этом случае можно "прикрутить" регулярные выражения, хотя может существует что-то более специализированное. smile  


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h1tter
Дата 28.6.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.6.2006

Репутация: нет
Всего: нет



Цитата(alexeis1 @  27.6.2006,  14:53 Найти цитируемый пост)
...вы скачали компонент с английской справкой - у меня с русской)...

Да, потом я скачал русскую версию библиотеки.
Почитал хелп.Что-то про составление регулярных выражении.
Примерно понял.Но что бы точно направить тему в то русло,
я объясню зачем это надо:
Составляется антивирусная программа, но не
подумайте, что я занес в базу вирусов сто сигнатур,
и теперь делаю пойск в файле.В моей базе уже 37481(!!!)
сигнатур вредоносных программ.
Из начально я пользовался очень сложным и нудным методом,
Я думаю не стойт объяснять.Потом перешел на регулярные выражения
(я эще не знал что они так именуются, для меня это были просто расширенный формат
стандартной маски), в базу я заносил уже полу-регулярные выражения.
А как их искать я не знал, вот и решил переделать алгоритм.
Формат сигнатур очень простой, вот пример:
Код

DOS.Supra.Gen=b82135cd21891e????8c06????b425ba????cd21{1-3}cd2780fc4b

W97M.Sad.A=4c6f67696324203d204d6963726f24202b20223a53616422{-10}576f726442617369632e4d6163726f436f70792022476c6f62616c3a4175746f436c6f7365222c204c6f67696324
  
Ну так какие алгоритмы пойска можно предложить с участием выше перечисленной библиотеки? 
PM MAIL   Вверх
Alexeis
Дата 28.6.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



h1tter, 
Цитата(h1tter @  28.6.2006,  14:47 Найти цитируемый пост)
Ну так какие алгоритмы пойска можно предложить

Это в каком смысле?
Сигнатура и есть регулярное выражение
Expression = Сигнатура
далеше Exec
Алгоритм поиска уже реализован в TRegExpr, запускается он по Exec

Код

if Exec
then
  showmessage('вирус найден')
 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
drkot
Дата 29.6.2006, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(h1tter @  28.6.2006,  15:47 Найти цитируемый пост)
Ну так какие алгоритмы пойска можно предложить с участием выше перечисленной библиотеки? 

я алгоритм предложил. чем он неприемлем?

Регулярные выражения вещь класная, тока заточена под текст. Для бинарного поиска не пробовал.
 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Yanis
Дата 29.6.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(drkot @  29.6.2006,  12:18 Найти цитируемый пост)
чем он неприемлем?

Тем что файлик, например в 700MB не всегда очень легко загнать в string. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1659 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.