关于Airplay Mirroring..fp-setup之后的东西



我的项目是从我的Android设备上抓取解密的Airplay Mirrorred h.264屏幕数据。
因为我对aes之类的东西一无所知……因此,我跳过了这一步,对iPad和AppleTV之间的硬编码数据进行了全方位窥探。

从"非官方播放协议"开始。
与序列相似,我在iPad上用"fp-setup"进行了查询。

检查AirTunesController源代码非常有帮助,我从代码中得到了很多提示。所以,我从我的iPad AppleTV上获取了"flply"启动二进制文件。刚刚回复我的iPad,"fp-setup"步骤就完成了!


序列是. .从iPad收到FPLY311,
我的回答是FPLY312,
从iPad收到FPLY313,
我回答的是FPLY314..然后"POST/stream"带着一些二进制参数列表(bplist)来找我。
看起来…(从我的adb logcat捕获)

D/Server(432): AIRPLAY Mirroring Server:新连接检测到
D/Server(432): AIRPLAY Server:新连接添加
D/Server(432): BReNTT:/stream.xml
D/Server(432): brent:/stream.xml>> GET
D/Server(432): BReNTT:响应536字节的内容
D/Server(432): BReNTT:/fp-setup, body size: 16
D/Server(432): 0x46 0x50 0x4c 0x59 0x03 0x01 0x01 0x00 0x00 0x00 0x04 0x02 0x00 0x03 0xbb
D/Server(432): BReNTT:/fp-setup>> POST>> 311
D/Server(432): BReNTT:响应257字节的内容
D/Server(432): BReNTT:/fp-setup, body size: 164
D/Server(432): 0x46 0x50 0x4c 0x59 0x03 0x01 0x03 0x00 0x00 0x00 0x98 0x01 0x8f 0x1a 0x9c
D/Server(432): 0x7d 0x0a 0xf2 0x57 0xb3 0x1f 0x21 0xf5 0xc2 0xd2 0xbc 0x81 0x4c 0x03 0x2d 0x45
D/Server(432): 0x78 0x35 0xad 0x0b 0x06 0x25 0x05 0x74 0xbb 0xc7 0xab 0x4a 0x58 0xcc 0xa6 0xee
D/Server(432): 0xad 0x2c 0x91 0x1d 0x7f 0x3e 0x1e 0x7e 0xd4 0xc0 0x58 0x95 0x5d 0xff 0x3d 0x5c
D/Server(432): 0xee 0xf0 0x14 0x38 0x7a 0x98 0x5b 0xdb 0x34 0x99 0x50 0x15 0xe3 0xdf 0xbd 0xac
D/Server(432): 0xc5 0x60 0x47 0xcb 0x92 0x6e 0x09 0x3b 0x13 0xe9 0xfd 0xb5 0xe1 0xee 0xe3 0x17
D/Server(432): 0xc0 0x18 0xbb 0xc8 0x7f 0xc5 0x45 0x3c 0x76 0x71 0x64 0x7d 0xa6 0x86 0xda 0x3d
D/Server(432): 0x56 0x48 0x75 0xd0 0x3f 0x8a 0xea 0x9d 0x60 0x09 0x2d 0xe0 0x61 0x10 0xbc 0x7b
D/Server(432): 0xe0 0xc1 0x6f 0x39 0x1c 0x36 0x9c 0x75 0x34 0x4a 0xe4 0x7f 0x33 0xac 0xfc 0xf1
D/Server(432): 0x0e 0x63 0xa9 0xb5 0x8b 0xfc 0xe2 0x15 0xe9 0x60 0x01 0xc4 0x9e 0x4b 0xe9 0x67
D/Server(432): 0xc5 0x06 0x7f 0x2a
D/Server(432): BReNTT:/fp-setup>> POST>> 313
D/Server(432): BReNTT: responding…
D/Server(432): 0x46 0x50 0x4c 0x59 0x03 0x01 0x04 0x00 0x00 0x00 0x00 0x14 0x0e 0x63 0xa9 0xb5
D/Server(432): 0x8b 0xfc 0xe2 0x15 0xe9 0x60 0x01 0xc4 0x9e 0x4b 0xe9 0x67 0xc5 0x06 0x7f 0x2a
D/Server(432): BReNTT:响应142字节的内容
D/Server(432): BReNTT:/stream>> POST !font - family:宋体

最后我拿到了名单。与Param1和Param2。
它们是AES密钥和AES初始化矢量数据,分别是72字节和16字节。然后,从同一个端口7100,突然,iPad的屏幕二进制数据连续不断地向我袭来。

关键字:deviceInfoTime Value=-422009852.719235
关键字:macAddress Value=64:20:0C:EF:DF:81
关键字:param1为二进制类型。
brent - debug (432): 46 50 4C 59 01 02 01 000 000 000 000 3C 000 000 000 000 000
布伦特-调试(432):88 E4 F8 2C 81 78 C1 8B 47 51 AC 24 B2 7C 0C 2A
brent - 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
布伦特-调试(432):8fe1 54 A6 0A EC EE 18
关键字:sessionID值=-1483478994
关键字:deviceID Value=110088818777987
关键字:connectTime值=0.009737
关键字:版本值=200.54
关键字:latencyMs Value=90
关键字:fpsInfo type=4
关键字:authTime Value=422009852.735252
关键字:prepareTime值=0.004542
关键字:configTime值=0.004692
关键字:resolveDNSTime Value=0.008402
关键字:timestampInfo type=4
关键字:param2是二进制类型。
布伦特-调试(432):66 A7 5D 63 6D 80 C8 30 19 952a EC 2D D7 2F 1C

和. .
这就是我想问你的问题。

根据非官方播放协议,
如果存在可选的Param1和Param2,那么屏幕数据是加密的,对吗?

我如何处理这些72字节,和16字节的AES数据解密h.264屏幕数据,来自我的iPad??

谢谢。

两个参数;param1和param2使用FairPlay加密。你需要先弄清楚加密是如何工作的,然后你会得到AES密钥来解密H.264视频流。