AirPlay 镜像解密(FairPlay)

逆向工程 拆卸 反编译 混淆 加密 解密
2021-06-22 05:08:10

我一直在研究一些成功“复制”的 3rd 方应用程序(尽管我认为不一定要完全理解算法,而只是从原始二进制文件中提取逻辑核心并将其复制到他们自己的程序)模拟具有完整AirPlay 镜像支持的 Apple TV 服务器的主要逻辑,仅举几例:

  1. AirServer (OSX/Windows)
  2. 反射器 (OSX/Windows)
  3. 空气接收器 (Android)
  4. X-Mirage (OSX/Windows)
  5. AirPin PRO (安卓)
  6. EZCast 屏幕 (Android)
  7. 小米米连(安卓/小米盒子上运行)

通过查看他们的反编译代码和网络上的其他一些参考资料,大多数协议方面已经知道/相对容易弄清楚,我已经做到了,所以没有汗水,关键部分我很难理解这些人如何能够成功与 FairPlay 解密部分有关(即:接收和响应fp-setup挑战以及解密挑战最后一步中发送的 AES 密钥时)。

他们似乎都从Apple 的原始/守护程序代码中提取了白盒/混淆功能,并将其嵌入到他们的源代码中,将种子/加密/解密的调用委托给它。airtunesdfairplayd

我注意到在一些 iOS 设备中这个守护进程也存在(最有可能在通过 AirPlay 将屏幕镜像到兼容服务器时用于加密提要)但想知道这与 Apple TV 附带的那个有多大不同,如果我的假设是实际上是正确的(是不是这些人中的大多数人都从那里获取了这段代码?)。

希望以前有经验的人或对该主题有更多了解的人可以提供一些启发/指示,这样我就可以找到一种方法来至少做这些人能够完成的事情(这并不是真正对代码进行反混淆,而只是提取将其嵌入到他们自己的程序中)。

PS:为了清楚起见,除了确认之外,我正在寻找一些关于如何从所述二进制文件中提取可编译代码的指针,因为我尝试通过 IDA Pro 进行反汇编和反编译并没有为我提供太多我可以重用来编译重现那块拼图的新代码。

4个回答

我花了一些时间研究 Apple 的 airplay 镜像支持,该支持由 Fairplay 协议加密。在调查了几个现有的商业应用程序后,我终于设法获得了一种解密受公平播放保护的流的方法。我已经扩展了 shairplay 代码来演示这种能力。请查看https://github.com/foxsen/shairplay README.md 的部分内容:

Foxsen 更新,2015/4/20:对公平播放协议和播放的实验性支持:

  • 支持公平播放加密音频(et == 3)
  • 支持 AAC-ELD 音频(尚未测试)
  • 添加了 airplay 服务框架,直到镜像连接开始流式传输。但是 UI 和回调要完成。
  • 公平游戏支持是通过与服务器的交互来执行的

因为我没有足够的时间和兴趣做所有其他必要的编码来制作支持镜像的完整开源解决方案,我希望人们可以帮助继续该项目或将我的代码移植到其他项目中,例如 kodi。我愿意帮助解决相关问题。

肮脏的工作隐藏在我的服务器应用程序中。在使用 Fairplay 的会话期间,我们需要与服务器交互 3 次才能完成工作。您可以阅读上面的代码以了解如何操作。当我有更多的时间时,我准备写一些关于这部分工作的东西。基本上它涉及一些逆向工程和很多技巧,可以从二进制文件的一部分重建可重定位的对象。

该应用程序的公共访问现在是开放的,并且可以免费供个人访问。如果有人想在商业环境中使用它,你可以联系我。

快乐黑客。

一般过程是让官方 DRM 解密您想要的内容并获取它。Clutch 在 iOS 上执行此操作。反编译是一个单独的主题,与 DRM 颠覆一样大。

我也已经研究了一段时间,并得出了与您完全相同的结论。我认为唯一可行的方法是反编译您拥有的内容并将其嵌入到您的新进程中。也许我们可以进一步讨论这个问题。

从我的工作(关于申请我不会透露)我会给出一个简短的结论。设备不使用较旧的 AirPlay 方法。例如,不仅仅是一个可以在任何设备上解密的密钥。您必须有一个服务器,我们称其为“AirPlay 服务器”,该设备为该特定会话调用解密密钥。其余的工作在设备上完成(解密)。所以设备询问服务器,服务器用密钥响应,设备使用密钥进行解密。大多数实际工作都是在设备上完成的。