反转 Apple Airport Express 固件更新

逆向工程 固件 加密
2021-06-30 07:28:46

Apple 通过“Airport Utility”为其机场产品提供固件更新。固件文件可以在 ~/Library/Application\ Support/Apple/AirPort/Firmware/version.xml 的帮助下下载,其中包含所有产品及其可用的固件版本:

            ...
    <dict>
        <key>location</key>
        <string>http://apsu.apple.com/data/115/041-9815.20130814.1Rver/7.6.4.basebinary</string>
        <key>newest</key>
        <true/>
        <key>productID</key>
        <string>115</string>
        <key>sizeInBytes</key>
        <integer>5674968</integer>
        <key>sourceVersion</key>
        <string>76400.10</string>
        <key>version</key>
        <string>7.6.4</string>
    </dict>
    <dict>
        <key>location</key>
        <string>http://apsu.apple.com/data/115/041-9696.20130207.Ch5g6/7.6.3.basebinary</string>
        <key>productID</key>
        <string>115</string>
        <key>sizeInBytes</key>
        <integer>5674344</integer>
        <key>sourceVersion</key>
        <string>76300.7</string>
        <key>version</key>
        <string>7.6.3</string>
    </dict>
    <dict>
        <key>location</key>
        <string>http://apsu.apple.com/data/115/041-0311.20130207.aaWs/7.6.2.basebinary</string>
        <key>productID</key>
        <string>115</string>
        <key>sizeInBytes</key>
        <integer>5627396</integer>
        <key>sourceVersion</key>
        <string>76200.16</string>
        <key>version</key>
        <string>7.6.2</string>
    </dict>
            ...

机场快线(型号 A1392,产品 ID 115,参见WikiDeviRogue Amoeba拆解)有 3 个固件版本:7.6.2、7.6.3和 7.6.4(当前)。

我下载了所有 3 个版本并在它们上使用了 binwalk (v1.2.2-1)。它们似乎被加密了:

$ binwalk -H 7.6.3.basebinary

DECIMAL     HEX         HEURISTIC ANALYSIS

-------------------------------------------------------------------------------------------------------------------

0           0x0         High entropy data, best guess: encrypted, size: 5673944, 0 low entropy blocks

检查不同的固件文件揭示了它们的共同结构。

偏移量 0-D:静态字符串 APPLE-FIRMWARE

偏移量 E:静态十六进制 00

偏移 F:固件格式版本 (?)(8 位有符号)十六进制 2D => 格式 45(7.5.x 固件的格式版本为 44,7.7.x 固件的格式版本为 46)

偏移 10-12:静态十六进制 00 00 00

偏移 13:产品 ID(8 位有符号)十六进制 73 => 产品 ID 115

偏移 14:固件主要版本(8 位有符号)十六进制 07 => 主要版本 7(又名 7.x)

偏移 15:固件次要版本(8 位有符号)十六进制 63 => 次要版本 63(又名 x.63)

偏移量 16-1F:以下部分的校验和或大小?

偏移 20-2D:静态字符串 APPLE-FIRMWARE

偏移量 2E:静态十六进制 00

偏移 2F:固件格式版本 (?)(8 位有符号)十六进制 2D => 格式 45(7.5.x 固件的格式版本为 44,7.7.x 固件的格式版本为 46)

偏移量 30-32:静态十六进制 00 00 00

偏移 33:产品 ID(8 位有符号)十六进制 73 => 产品 ID 115

偏移 34:固件主要版本(8 位有符号)十六进制 07 => 主要版本 7(又名 7.x)

偏移 35:固件次要版本(8 位有符号)十六进制 63 => 次要版本 63(又名 x.63)

偏移量 36-3F:以下部分的校验和或大小?

偏移 40-12F:引导代码?344FE72ADE3CC2202D6A221A3B67B6075B0F13CA37F5DCCAE5ED626BAE0B4655E618766D703B5190CCD578BCF06D6C9ECD97265B962F49478BE1E9FDE8160E5CCDC09B0C975A3D271D988791258ACC6E679A1556F01C2100DDD0B35E8DA388119C35AC8765DB5DC6AAD6E3D7232D47B4EFA97B32AEF6FF77EDB43946103187342DF68BE88D6B005DAF7CC212777C4FA7FEFD3FD299088EE73EC6FAB1596A92835E4E2450750D9AB5F86780464E341CBFE61E7B8F224285CB3D47D3891AD614B1ABD04DB3DACE7622B22355752F29FF7C5492635F9B99F966759DA4070F23B1D20E197F72BDAFA2B36B567C8E756147A2


你有什么想法吗?

可以使用什么样的加密?Apple 似乎对 Iphone 和 AppleTV 固件使用 AES。

3个回答

如果它真的是加密的,你需要拆开设备,拿起 ROM,读取它并逆向工程代码。该地区已有一些先前的工作,请参阅此处 此站点的所有者正在维护shairport,它可能有用。

在将更新发送到设备之前,加密代码被解密的可能性很小(我个人不相信),因此最好查看实际读取更新文件并更新 Airpot Express 的实用程序。

对于从 google 来到这里的任何人,我确实可以确认这些设备的固件已加密并 gzip 压缩。

如果您对上述声明有任何疑问,请查看此内容

此外,我不久前整理了一个wiki,记录我们对 AirPort 系列产品的发现。

最后,我最近再次开始修补这些设备,并成功地为这些设备的 ARM Big Endian 变体构建了一个 NetBSD 工具链。如果我没记错的话,这个特定型号的 AirPort Express 使用 MIPS Big Endian 处理器。

TL;DR
使用上面提到的工具,你可以在你的 AirPort 设备上启用 SSH,它会一直存在。如果有机会,请加入我们在 freenode.net 上的 #theairportwiki。

干杯🍻
克里斯

就像其他人所说的那样,您可能必须走硬件路线,并物理连接 Bus Pirate 或类似设备以转储固件。当设备运行时,您将获得解密的固件转储。

这是一个关于机场快车的系列文章,取自这个博客:http : //www.hsorbo.no/但我将把整个内容复制并粘贴到这里,因为我不相信这个博客会留在网上。我也使用 archive.org 拼凑了一些照片。不幸的是,最后指向密钥的链接是一个死链接。

对机场快线进行逆向工程第 1 部分

很长一段时间以来,我一直想对机场快线基站进行逆向工程。有两个原因。首先是在这个固件中是私人 Airtunes 密钥。第二个也是更重要的部分,至少对我来说,是它几乎与 wrt54g 相同,并且增加了 USB 和声卡。让 linux/openwrt 在这上面运行会非常酷。为这些接入点反转 Apple 固件的主要问题是它们是加密的,机场快车在刷机时会解密固件,因此您无法真正对固件更新文件做任何有趣的事情。

前段时间我在推特上发帖说我需要一个破损的机场快递!我真的很幸运,我的一个朋友看到了这条推文,并把他坏掉的机场给了我。我拆开它发现闪存是 AT45DB321B,这很好,因为 Atmel 公开了他们的数据表,不太好的消息是它是 BGA 安装的,我的旧焊台不适合这个。每个人都知道我是一个真正的 ebay 妓女,所以我去 ebay 并订购了这款出色的 hakko 返修站克隆 (YIHUA 852D+)。这有我需要的热风枪。这是我拆卸 IC 时的一个简短视频:

拆焊后,我将它粘在面包板上并连接了一些电线,这有点棘手,因为它很小。

闪光灯照片[博客中丢失]

一切都连接好后,我将它连接到我的 Bus Pirate,经过大量的反复试验,设法与芯片通信。

我办公桌的照片 [博客中丢失]

最后我写了这个小python脚本来转储芯片的内容。

我现在拥有机场快线的未加密固件,但仍然有很多东西仍然存在。固件是压缩的,我没有成功地对其进行强力膨胀,所以我可能不得不开始对引导加载程序进行逆向工程,以获取未压缩的固件。另一种选择是在 qemu 下运行它,解压缩部分应该是相当通用的 MIPS 代码。第三种选择是将它闪存到我的 wrt54g 上并进行 jtag 调试,如果我真的很幸运,我会在 linksys 上获得串行端口和引导加载程序。

未来有很多选择,当我取得进一步进展时,我会发布一个新的博客条目。请原谅这篇文章中的糟糕语言,我不想花时间在语法上,因为我面前有这个非常性感的二进制 blob。

快乐黑客!

逆向工程机场快线第 2 部分

2010 年 2 月 23 日昨天我正在分析我的固件转储,但我无法理解很多。引起我注意的一件事是固件转储周围散落着很多 0xFF。我找到了一个模式,我试图说服自己这是某种容器或重要数据块之间的填充。然后当夜晚接近 BOOM 时,它击中了我。模式是这样的:512 字节数据,16 字节 0xFF,512 字节数据和 16 字节 0xFF。这很重要,这是问题/解决方案。

AT45DB321B上的闪存芯片就像一本书,8192页,每页528个字母。当我抛弃它时,我的程序只是仔细阅读了这本书,并仔细记录了每个字母。现在机场快线不这样做了,机场只是翻到它想要的页面并阅读需要的内容(随机访问)。现在还有另一个限制,机场快线每页读取的字母不超过 512 个。这意味着他不在乎我小心翼翼地放入我的转储/分析中的最后 16 个字母。我修复了这个问题,我的蛮力解压程序(15 行 python 脚本)找到了引导加载程序和主固件。他们的 md5 总和是:ff4c561a6dcce8686749594d84ff4e7d 和 7db70daf035f085eb455d8de3c2099fb。一个叫 James 的家伙似乎已经完成了这个固件的部署:) 我认为现在剩下的就是花时间使用 IDA Pro。我需要获得内存对齐,因为内存的起始地址似乎是 0x8000000 + 一些偏移量。

IDA Pro 中字符串窗口的屏幕截图(Airtunes 身份验证中使用的字符串):

字符串截图

我真的认为这个发现适合第 2 部分,因为我现在很确定其余的都是可行的,尽管很耗时。

附注。我不得不用固件转储替换每次出现的转储,因为文本变得非常可疑

逆向工程机场快线第 3 部分

2010 年 2 月 26 日 一个小更新。内存对齐需要几个小时。我通过使用标准的 unix 控制台工具在固件中转储大量字符串偏移量来做到这一点:strings -n 10 -o | grep "音频" | awk '{print $2}' 然后我编写了一个 IDA 脚本来转储所有负载操作偏移量,制作了第二个脚本来强制匹配偏移量。最佳匹配是 0x80010000 不出所料,这让 IDA pro 非常高兴,她开始自动分析固件。这是内存偏移的屏幕截图:

IDA内存

这是 IDA 的实际屏幕截图:

国际开发协会行动

我已经完成了大量的倒车,一切都很顺利,但仍然没有任何预计到达时间。如果您好奇,请订阅博客或在周末后回来查看。

对机场快线进行逆向工程第 4 部分

2011 年 4 月 11 日 RAOP/Airtunes 密钥在这里http://static.hsorbo.no/0xff/airtunes.pem虽然我已经拥有密钥很长一段时间了,但它首次在此处公开:http://www.mafipulation。 org/blagoblig/2011/04/08#shairport