Каков наилучший подход для сравнения двух шестнадцатеричных сигнатур файлов друг с другом по сходству.
Более конкретно, я хотел бы взять шестнадцатеричное представление файла .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