16块马币体验AirTag追踪功能。原理解说和安装过程。

ESP32 running OpenHaystack firmware
“AirTag”开始工作

16块马币是要怎么自己动手做“AirTag”?

回答这个问题,就需要提到OpenHaystack这个在Github上的开源项目。OpenHaystack是由德国一所大学Technical University of Darmstadt的Secure Mobile Networking Lab负责开发和维护,这个项目主要是为了了解和研究苹果Find My网络的工作原理。负责这个项目的安全研究人员通过逆向工程(Reverse Engineering),让配备蓝牙的设备可以被Find My网络追踪。

OpenHaystack的团队发布了关于Find My网络工作原理的论文,更多详细的内容可以查阅论文。说实话,这篇论文对我来说是太难了,特别是6.1 Cryptography(密码学)这一部分。如果有大佬阅读后,欢迎来留言或直接写成文章贴在留言区分享,大家一起交流一下。

在OpenHaystack的Github上,有简短的介绍OpenHaystack这个项目是如何与Find My网络一起工作,我在这里就做一个简单说明(如果我有理解错误,欢迎指正和一起讨论)。

  1. OpenHaystack团队在了解了Find My网络工作原理后,生成了一组公私密钥(Public-Private Key)。私有密钥(Private Key)会被保存在Keychain,公开密钥(Public Key)会在刷OpenHaystack自制的固件时一同部署(Deploy)到蓝牙设备上。
  2. 在刷完OpenHaystack提供的固件后,蓝牙设备就会开始通过蓝牙,对周围的蓝牙设备发送自己的公开密钥。这里补充一点:iPhone无法分辨出来,这些通过蓝牙发送过来的公开密钥是否来自官方认证的设备。
  3. 附近的iPhone接收到公开密钥后,iPhone会开始获取自己当前的GPS信息,再通过公开密钥把这份GPS信息加密(Encrypt),上传到苹果的服务器。
  4. 苹果并不知道这些GPS信息属于哪一位用户或账号,所有苹果的用户都可以通过相应的公开密钥下载这些GPS信息。但,只有掌握相应私有密钥才能解密(Decrypt)这一份GPS信息。
    OpenHaystack写了一个macOS邮件(Apple Mail)应用的插件,通过这个插件下载这些GPS信息。再通过OpenHaystack写的macOS软件与插件协作,解密和显示这些GPS信息。OpenHaystack的macOS软件需要同时打开macOS邮件,才能正常工作。

上述就是Find My网络的工作原理和OpenHaystack的“骇”入方式。


安装教程

免责

在你打算跟着教程去自制“AirTag”前,我必须要提醒这件事。根据OpenHaystack团队给出的免责声明,这个项目还处在实验阶段,所有的代码都没有经过标准的测试。其中一个现有的问题,就是固件发送出去的公开密钥是一组固定值,很可能别的设备也能追踪到你刷的设备。所以,我建议大家拿来体验一下就好,不要真的当作AirTag来使用。

OpenHaystack的免责声明原文

OpenHaystack is experimental software. The code is untested and incomplete. For example, OpenHaystack accessories using our firmware broadcast a fixed public key and, therefore, are trackable by other devices in proximity (this might change in a future release). OpenHaystack is not affiliated with or endorsed by Apple Inc.

所需要准备的硬件:

  1. 一台运行macOS BigSur的电脑。
    OpenHaystack的软件是基于macOS Big Sur开发,但我也有看到有人在macOS Catalina上跑。我自己是使用黑苹果运行macOS Big Sur,没有遇到什么问题。(顺便打个广告,如果有兴趣看我组装黑苹果电脑的过程,点击这里Youtube链接。)
  2. 一张ESP32开发板。
    OpenHaystack官方有支持几种开发板,目前支持BBC micro:bit v1、ESP 32和Raspberry Pi 4,更多详情请点这里。在马来西亚,ESP32比较便宜,而且也比较容易买。我用的开发板是ESP32 DEVKIT V1。
  3. 一根USB-A转microUSB的数据线。

所需要下载的软件:

  1. OpenHaystack整个项目。
    记得要解压先。
  2. OpenHaystack的软件
  3. Python 3
  4. ESP-IDF。
    需要这个框架(Framework)去构建(Build)OpenHaystack提供的固件。ESP-IDF的安装教程可以点这里,只需要跟到Step 4就好了。
    *我自己遇到的问题是安装CMake和Ninja,HomeBrew一直找不到这两个软件。后来,使用MacPorts才搞定。

