第三方 iMessage 通信方案

1、iMessage介绍

iMessage 是 Apple Inc. 开发的一项即时通讯服务,于 2011 年推出。iMessage 只在 Apple 平台上运行,包括 macOS、iOS、iPadOS 和 watchOS。iMessage 的核心功能可在所有支持的平台上使用,包括发送短信、图像、视频和文档;获取递送和已读状态(已读收据);端到端加密,只有发送者和接收者才能读取消息,其他人,包括苹果本身,都无法读取它们。

消息展现形式:

绿色文本气泡 表示基于短信的通信;在所有 iOS 设备上,蓝色文本气泡表示 iMessage 通信。

2、通信方案

  1. Mac 中转方案:可用,适合个人用户 或者 10-20位用户群体共用一台Mac
  2. 越狱iPhone中转方案:需要指定机型,只能一对一
  3. iMessage Cloud 方案: 已废弃

2.1、Beeper iMessage Cloud 方案 (已废弃)

  1. 2023 年 12 月 5 日, Beeper Mini 在 Android 上发布,该应用程序使用了 iMessage 协议的逆向工程。 Beeper Mini for Android sends and receives iMessages, no Mac server required

    1. 拥有 Android 手机的用户可以在没有 Apple ID 的情况下使用 Beeper Mini,并且仍然可以发送和接收加密的 iMessage
    2. 逆向方案(已废弃): github.com/JJTech0130/...
  2. 2023年 12 月 9 日 被苹果关闭。

    1. Apple confirms that it shut down Beeper Mini's iMessage for Android, and will continue to do so
    2. Apple has seemingly found a way to block Android's new iMessage app
  3. Beeper Mini 放弃了绕过苹果关闭该服务的尝试,停止对 iMessage 的逆向工程。

iMessage 通信流程

via: Apple iMessage 信息如何安全发送和接收信息

该Cloud方案需要Hack的部分

连接 APNs 服务

APN可用于发送推送通知以及接收推送通知。为了连接到 APNs,您需要一个由 Albert 激活服务器颁发的客户端证书。

  1. [Apple正常机制]在 Apple 注册并激活设备时,会生成 PUSH 证书。在第一次连接到 Apple 服务器期间,会向 albert.apple.com 发送证书请求。 此服务器运行一个名为 Apple Iphone Device CA 的证书颁发机构,负责对每个请求进行签名。

    1. 该方案自签代码 pypush/albert.py at main · JJTech0130/pypush
    2. 相关知识可参考 Certificate Pinning & Man-In-The-Middle Attacks on Mobile Apps
  2. 负责设备所有 PUSH 通信的证书。此证书不直接涉及 iMessage,但由于 iMessage 是通过 PUSH 进行的,因此它无论如何都可以发挥作用。

  3. 当涉及到iMessage时,所有PUSH通信都是在TLS中与服务器端口5223进行,主机名取自 [0...255]-courier.push.apple.com

  4. 对于 iMessage,当设备连接到 APNs 时 ,使用 com.apple.madrid 来筛选消息。

注册IDS服务

Apple 身份识别服务 (IDS)

  1. 当设备注册到服务时,Apple 会计算推送令牌。Push-Token 它是对 iDevice 的唯一标识符。
  2. 当客户端发送一条消息时,它实际上发送的消息数量与收件人具有推送令牌的消息数量一样多,因此消息可以传递到每个 iDevice。如前所述,这些消息通过端口 5223 上的网关发送到 Apple 推送网络服务 (APNS)。
  3. 当用户想要发送 iMessage 时,他首先提供一个或多个目标 URI。由于通信是端到端加密的,需要到ESS服务器检索所需的密钥。

发出 IDS 注册请求时,需要一个"validation data"的二进制数据。这本质上是 Apple 的验证机制,以确保非 Apple 设备无法使用 iMessage。

  1. 为了生成"validation data",将使用有关设备的信息片段,例如其序列号、型号和磁盘 UUID。如果验证失败就会收到"客户代码"错误提示。
  2. 生成此"validation data"的二进制文件是高度混淆的。pypush(已失效的逆向方案) 通过使用自定义 Mach-O 加载器和 Unicorn 引擎来模拟混淆的二进制文件来回避此问题。

通信协议相关研究参考


发送消息

