首页
社区
课程
招聘
[原创]AppleAccount注册之X-MMe-Nas-Qualify
发表于: 8小时前 280

[原创]AppleAccount注册之X-MMe-Nas-Qualify

8小时前
280

最近看了看雪的文章 琢磨一下这个参数

它讲的是 Apple ID 注册链里更靠前的一段NAS qualify 客户端证书,不是「随便换一台设备」。

流程大致是:

1. GET  setup.icloud.com/setup/qualify/cert     → 拿服务端 cert(公开,谁都能 GET)

2. POST setup.icloud.com/setup/qualify/session  → 带 X-MMe-Nas-Session,换 session-info

3. akd 里 AKAbsintheSigner._sessionInfoFromCertificateData(serverCert)

→ 在本机生成「客户端证书」

4. 再拿 clientToken、加密参数 L 等 → 走注册接口

作者用 Frida 主动调 _sessionInfoFromCertificateData省得自己拼 X-MMe-Nas-Session —— 这是 自动化/省步骤,不是 换 ECID

AKAbsintheSigner

✅ 大量 hook,signatureForURLRequest → 277B NQ

setup.icloud.com/.../qualify/session

✅ 4-URL harvest 里就有这一条

X-MMe-Nas-Session / session-info

✅ 同属 qualify/NAS 链,你们逆向的是 更后面的 NQ 277B + 配额

他说下篇讲 X-Apple-I-MD-M / X-Apple-I-MD

就是 anisette / SEP,你们 doc 84 已测:MID 能变,quota 不变

结论:这篇没推翻你们的结果,只是停在「客户端证书 + 注册 API」这一层,几乎没提 -22953 / ECID 配额。

文里「可以批量注册了」更可能是:

没有写、也没证明: 在一台已封配额的研究机上,换 header/换 cert 就能当新设备。

GET qualify/cert  →  谁都能拿(简单)

生成 client cert  →  必须走本机 AKAbsintheSigner + absd + SEP

公开的是 苹果下发的 server cert
client cert / session-info 仍是这颗芯片参与 attestation 的产物,不是 PC 上填个字符串。

这和你们测到的完全一致:hook 可以改输出,不能在没有 B 机 SEP 的情况下造 B 的身份。

你们研究机上的情况是:

看雪文停在「拿到 clientToken、注册成功」—— 很可能当时用的是 还有额度的机子,或 还没撞到 ECID 桶上限不代表换设备无限用

作者自己说:X-Apple-I-MD-MX-Apple-I-MD 下篇再讲。

恰恰是这两个 + 277B NQ(X-MMe-Nas-Qualify 一类) 把请求绑在 SEP/ECID 上;
你们已经证明:改 MID 字符串、改 serial,都绕不过 quota。

GET 公开 server cert

✅ 有

❌ 不涉及设备身份

Frida 调 _sessionInfoFromCertificateData

✅ 有

❌ 仍是 本机 出 client cert

自动化注册 API

✅ 有

⚠️ 仅在 该 ECID 还有额度

换 serial / UDID

❌ 几乎没提

❌ 你们实测无效

换 MID / NQ

说下篇讲

❌ 你们实测无效(且不能凭空造)

换 ECID(换物理机)

❌ 没提

唯一 多桶办法

目前看是绑定芯片 无法真实改X-MMe-Nas-Qualify 不过这个逆向倒是完全 下面给出一些重要参数

## 1. 现在进度到哪了?


| 已完成 | 未完成 |

|--------|--------|

| 277B 构造链 + live ops 轮换 | 未封 ECID 上 **建号成功** 端到端验证 |

| offline emu 4-URL strict 4/4 | 11 台 param-only 机型的 harvest(无真机) |

| 配额根因:绑 SEP/ECID,非 MID 字面量 | 「一台机无限注册」— **不可能** |


研究机 `c_research_iphone103`: pipeline 全绿,`quota_dialog=True`


---


## 2. 接上未封真机 + harvest 有什么用?不还是上限吗?


**对。一台机 = 一个配额桶,注册几个还是会满。**


harvest **不是**「突破上限」,而是:


1. **验证整条链路**在真实未封 ECID 上能跑通  

2. **自动化**在该机额度内建号(Frida sign + 可选 offline NQ)  

