![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| h1tter |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 25.6.2006 Репутация: нет Всего: нет |
Друзья, на днях столкнулся с одной проблемой:
Поиск шестнадцатеричной строки в бинарном файле. На самом деле все очень просто: Считываешь байт, Преобразуешь его, сравниваешь, если все байты найдены, то строка найдена! Но поиск ведется не по просто строке вида: «1D5A16AB», а по маске, например «*1D?A??AB?», где между вопросами не равное количество символов. Как сделать не знаю, опирался на алгоритм от «Петровича» («DRKB»,http://h1tter.nm.ru/masks.pas) |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
А чем тогда "*" отличается от "?"? Это сообщение отредактировал(а) Yanis - 26.6.2006, 00:19 |
|||
|
||||
| h1tter |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 25.6.2006 Репутация: нет Всего: нет |
||||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
h1tter, для этих целей следует использовать более продвинутое средство - Регулярные выражения. Существует специальный модуль. На форуме уже обсуждалось.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| h1tter |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 25.6.2006 Репутация: нет Всего: нет |
Покажите мне их!Как они работают? А если серъезно, то я скачал http://regexpstudio.com/Downloads/regexpr.rar. И что с ним делать, как осуществить пойск сигнатуры в файле. Если можно объясните вкратце |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
1)Для начала нужно создать экземпляр класса TRegExpr
2)Затем нужно установить модификаторы (многосторочный - не многострочный, юникод - не юникод и т.д.) 3) Expression присвоить маску поиска составленную по спец правилам (вы скачали компонент с английской справкой - у меня с русской). В хелпе подробно описаны правила. 4)InputString присвоить строку с текстом. 5)Вызов Exec или ExecPos запустит поиск 6) Результат будет в Match[0] или MatchPos[0] (первое появление) -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Это что же и для бинарных файлов подходит? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Yanis, h1tter писал о поиске по строке
Не знаю может я чего то не понял -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
Вобще формат маски (как мне извесно): * - любое количество любых символов ? - один любой символ если придерживаться этой концепции то: маска разбивается на фрагменты разделенные "*" для каждого фрагмента составляется битовая маска (в данном случае FF0F00FF (Mask)) тоесль на месте вопросов ставим нули, а фрагмент строки приводим к такому виду 1D0A00AB0 (Ask) далее сканируем файл на предмет вхождения первого фрагмента ( (Sfile and Mask) = Ask если не напутал), при совпадении переходим ко второмы фрагменту (поиск начинаем с первого непроверенного байта). и так далее пока не завершатся все фрагменты. если получили совпадение по всем фрагментам, то искомая строка найдена. Для начала определись с языком запросов!!!! -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
На сколько я понял, то h1tter хочет сделать что-то вроде антивирусной проверки -- по маске. Поиск по маске и ещё и в файле это довольно сложно... Сам с таким не сталкивался. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Yanis, В этом случае любой байт можно рассматривать как 1 символ и искать нужную последовательность.
5 соответствует #5 241 соответствует #241 Мне кажется, что и в этом случае можно "прикрутить" регулярные выражения, хотя может существует что-то более специализированное. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| h1tter |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 25.6.2006 Репутация: нет Всего: нет |
Да, потом я скачал русскую версию библиотеки. Почитал хелп.Что-то про составление регулярных выражении. Примерно понял.Но что бы точно направить тему в то русло, я объясню зачем это надо: Составляется антивирусная программа, но не подумайте, что я занес в базу вирусов сто сигнатур, и теперь делаю пойск в файле.В моей базе уже 37481(!!!) сигнатур вредоносных программ. Из начально я пользовался очень сложным и нудным методом, Я думаю не стойт объяснять.Потом перешел на регулярные выражения (я эще не знал что они так именуются, для меня это были просто расширенный формат стандартной маски), в базу я заносил уже полу-регулярные выражения. А как их искать я не знал, вот и решил переделать алгоритм. Формат сигнатур очень простой, вот пример:
Ну так какие алгоритмы пойска можно предложить с участием выше перечисленной библиотеки? |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
h1tter,
Это в каком смысле? Сигнатура и есть регулярное выражение Expression = Сигнатура далеше Exec Алгоритм поиска уже реализован в TRegExpr, запускается он по Exec
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
я алгоритм предложил. чем он неприемлем? Регулярные выражения вещь класная, тока заточена под текст. Для бинарного поиска не пробовал. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Тем что файлик, например в 700MB не всегда очень легко загнать в string. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |