2014-05-17 10 views
3

내 프로젝트는 내 Android 장치에서 해독 된 Airplay Mirrorred h.264 화면 데이터를 가져 오는 것입니다.
나는 AES와 같은 것에 대해 아무것도 모르기 때문에 ... My iPad와 AppleTV 사이에서 omnipeek'ed 하드 코딩 된 데이터로 그 단계를 건너 뛰었습니다.에 관한 Airplay Mirroring ... fp-setup 후의 것들


"Unofficial Airplay Protocol" 시작.
시퀀스를 닮았으며 "fp-setup"으로 iPad에서 질문했습니다.

는 그것은 AirTunesController source code을 검토하는 것은 매우 도움이되었다, 그 코드에서 꽤 많은 힌트를 가지고있다. 그래서, 나는 내 iPad, AppleTV에서 'FPLY'시작 바이너리를 받았다. 그냥 내 iPad에 대답하고 "fp-setup"단계가 완료되었습니다!
아이 패드에서 FPLY313를받은 순서는

..
아이 패드에서 FPLY311을받은, 내가 FPLY312과 대답
,
나는 다음 "POST/스트림은"일부 나에게 와서 .. FPLY314 대답 이진 매개 변수 목록 (bplist).
그것은 ...처럼 (내 ADB 로그 캣에서 캡처)

D/서버 (432) : AIRPLAY 미러링 서버 : AIRPLAY 서버 : 새로운 연결이
D/서버 (432)를 감지 새로운 연결이
추가 D/서버 (432) BReNTT : /stream.xml
D/서버 (432) BReNTT : BReNTT : 컨텐츠의 536 바이트 응답
/stream.xml D >>의
D/서버 (432)를 얻는/서버 (432) : BReNTT :/fp-setup, 본문 크기 : 16
D/서버 (432) : 0x46 0x50 0x4c 0x59 0x03 0x01 0x01 0x00 0x00 0x00 0x00 0x0 BReNTT :/FP-설정 >> 311 >> POST
D/서버 (432) BReNTT : 컨텐츠의 257 바이트 응답
D/서버 (432)는 0x02 4 × 00은 0x03
D/서버 (432) 0xbb 경계 : BReNTT/FP-설치 바디 사이즈 : 164
D/서버 (432)부터 0x46 0 × 50 0x4c 0x59 0x03으로하는 0x01을 0x03 × 00 × 00 × 00 × 00 0x98 0x01로 0x8f를 0x1a 0x9c
D/서버 (432) 0x7d 0x0a은 0xF2의 0x57 0xb3 0x1f이 0x21 0xf5 0xc2 0xd2 0xbc를 0x81 0x4c은 0x03 0x2d 0x45
D/서버 (432) 0x78을 0x35 0xad에는 0x0B에는 0x06, 0x25로의 0x05 따라 0x74 0xbb 경계에는 0xC7 확인 0xAB 0x4a 0x58가 0xCC의 0xa6 0xee
D/서버 (432) 0xad 0x2c 0x91 0x1d 0x7f 0x3e 0x1e 0x7e 0xd4 0xc0 0x58 0x95 0x5d 0xff 0x3d 0x5c,552,314,960,453,210 D/서버 (432) 0xee의 0xF0하는 0x14 0x38로 0x7a 0x98 0x5b 0xdb 0x34 0x99 0 × 50 0x15 0xe3 0xDF를 0xbd 0xac
D/서버 (432) 0xC5의는 0x60 0x47로 0xcb 0x92 0x6e은 0x09 0x3b 0x13의 0xe9에서부터 0xFD 0xb5 0xe1 0xee 0xe3는 0x17
D/서버 (432) 0xc0과 0x18 0xbb 경계 0xc8에서 0x7f 0xC5의 0x45 0x3c 0x76 0x71 0x64 0x7d 0xa6에는 0x86 0xda 0x3d
D/서버 (432) : 0x56 0x48 0x75 0xd0 0x3F입니다 0x8a 0xea 0x9d는 0x60은 0x09 0x2d 0xe0이 0x61을 0x10 0xbc 0x7b
D/서버 (432) 0xe0 0xc1 0x6f 아님 0x39가 0x1c 0x36 0x9c 0x75 0x34 0x4a 0xe4에서 0x7f 0x33을 0xac 0xfc 0xf1
D/서버 (432) 0x0e 0x63 0xa9 0xb5 코드 0x8B 0xfc 0xe2 0x15 0xe9 0x60으로하는 0x01 0xc4 0x9e 0x4b를 0xe9 0x67
D/서버 (432) : 0xc5 0x06 0x7f 0x2a
D/서버 (432) : BReNTT :/fp-setup >> POST >> 313
D/서버 (432) : BReNTT : 응답 중 ...
D/서버 (432)부터 0x46 0 × 50 0x4c 0x59 0x03으로하는 0x01를 0x04 × 00 × 00 × 00 × 00하는 0x14 0x0e 0x63 0xa9 0xb5
D/서버 (432) : 코드 0x8B 0xfc 0xe2 0x15 0xe9 0x60으로하는 0x01 0xc4 0x9e 0x4b를 0xe9 0x67 0xC5의이 0x06에서 0x7f 0x2a
D/서버 (432) : BReNTT : 콘텐츠 142 바이트 응답
D/Server (432) : BReNTT :/stream >> POST !! 콘텐츠 길이는 750

