Apple通过“机场实用程序”为其机场产品提供固件更新。可以在〜/ 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>
            ...


对于Airport Express(型号A1392,产品ID 115,请参阅WikiDevi,Rogue Amoeba的Teardown),有3个固件版本:7.6.2、7.6.3和7.6.4(当前)。

我下载了所有3个版本,并在它们上使用了binwalk(v1.2.2-1)。它们似乎已被加密:字符串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(aka 7.x)

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

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

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

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

偏移量30-32:静态十六进制00 00 00
产品ID 115

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

偏移量35:固件次要版本(带8位符号)的十六进制63 =>次要版本63(aka x.63)

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


你对如何前进的任何想法?

什么样的加密可能已被使用?苹果似乎将AES用于iPhone和AppleTV固件。

评论

您为什么认为它是加密的?

因为binwalk在固件文件中没有找到内容部分,并且当您基于熵启发式方法(-H开关)检查未知的压缩/加密时,binwalk说它可能已加密。只有高熵块,没有低熵块。从我阅读的内容来看,LZMA压缩也可能像这样,但是随后您会发现至少缺少某种LZMA标头。

好问题。你在这方面有什么进展吗?

#1 楼

如果它确实是加密的,则需要拆开设备,取出ROM,读取它,然后对代码进行反向工程。
该区域已经完成了一些先前的工作,请参见此处该网站的所有者正在维护Shairport,这可能会很有用。

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

评论


我可以确认固件已加密和压缩。您可能要看一下hsorbo.no/2010/02/22/ax-part1

– ipatch
2014-2-24的3:35

#2 楼

对于任何来自google的人,我的确可以确认这些设备的固件已加密并压缩压缩。 />此外,我还整理了一个Wiki,记录了我们对AirPort系列产品的发现。这些设备的Big Endian变体。如果我的记忆正确地为我服务,则该特定型号的AirPort Express使用MIPS Big Endian处理器。它将持续下去。如果有机会,请加入我们在freenode.net上的#theairportwiki中。

干杯🍻
Chris

#3 楼

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

关于此的一系列有关机场快线的信息,摘自以下博客:http://www.hsorbo.no/将整个内容复制并粘贴到此处,因为我不相信该博客保持在线状态。我也使用archive.org整理了一些照片。不幸的是,到末尾的键的链接是无效链接。快速基站。有两个原因。首先是此固件中包含Airtunes专用密钥。至少对我来说,第二个也是更重要的部分是,它与wrt54g几乎相同,另外它还增加了USB和声卡。在上面运行linux / openwrt真是太酷了。这些访问点的反向苹果固件的主要问题是它们已加密,并且机场快车在闪烁时会解密固件,因此您无法真正使用固件更新文件做任何事情。

A时光倒流,我在推特上发帖说我需要一个坏掉的机场快递!我真的很幸运,我的一个朋友看到了这条推文,并把残破的机场给了我。我拆开了它,发现闪存是AT45DB321B,这很好,因为Atmel公开了其数据表,但不好的消息是它安装在BGA上,而我的旧焊台不适合这样做。每个人都知道我是一个真正的eBay员工,所以我去了ebay并订购了这款出色的八千返修台克隆(YIHUA 852D +)。这有我需要的热风枪。这是我卸下IC时的一小段视频:
闪光灯的照片[博客缺失]

连接完所有东西后,我将其连接到Bus Pirate上,经过反复试验后设法与该芯片通信。

我的办公桌照片[缺少博客]

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

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

有很多选择今后,当我取得进一步的进步时,我将发布一个新的博客条目。请原谅这篇文章中的不好的语言,因为我眼前有这个非常性感的二进制斑点,所以我现在不想花时间在语法上。

黑客很高兴! br />对Airport Express Part 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身份验证的字符串)的屏幕快照:


我真的认为这一发现是第二部分的原因,因为我现在很确定其余的方法是可行的,尽管很费时间。我不得不用固件转储替换每次发生的转储,因为文本变得非常有问题

对Airport Express Part 3进行反向工程

2010年2月26日更新。内存对齐花费了几个小时。通过使用标准的unix控制台工具在固件中转储很多字符串偏移量来完成此操作:strings -n 10 -o | grep“音频” | awk'{print $ 2}'然后,我编写了一个IDA脚本,该脚本转储了所有装入操作的偏移量,并制作了第二个脚本,对这些偏移量进行了强行匹配。最佳匹配是0x80010000,这并不令人惊讶,这使IDA专业人士非常高兴,她开始自动分析固件。这是内存偏移的屏幕截图:



这是IDA的实际屏幕截图:



我已经进行了大量的反转,但一切进展顺利,尽管仍然没有任何ETA, 。订阅博客,或在周末后检查是否有好奇。

对Airport Express Part 4进行反向工程

2011年4月11日
RAOP / Airtunes密钥在这里http://static.hsorbo.no/0xff/airtunes.pem尽管我已经拥有了相当长一段时间的钥匙,但它还是在这里首次公开了:http://www.mafipulation.org/blagoblig/2011/04/ 08#shairport