Пример декодирования AMF

Я пытаюсь прочитать некоторый трафик flex/amf, но отсутствие надлежащей документации/примеров делает это очень сложным.

Может кто-нибудь, пожалуйста, помогите мне расшифровать следующий пакет rtmp/amf3:

0x43, 0x00, 0x68, 0xcd, 0x00, 0x01, 0x33, 0x11, 0x00, 0x05, 0x00, 0x40, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x11, 0x0a, 0x81, 0x13, 0x4f, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x13, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x17, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x15, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x6f, 0x4c, 0x69, 0x76, 0x65, 0x13, 0x74, 0x69, 0x6d, 0x65, 0xc3, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x01, 0x06, 0x29, 0x6c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x0a, 0x0b, 0x01, 0x21, 0x44, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x04, 0x3c, 0x15, 0x44, 0x53, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x06, 0x11, 0x6d, 0x79, 0x2d, 0x72, 0x74, 0x6d, 0x70, 0x73, 0x09, 0x44, 0x53, 0x49, 0x64, 0x06, 0x49, 0x42, 0x45, 0x32, 0x34, 0x31, 0x32, 0x33, 0x34, 0x2d, 0x31, 0x45, 0x31, 0x39, 0x2d, 0x30, 0x33, 0x43, 0x33, 0x2d, 0x39, 0x30, 0x34, 0x43, 0x2d, 0x32, 0x31, 0x36, 0x33, 0x36, 0x36, 0x30, 0x41, 0x42, 0x34, 0x37, 0x46, 0x01, 0x06, 0x17, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x65, 0xc3, 0x72, 0x76, 0x69, 0x63, 0x65, 0x06, 0x49, 0x31, 0x34, 0x43, 0x30, 0x46, 0x42, 0x38, 0x30, 0x2d, 0x46, 0x37, 0x43, 0x34, 0x2d, 0x42, 0x42, 0x34, 0x42, 0x2d, 0x31, 0x46, 0x32, 0x34, 0x2d, 0x34, 0x39, 0x36, 0x32, 0x38, 0x30, 0x42, 0x38, 0x39, 0x33, 0x42, 0x38, 0x01, 0x04, 0x00, 0x04, 0x00, 0x09, 0x01, 0x01

Мои попытки:

0x43 - 0100 0011 : [01] - тип 1 = заголовок rtmp будет 7 байт. Идентификатор потока — 3, будет в этом единственном байте.

Также удалось прочитать следующее со сдвигом бита UTF 1, чтобы получить длину:

0x4f: flex.messaging.messages.RemotingMessage

0x0d: источник

0x13: операция

0x0f: заголовки

0x17: пункт назначения

0x13: идентификатор сообщения

0x11: идентификатор клиента

0x15: время жизни

На этом мои догадки прекращаются, "время"/"штамп" похоже не работает. Конечно, я не понимаю, как кодируются все остальные байты (объекты/массивы и т. д.);


person user1862442    schedule 29.11.2012    source источник


Ответы (3)


Используйте Чарльза для разбора AMF! http://www.charlesproxy.com/documentation/additional/amf/

person antman    schedule 29.11.2012

0x43, 0x00, 0x68, 0xcd, 0x00, 0x01, 0x33, 0x11

1 байт + 7 байт данных заголовка RTMP [0]

0x00, 0x05, 0x00, 0x40, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05

Магические байты Flex, что-то связанное с версией вызова, идентификатором и т. д.

0x11

начало данных AMF3

0x0a.....

Объект AMF3 и обычная кодировка AMF3 [1]

Обратите внимание на RTMP, он разбивает данные AMF на части минимум до 128 байтов, за которыми будет следовать один байт заголовка (не часть AMF), например 0xc3 в приведенном выше примере.

person user1862442    schedule 30.11.2012

я бы начал с чтения

AMF0

AMF3

Еще несколько примеров можно найти в Википедии.

А затем Спецификация RTMP, которая вам, вероятно, не понадобится.

Далее вы можете изучить исходный код FluorineFX. Это заставило меня начать понимать вещи. Источники FluorineFX. Что я сделал, так это установил точки останова в исходном коде FluorineFX, а затем сделал вызов из приложения Flex. Затем я мог пройтись по исходному коду FluorineFX, чтобы понять вещи (рядом со мной были спецификации AMF).

Спецификации трудно читать, но это действительно все, что вам нужно для разбора байтов.

Можете также взглянуть на этот проект JavaScript AMF.

person Lieven Cardoen    schedule 07.01.2013