마지막으로 Param1과 Param2를 사용하여 목록을 얻었습니다.
이들은 AES 키이고 AES 초기화 벡터 데이터이며 72 바이트와 16 바이트입니다. 그리고 같은 포트 7100에서 갑자기 iPad의 화면 바이너리 데이터가 계속 나에게 나타났습니다.

키 : deviceInfoTime 값 = -422009852.719235
키 : MAC 주소 값 = 64 : 20 : 0C : EF : DF : 81
키 : PARAM1 이진 타입이다. (432) : 88 E4 F8 2C 81 78 C1 8B 47 51 AC 24 B2 7C 0C 2A
BReNTT-Debug (432) : 00 00 00 10 C8 99 DC 69 65 C1 08 1D E6 A9 D9 66
BReNTT-Debug (432) : E2 BA 3E ​​34 54 8C DB C6 51 C3 22 DB 18 DC 22 F5
BReNTT 디버그 (432) 8F E1 54 A6 0A EC EE 18
키 : sessionID와 값 = -1483478994
키 : DeviceID가 값 = 110,088,818,777,987
키 : CONNECTTIME 값 = 0.009737
키 : 버전 값 = 200.54
키 : latencyMs 값 = 90
키 : fpsInfo 타입 = 4
키 : 인증 시간 값 = 422009852.735252
키 : prepareTime 값 = 0.004542
키 : configTime 값 = 0.004692
키 : resolveDNSTime 값 = 0.008402
키 : timestampInfo 유형 = 4
키 : param2는 바이너리 유형입니다.
BReNTT - 디버그 (432) : 66 A7 5D (63) 6D 80 C8 30 19 95 (2A) EC 2D D7 층 1C

그리고 ..
그것은 내가 물어보고 싶은 질문입니다.

비공식 방송 재생 프로토콜에 따르면
선택적 Param1과 Param2가 존재하면 화면 데이터가 암호화됩니다. 맞습니까?

내 iPad에서 오는 h.264 화면 데이터를 해독하기 위해이 72 바이트 및 16 바이트 AES 데이터를 어떻게 처리합니까 ??

감사합니다.

+0

여기에 사용중인 코드를 게시 할 수 있으므로 해독하는 방법에 대한 조언을받을 수 있습니다. –

+0

죄송합니다. 코드를 게시 할 수 없습니다. – BReNTT

+0

발신자와 수신자간에 보내는 데이터 덤프를 게시 할 수 있습니까? –

답변

2

두 개의 매개 변수; param1 및 param2는 FairPlay를 사용하여 암호화됩니다. 암호화가 어떻게 작동하는지 먼저 알아 내야합니다. 그런 다음 H.264 비디오 스트림을 해독하기 위해 AES 키를 얻습니다.