3. **离线复现**该机已 harvest URL 的 277B(不用每次点 UI)  

4. **吃满**这一台 ECID 允许的额度  


要多建号 → **多台未封真机**(机海),每台各 harvest 各用,不能一台冒充多台。


---


## 3. harvest 完之后是不是就不用任何信息、随便签名了?


**不是零信息,是「只要这一台自己的 harvest 包」。**


| 方式 | 需要什么 | 能做什么 |

|------|----------|----------|

| 真机在线签 | 机子连着,`sign_once_rpc.py` | 任意 URL,SEP 现场签 277B |

| 离线签 | 该机 tail93 + var160 golden(同 session harvest) | 仅对已 harvest 的 URL,PC 拼出同机 277B |


仍需要:


- **OTP**`X-Apple-I-MD`)每次变,建号通常要 fresh 或在线抓  

- **MID** 该机固定,harvest 一次可复用  

- **新 URL** 未 harvest 过 → 需再 live 签或扩 bundle  

- **不能**用 A 机 harvest 代表 B 机 ECID  


---


## 4. 为什么不能「改设备」?不就是几个字符串吗?hook 不行吗?


### 4.1 两类「值」


| 类型 | 例子 | 能 hook 改吗 | 改完有用吗 |

|------|------|--------------|------------|

| **明文** | serial, UDID, 型号, MAC | ✅ | ❌ 配额不变(FT4X plaintext swap 实测 HTTP/434 一致) |

| **SEP 凭证** | NQ 277B, MID 60B | ✅ 仅能贴**别台已签好的** | ❌ 不能从 serial ****出来;本机 ECID 不变则 quota 不变 |


苹果建号配额看的是 **芯片签出来的 NQ/MID**,不是表格里的 serial。


### 4.2 hook 能干什么、不能干什么


**能:**`akd` 出口 **替换** 已有样本(`gen_swap.js` — NQ / MID onLeave)  

**不能:** 只有 serial/UDID **凭空造** 另一台的 NQ/MID(私钥在 SEP 里,导不出)


### 4.3 MID reprovision 反例(doc 84 §3.4)


```

erase + provision → mid_changed = true

Settings UI       → quota_dialog 仍 True

```


⇒ 换 MID **字符串** ≠ 换设备;服务器记 **ECID**,不是 MID 字面量。


产物:`analysis/probe_mid_reprovision.json`


[招生]科锐逆向工程师培训(2026年7月3日实地,远程教学同时开班, 第56期)!

收藏
免费 2
打赏
分享
最新回复 (5)
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
混淆文里的技术,对 NQ 有没有用?
混淆技术        文章里干什么        对 Nas-Qualify「换设备」
MBA 混合布尔算术
藏常量、藏跳转地址
让 静态逆 absd/fairplayd 更痛苦;不给出 SEP 密钥
不透明谓词
塞死分支骗反编译
同上,拖时间
控制流平坦化
switch 状态机 + 动态跳转表
fairplayd 里很强;你们没靠静态逆它也能 hook akd 拿 NQ
移动栈
搞乱 IDA 栈分析
主要坑静态分析工具
文章自己也说:

混淆 拖慢 逆向,不能 阻止分析
没有永久保护,信息最终还是要解密/执行
工具在进化(goomba、Msynth、符号执行)
但对 NQ 来说,真正的墙不是「MBA 看不懂」,而是:

签名动作在 SEP 里,私钥不出来;你逆完所有 userland 混淆,也只能知道「谁去调 SEP」,不能「假装成另一颗芯片」。

能不能靠逆 FairPlay 来「逆 Nas-Qualify 的设备」?
分三层:

1. 搞懂 NQ 怎么拼(你们已经做了)
277B 结构、part_a / tail、4-URL offline emu 4/4
不需要把 fairplayd 的 MBA 全部化简
动态:AKAbsintheSigner + harvest 就够了(和看雪文调 _sessionInfoFromCertificateData 是同一思路)
2. 搞懂 FairPlay 里每一行混淆代码
可能帮助理解 absd 内部 怎么组 552B / 160B
工作量巨大(ARM64、iOS absd ≠ macOS fairplayd)
即使全逆完,还是要在 真机 SEP 上签,或 复用已 harvest 的样本
3. 「换设备」—— 混淆文完全帮不上
NQ tail / attestation 绑 ECID / SEP 根(句柄 a45b5e52)
换 serial、换 MID 字符串、reprovision 都绕不过 quota(你们实测)
逆混淆 不会 变出第二颗 SEP
所以:不是「FairPlay 太难逆所以换不了设备」,而是「设备身份在芯片里,不在混淆代码里」。