安装过程:

直接点开OpenHaystack的软件,软件会提示说需要安装和启动邮件插件。

OpenHaystack提醒需要安装Mail Plugin
OpenHaystack提示需要安装和启动邮件插件。

这里只需要根据官方教程就可以顺利安装,安装插件前需要暂时关闭系统的GateKeeper。OpenHaystack团队承若不会读去其他资料,例如:邮件内容。插件代码可以在这里查看


  1. 点开Terminal,输入 sudo spctl --master-disable,再敲Enter键。这个指令会关闭GateKeeper让插件安装。
  2. 点开系统的邮件(Apple Mail)应用。点选Preferences -> General -> Manage Plug-ins...,勾选 OpenHaystackMail.mailbundle,再点选Apply and Restart Mail。
    *如果你找不到Manage Plug-ins...这颗按键,就需要用Terminal输入 sudo defaults write "/Library/Preferences/com.apple.mail" EnableBundles 1 后,敲Enter键。Apple Mail需要重启才会显示。
  3. 在Terminal输入 sudo spctl --master-enable,敲Enter键, 把GateKeeper开回来。

基本上Apple Mail的插件已经安装好了。

OpenHaystack遇到的Bug。
这就是目前OpenHaystack的Bug。

照例来说,OpenHaystack的macOS软件可以直接打开,并且部署固件在已经接上的ESP32。但是,我就一直中标题为“could not deploy”的错误。后来查了一下,其他使用者也有遇到相同的问题

我只好选择使用OpenHaystack提供的刷机脚本(script),在刷机之前需要使用提前下载和安装好的ESP-IDF框架。这个时候,需要更换Terminal的目标路径到OpenHaystack项目内的Firmware -> ESP32。之后输入 idf.py build,再按下Enter就会开始构建这个ESP32的项目。构建完成后,在ESP32文件夹内会多出一个几个文件:

  • build/bootloader/bootloader.bin
  • build/partition_table/partition-table.bin
  • build/openhaystack.bin

有了这些文件,就可以开始连接ESP32,开始刷固件。
官方给的指令例子是 ./flash_esp32.sh -p /dev/yourSerialPort "public-key-in-base64" 。需要替换掉的部分有两点:

  • /dev/yourSeriesPort - 这部分需要替换成现在连接上的ESP32接口,要查看这个接口可以通过Terminal输入 ls /dev/cu.*,再敲Enter键。
刷ESP32所需要的接口。
刷ESP32所需要的接口。

Terminal就会显示现在连接上的ESP32接口。

  • public-key-in-base64 - 这部分需要在OpenHaystack的macOS软件内获取公开密钥。
复制最重要的Advertisement Key。
复制最重要的Advertisement Key。

在OpenHaystack软件内点 + ,点选刚加的New accessory,点右键选 Copy Advertisement Key(Base64)。

获取了ESP32的接口和Advertisement Key后,就能替换掉那些部分,直接在Terminal上输入指令和执行。

我的例子: 

./flash_esp32.sh -p /dev/cu.usbserial-0001 "Z/pW4Qfdhk8JsmOplmOAWQjRzdmf7ZDyp6/SmQ=="

成功后,确保周围有iPhone开着蓝牙。过不久,就能在OpenHaystack的软件内查到现在ESP32的位置。

到这里,一颗“Air Tag”就DIY好了。相比苹果出品的AirTag,这颗ESP32 DIY的“Air Tag”相差很大吧。价格和背后技术的差距,当然没办法做到1比1还原。目前,OpenHaystack的固件会让ESP32不断通过蓝牙发送公开密钥。这代表就算是拿着移动电源供电,续航也不会像AirTag一样可以续航一年(官方数据)。外观体积和功能都不如AirTag,这颗DIY的“AirTag”拿来体验或者玩一下还是可以。

最后,还是要提醒一下。OpenHaystack还是实验阶段的项目,也可能会有隐私方面的问题。花少少钱来体验一下Air Tag,对我来说还是不错。OpenHaystack这个项目目前的发展情况有一些不明朗,主要还是没有官方的支持,而且又是通过“骇”入的方式。所以,不要抱太多希望在这个项目,体验一下就好。如果不喜欢OpenHaystack,ESP32也能刷其他的固件或上传自己写的代码,做其他的事。发挥你的创意吧。

Next Post Previous Post
No Comment
Add Comment
comment url