Подтвердить что ты не робот

Snort/PCRE Regex: синтаксис нечетного символьного класса

Пока я разбирал набор регулярных выражений Snort, я нашел синтаксис очень странного символьного класса, например [\x80-t] или [\x01-t\x0B\x0C\x0E-t\x80-t], и я не могу понять (на самом деле нет подсказки), что -t означает. Я даже не знаю, является ли это стандартным PCRE или своего рода расширением Snort.

Вот несколько регулярных выражений, которые содержат эти классы символов:

/\x3d\x00\x12\x00..........(.[\x80-t]|...[\x80-t])/smiR
/^To\x3A[^\r\n]+[\x01-t\x0B\x0C\x0E-t\x80-t]/smi

PS: обратите внимание, что \x80-t не является допустимым диапазоном стандартным способом, так как символ t \x74.

4b9b3361

Ответ 1

Это может ссылаться на другую кодировку символов, где t больше, чем x80 и x80 не может быть рассмотрено нормально.

Возьмите коды кода EBCDIC, например (см. здесь для справки).

(Но я тоже не знаю, почему кто-то захочет написать его таким образом)

Для ASCII у меня есть дикая догадка: если -t означает "до следующего токена -1" или если последний помещается последним в строке "до конца допустимых символов", второй запрос будет указывать на это:

To:(not a newline, more than one character)(not a newline)

Таким образом, в основном выражение [\x01-t\x0B\x0C\x0E-t\x80-t] будет означать [^\r\n].

Если применить это к (.Ç-t]|...[Ç-t]), который будет адресовать любой символ размером более 7 бит ASCII, который также может адресовать весь юникод (помимо первых 127 символов).

(При этом я до сих пор не знаю, почему кто-то должен писать это так, но, по крайней мере, это объяснение, помимо "Его ошибка" )

Может быть, полезно: что означают ваши рексиксы, если вы выписываете \xYY? ASCII:

/=\NULL\DEVICE_CONTROL_2\NULL\.{10}\(.Ç-t]|...[Ç-t])/smiR
/^To\:[^\r\n]+[\START_OF_HEADING-t\VERTICALTAB\FORMFEED\SHIFTOUT\Ç-t]/smi

Оглядываясь на \0x12 aka Device control 2, может помочь, потому что это не будет отображаться в тексте, но, возможно, в сетевом трафике.

Ответ 2

Второе регулярное выражение соответствует строкам, начинающимся с To: (без учета регистра), за которым следует, по крайней мере, один символ, который не является строкой или возвратом каретки. Поскольку это жадное совпадение, я ожидаю, что \r или \n будут единственными возможными совпадающими совпадениями в классе символов [\x01-t\x0B\x0C\x0E-t\x80-t]. Примечание: \r эквивалентно \x0D, а \n эквивалентно \x0A. Не уверен, что означает -t, но пусть притворяется, что это был -. Тогда класс символов будет [\x01-\x0B\x0C\x0E-\x80-], который все еще немного запутан, но будет иметь немного больше смысла, т.е. Разрешить \n как завершающий символ, но не \r.

Это очень длинный выстрел, но есть ли шанс, что это может быть какой-то поиск и замена? (Угадайте, что это, вероятно, может быть быстро снижено, если есть другие регулярные выражения, которые имеют нормальные диапазоны без t.)