Как я могу определить различия между разными кодировками / сериализациями / и т. Д.? - PullRequest
3 голосов
/ 22 ноября 2010

Существуют ли все типы декодеров для форматов данных, таких как Base64, объект ASP EventValidation, сериализация XML или другие? Есть ли простой тест, который я могу сделать?

Например, у меня есть строка, это часть веб-формы на основе cgi, она явно шестнадцатеричная (полный размер 5 КБ): 52616e646f6d49567ef61b360522ae5ae69064f0ecb664a831c4196dad319215013aa8d04726b5d54ed673dad2004726c35e66d8b19c5177a331b24988f3cf11871084f6cc9ff808baf5cdee83f031a56dc42b65ee5309f1f1

Я понятия не имею, что это такое, hex для ascii дает мне еще какую-то ерунду, такую ​​как Ra_d__IVo6"Odd1_1/G&?sG&OfQw1I1_eS, это явно не базовая строка 64 ...

Вопрос в основном: есть ли метод, отличный от просмотра различных типов, проб и угадывания?

редактирование: Я думаю, что эта строка представляет собой зашифрованные данные, основанные на включенной 52616e646f6d4956, но мой вопрос не в том, что это за строка, а в том, как я могу легко сказать эти вещи.

Ответы [ 2 ]

1 голос
/ 07 декабря 2010

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

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

Как отметил Марк, не весь контент обязательно читаемый контент.Изображения, zip-файлы и список других данных приведут к чистой чепухе при преобразовании в представление таблицы кодирования.Но даже такие элементы могут содержать согласованные данные, которые будут обнаружены эвристикой.

Эта тема может быть довольно интересной.Просто посмотрите на протокол TCP.Один не просто запускает пакеты через Интернет, ожидая некоторой волшебной интерпретации данных на стороне клиента.Существуют заранее определенные правила (протоколы) для определения способа и типа данных, передаваемых между клиентом / сервером.Таким образом, чтобы непосредственно ответить на ваш вопрос о «угадывании», вы не можете быть уверены в данных, которые вы получите, или в вашей интерпретации, но вы, безусловно, можете разработать приложение, которое будет умнее, чем «предположение».

1 голос
/ 04 декабря 2010

В общем случае это будет сложно.Очевидно, что поиск правильного диапазона символов помогает определить такие вещи, как base-64, но помимо этого вам потребуется много логики для каждого типа.Все, что основано на тексте, может само по себе использовать любую кодировку Unicode / кодовой страницы, например.

Вероятно, XML и JSON довольно легко вывести (предположите, исходя из начальных символов, затем попробуйте запуститьэто через парсер / валидатор).Конечно, не-x-HTML усложняет ситуацию.

Двоичные формы более хитры и многочисленны;это может быть изображение?Звук?Zip?Или двоичный формат данных;протобуф что ли?Или на заказ?

И в каком мы есть Endianness?

Тогда;вся полезная нагрузка gzip?Выпустите?Зашифровано?

Так что да;это, вероятно, может быть сделано - например, wireshark пытается.Но это много работы, без волшебных ярлыков.

...