和看雪 qualify 文放一起看
文章        解决什么        不解决什么
看雪 qualify
cert → session → client cert → 注册 API
-22953 / ECID 配额
FairPlay 混淆文
fairplayd DRM 解密 怎么被藏起来
iOS NQ 怎么从 SEP 签、怎么换 ECID
你们 doc 81/150
NQ/MID 谁 SEP 绑、谁可 hook 改

三篇 不矛盾,拼起来是完整链路;没有任何一篇说「逆了就能一台机无限换设备」。

和 X-MMe-Nas-Session 的关系
X-MMe-Nas-Session:qualify/session 阶段(看雪文、setup.icloud.com/.../qualify/session)
X-MMe-Nas-Qualify:后续 GSA/建号请求里的 277B NQ(Absinthe 对 URL 签名)
doc 81:同属 Nas 家族,都走 absd/SEP,都不可伪造。
逆 fairplayd 混淆 ≠ 自动生成 Session,更 ≠ 自动生成 Qualify。

一句话回答你的问题
「看看这个是不是可以逆向 X-MMe-Nas-Qualify 的设备?」

帮助理解 FairPlay 很难静态逆 ✅
帮助你们这种已经用 Frida + harvest 的路线 → 基本 不需要 先啃完 fairplayd MBA
帮助「软件换设备、无限 Nas-Qualify」 ❌ 不能;瓶颈在 SEP/ECID,不在混淆
若硬要做静态:该逆的是 iOS absd / AuthKit 签名链,不是 macOS 媒体 fairplayd;且逆完仍是 真机签或贴样本,不是 param 表换 ECID
和你们现有结论一致:逆向 NQ 构造已够用了;换设备 = 换物理机,不是把 FairPlay 混淆层啃穿。
8小时前
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
666
4小时前
0
雪    币: 104
活跃值: (8767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
tql
4小时前
0
雪    币: 501
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
2小时前
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
关键在密钥落在哪,只有两种可能,两种都封死纯算
情况 A:密钥在 SEP(熔丝私钥) 内核 kext 只是个"信使",通过 SEP mailbox 把请求转给 SEP,SEP 用熔丝密钥算完返回。密钥从设计上永不出芯片。逆 kext 只能看到"往 SEP 发了什么",看不到密钥。→ 纯算不可能。

情况 B:密钥是内核 AES 引擎的 GID/UID key(A11 硬件密钥) 这是 FairPlay 老路子。即使你越狱有内核读写:

AES 引擎只用这个 key 做加解密,从不吐出 key 本身(硬件特性,和 SEP 同理)
你必须在这台设备的 AES 引擎上跑 → 这叫 device-assisted,不叫纯算
换个设备身份?那台设备的 GID/UID 不一样,你没有 → 还是不行
无论 A 还是 B,密钥都是"只能用、不能读"的硬件密钥。这正是 FairPlay/Absinthe 的设计目的——防设备克隆,也就是 -22953 在服务端强制的东西。

还有两道独立的锁(就算拿到密钥也绕不开纯算)
OUT160 每签随机(arc4random nonce)—— 实测 6/6 全不同。所以"复现某条 NQ"数学上不可能;只能"用密钥现造新的"。
内核 anti-replay(sel=9 实测 ret=-536870209)—— 相同输入重放被拒,内核带会话状态,离线无法复制。
我的判断:别为"纯算"去逆 kernelcache
逆 kernelcache 作为算法知识有价值(能彻底画清 sel=9 → SEP 接口),但:

对"离线纯算有效 NQ"这个目标 —— 零帮助,密钥墙在硬件。
我们现在还没有 kernelcache dump,逆它要先砸内核、解 kernelcache、处理 KPP/PAC,工作量巨大,产出只是"确认了它走 SEP/AES 引擎"——而这一点 absd 导入表(零 crypto + IOKit 转发)已经基本证明了。
2小时前
0
游客
登录 | 注册 方可回帖
返回