Программный подход в Java для сравнения файлов - PullRequest
10 голосов
/ 01 ноября 2010

Каков наилучший подход для сравнения двух шестнадцатеричных сигнатур файлов друг с другом по сходству.

Более конкретно, я хотел бы взять шестнадцатеричное представление файла .exe и сравнить его с серией сигнатур вирусов. Для этого подхода я планирую разбить шестнадцатеричное представление файла (exe) на отдельные группы из N символов (т. Е. 10 шестнадцатеричных символов) и сделать то же самое с сигнатурой вируса. Я намереваюсь выполнить некоторую эвристику и, следовательно, статистически проверить, имеет ли этот исполняемый файл X% сходства с известной сигнатурой вируса.

Самый простой и, вероятно, очень неправильный способ сделать это - сравнить exe [n, n-1] с вирусом [n, n-1], где каждый элемент в массиве является подмассивом, и, следовательно, exe1 [0,9] против вируса1 [0,9]. Каждое подмножество будет классифицировано статистически.

Как вы понимаете, было бы огромное количество сравнений и, следовательно, очень и очень медленных. Поэтому я подумал спросить, можете ли вы, ребята, придумать лучший подход для такого сравнения, например, совместную реализацию различных структур данных.

Это для проекта, который я делаю для моего бакалавра, где я пытаюсь разработать алгоритм для обнаружения полиморфных вредоносных программ, это только одна часть всей системы, где другая основана на генетических алгоритмах для развития статического вирусная подпись. Любые советы, комментарии или общая информация, такая как ресурсы, приветствуются.


Определение : Полиморфное вредоносное ПО (вирус, червь, ...) поддерживает те же функциональные возможности и полезную нагрузку, что и их «оригинальная» версия, но при этом имеет явно различные структуры (варианты). Они достигают этого путем запутывания кода и, таким образом, изменяя свою шестнадцатеричную подпись. Некоторые из методов, используемых для полиморфизма: изменение формата (вставка удалить пробелы), переименование переменных, перестановка операторов, добавление ненужного кода, замена операторов (x = 1 изменяется на x = y / 5, где y = 5), замена операторов управления. Подобно тому, как вирус гриппа мутирует и, следовательно, вакцинация неэффективна, полиморфное вредоносное ПО мутирует, чтобы избежать обнаружения.


Обновление: После совета, который вы, ребята, дали мне в отношении того, что читать; Я сделал это, но это несколько смутило меня больше. Я нашел несколько алгоритмов расстояния, которые могут применяться к моей проблеме, таких как;

  • Самая длинная общая подпоследовательность
  • алгоритм Левенштейна
  • Алгоритм Нидлмана – Вунша
  • Алгоритм Смита – Уотермана
  • Алгоритм Бойера-Мура
  • Алгоритм Aho Corasick

Но теперь я не знаю, какой использовать, кажется, что все они делают одно и то же по-разному. Я буду продолжать проводить исследования, чтобы лучше понять каждого из них; но в то же время не могли бы вы высказать свое мнение о which might be more suitable, чтобы я мог отдать ему приоритет во время моих исследований и изучить его глубже.


Обновление 2: В итоге я использовал объединение LCSubsequence, LCSubstring и Levenshtein Distance. Спасибо всем за предложения.

Есть копия готовой бумаги на GitHub

Ответы [ 4 ]

4 голосов
/ 02 ноября 2010

Для таких алгоритмов я предлагаю вам заглянуть в область биоинформатики. Существует аналогичная проблема, связанная с тем, что у вас есть большие файлы (последовательности генома), в которых вы ищете определенные сигнатуры (гены, специальные хорошо известные короткие базовые последовательности и т. Д.).

Кроме того, для рассмотрения полиморфных вредоносных программ этот сектор должен предложить вам многое, потому что в биологии также трудно получить точные совпадения. (К сожалению, мне не известны подходящие алгоритмы приближенного поиска / сопоставления, на которые можно указать вам.)

Одним из примеров в этом направлении будет адаптация чего-то вроде алгоритма Aho Corasick для одновременного поиска нескольких сигнатур вредоносных программ.

Аналогично, алгоритмы, такие как алгоритм Бойера-Мура , обеспечивают фантастическое время выполнения поиска, особенно для более длинных последовательностей (средний регистр O (N / M) для текста размером N, в котором вы ищете шаблон размер M, т.е. время сублинейного поиска).

2 голосов
/ 02 ноября 2010

Был опубликован ряд статей о нахождении рядом с дубликатами документов в большом корпусе документов в контексте веб-поиска. Я думаю, вы найдете их полезными. Например, см. это презентация .

1 голос
/ 04 ноября 2010

Как уже указывалось, может помочь сходство с известной проблемой строк и биоинформатики. Самая длинная общая подстрока очень хрупкая, что означает, что одно различие может вдвое сократить длину такой строки. Вам нужна форма выравнивания строк, но более эффективная, чем Смит-Уотерман. Я бы попробовал взглянуть на такие программы, как BLAST, BLAT или MUMMER3, чтобы понять, могут ли они соответствовать вашим потребностям. Помните, что параметры по умолчанию для этих программ основаны на приложении биологии (например, сколько нужно оштрафовать за вставку или подстановку), поэтому вам, вероятно, следует рассмотреть переоценку параметров в зависимости от предметной области вашего приложения, возможно, на Обучающий набор. Это известная проблема, потому что даже в биологии разные приложения требуют разных параметров (например, на основе эволюционного расстояния двух геномов для сравнения). Однако также возможно, что даже по умолчанию один из этих алгоритмов может дать полезные результаты. Лучше всего было бы иметь генеративную модель того, как изменяются вирусы, и это могло бы помочь вам в выборе оптимального алгоритма расстояния и сравнения.

1 голос
/ 03 ноября 2010

В последнее время было проведено серьезное исследование по автоматизации обнаружения повторяющихся отчетов об ошибках в репозиториях ошибок.По сути, это та же проблема, с которой вы сталкиваетесь.Разница в том, что вы используете двоичные данные.Это схожие проблемы, потому что вы будете искать строки с одинаковым базовым шаблоном, хотя шаблоны могут иметь небольшие отличия.Алгоритм прямого расстояния, вероятно, не будет вам здесь полезен.

В этой статье дается хорошее резюме проблемы, а также некоторые подходы в ее цитатах, которые были опробованы.1005 * FTP: //ftp.computer.org/press/outgoing/proceedings/Patrick/apsec10/data/4266a366.pdf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...