LINUX.ORG.RU

Алгоритм поиска вируса в скриптовых языках на C/C++

 , ,


1

3

Задача состоит в том чтобы искать строки кода в файлах. То есть у нас есть несколько строк вируса и нужно чтобы все эти строки были найдены в файле и если все они найдены то файл заражен. Очень интересно услышать ваши мнения. Заранее спасибо.

Ответ на: комментарий от ECLIPSE

Я не думаю что здесь нужны регэкспы, а вот алгоритм Ахо-Карасик

... например, используется в утилите поиска grep


напишешь алгоритм быстрее grep - выкладывай на гитхаб

x905 ★★★★★ ()
Ответ на: комментарий от ECLIPSE

а вот алгоритм Ахо-Карасик это действительно круть и скорее всего я буду использовать именно его.

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

i-rinat ★★★★★ ()

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

xpahos ★★★★★ ()
Ответ на: комментарий от DELIRIUM

У меня первое правило - заставь это работать, а потом разбирайся с производительностью)

Регэкспами задача на питоне решается за очень смешное время (в плане написания кода) и с не плохой производительностью в не краевых случаях. Поэтому я бы сделал на них, а потом думал - надо ли что-то менять под условия задачи (ну мб там файлы размеров по гигабайту, тогда да, не прокатит в лоб).

Norgat ★★★★★ ()

Если решать по-нормальному, задача очень нетривиальная. Скриптовые вирусы же легко обфусцировать. Ахо-Корасик, если применять «в лоб» не сработает если в вирусе просто добавить пробел, например.

Лучше хотя бы токенизировать (и образцы, и код), сравнивать «строки» состоящие из символов-токенов.

Но это тоже не особо поможет, если обфусцируют со знанием дела.

Теоретически можно попробовать какой-нибудь нечеткий поиск, типа строить по образцам автомат Левенштейна с разумной дистанцией https://en.wikipedia.org/wiki/Levenshtein_automaton

vmx ★★ ()