Декодирование / дешифрование: начало работы - PullRequest
4 голосов
/ 02 августа 2011

Я перехватил пакеты данных между программным обеспечением на моем компьютере и программным обеспечением на удаленном сервере.Идея состоит в том, чтобы перепроектировать API между ними и интегрировать API в другой программный модуль.

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

10:02:42:6d:95:72:1a:70:be:00:ba:cc:a9:95:72:81:49:dd:00:ae:39:bd:c2:4a:0e:00:d1:fe:a6:01:fc:51:09:42:c1:49:dd:00:59:57:31:b2:3a:ce:00:d1:7e:7c:fa:1d:65:c9:42:41:7c:b6:40:dd:f5:71:52:f1:c7:65:12:be:c0:86:71:03:62:eb:81:49:dd:00:dd:f5:71:dc:7a:ce:00:d1:be:00:ba:1d:65:61:52:c2

Это преобразуется в строку ASCII:

??Bm?r?p??????r?I???9??J???????Q?B?I??YW1?:???~|??e?BA|?@??qR??e????q?b??I????q?z???????eaR?

Я знаю приблизительно что эти данные должнысодержать, если это поможет.

Я просто ищу советы по началу работы, которые помогут мне взломать код.

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

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

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

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

Примечание: Также помните, что многобайтовые данные имеют порядок байтов, и допущение, что неправильный порядок байтов может запутать вещи.Аналогичным образом, существует множество других способов кодирования строк, отличных от ASCII.

Если отправлено много данных, вы также можете проверить, сжаты ли данные каким-либо образом.

1 голос
/ 02 августа 2011

Если вы не уверены, зашифрованы ли данные или нет, то хороший тест для проверки состоит в проверке случайности данных.

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

1 голос
/ 02 августа 2011

Эти данные могут на самом деле не быть зашифрованными , так как они могут быть зашифрованы .

Одна из возможных кодировок, с которой вы можете иметь дело, - это стандартнаяизвестный как базовые правила кодирования (BER).Это способ кодирования структуры данных Абстрактного синтаксиса Notation One (ASN.1) в двоичный поток.

Проверьте http://en.wikipedia.org/wiki/Basic_Encoding_Rules для некоторого понимания.

Это стоитотмечая, однако, что есть несколько наборов инструментов для различных языков, которые облегчат работу с данными BER.Одна из самых обширных, которые я видел, - это библиотека Perl, называемая Convert :: ASN1.

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

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

...