写一条消息,然后按发送按钮。客户端会先从 Apple 的 ESS 服务器请求发送消息所需的信息。ESS 服务器返回:

  1. Push-Token,推送令牌即 iDevice 的唯一标识符。
  2. 密钥,用来端到端加密通信。

ECDSA public key (256-bit)

RSA public key (1280-bit)

给定一个目标地址(例如,URi,它可以是电话号码或电子邮件),Apple有办法将其与与该URI相关的所有设备(iPhone,iPad或OS X系统)链接起来。一旦Apple知道所有涉及的设备,Apple就会将消息带到适当的设备。

Beeper mini基于该Cloud的流程图

详情见: blog.beeper.com/2023/12/05/...

2.2、现阶段可行的方案

由于越狱iPhone使用只能一对一,目前最合适在 Apple 生态系统之外运行 iMessage 的实际解决方案需要 Mac 服务器,并依靠 AppleScript 脚本来自动执行 Messages.app UI 操作。这样就无需在客户端上重新实现消息发送协议。但是,只要您想使用iMessage,Mac就必须运行。

自主搭建方案 : mautrix-imessage - mautrix-bridges

基于beeper提供的方案: 详情见下面

运行机制

"客户端"使用三个进程:iChat、imagent 和 applepushserviced。iChat(现在是 Messages)显示 UI,但不处理任何特定于协议的内容,这就是 imagent 所做的(如果 iChat 未运行,用户将保持登录状态)。但是,对于 iMessage,imagent 本身不会建立连接,而是使用 applepushserviced。这是一个系统级守护程序,它保持与 courier.push.apple.com 的持续连接,可能适用于所有推送通知。

发送消息: Messages.app -> imagent -> identityservicesd -> apsd

apsd:Apple PUSH 服务器守护进程,负责将消息从 Apple 传输到设备。

imagent:iMessage任务的后台进程,例如在应用程序关闭时保持连接等。

自主搭建方案中发送消息的代码,基于Apple Script操作

via: github.com/mautrix/ime...

go 复制代码
// 部分截取示例
const sendMessage = `
on run {targetChatID, messageText}
        tell application "Messages"
                send messageText to chat id targetChatID
        end tell
end run
`

const sendMessageWithService = `
on run {targetChatID, messageText}
        tell application "Messages"
                try
                        set theService to 1st service whose service type = %s
                on error number -2753
                        set theService to 1st service
                end try
                send messageText to chat id targetChatID of theService
        end tell
end run
`

Beeper 基于Mac中转通信方案

具体操作:

  1. 在 Mac 上安装 Beeper Desktop -- 使用您的 iMessage 注册码设置 Beeper Mini。或者运行 mac-registration-provider 也可以获取注册码;此方法无法进行电话号码注册。

  2. 没有 Mac -- 让在 Mac 上安装 Beeper 的朋友分享他们的 iMessage 注册码,您可以将其输入到最新的 Beeper 桌面应用程序中。在我们的测试中,10-20 个 Beeper 用户可以安全地使用相同的注册数据。[数据来源: iMessage and Phone Registration Are Back -- Kinda]

共享代码的次数过多,开始出现连接等问题,需要在 Beeper 桌面→设置中→ iMessage 注册码→再生

3、RCS进展

  1. 如果Apple RCS推出,那么短信和彩信的局限性将不再困扰iPhone和Android用户之间的消息传递对话。
  2. iMessage不会消失。它将继续成为用于iPhone用户之间所有通信的消息传递平台。RCS 将简单地取代 SMS 和 MMS,并与 iMessage 分开存在。苹果表示,短信和彩信也将在需要时继续作为后备。

via: 9to5mac.com/2023/11/16/...

相关推荐
Estar.Lee3 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
傻啦嘿哟4 小时前
代理IP在后端开发中的应用与后端工程师的角色
网络·网络协议·tcp/ip
向阳12184 小时前
Dubbo HTTP接入之triple协议
网络协议·http·dubbo
Estar.Lee6 小时前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
hgdlip11 小时前
主IP地址与从IP地址:深入解析与应用探讨
网络·网络协议·tcp/ip
lwprain12 小时前
安装支持ssl的harbor 2.1.4 docker 19.03.8 docker-compose 1.24.0
网络协议·ssl·harbor
软件技术员12 小时前
Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书
服务器·网络协议·ssl
C++忠实粉丝14 小时前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
C++忠实粉丝17 小时前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
Estar.Lee17 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip