Cinder27 — iOS 17.0-27.1 vulnerability verification lab: 51 modules, 31 per-CVE POC folders, 11 no-CVE module folders, harness app source

This commit is contained in:
jbjf6666 committed 2026-10-29 02:11:12 +08:00
commit 1ea76ab005
89 files changed
+16485

No files matched your search

+657
View File
@@ -0,0 +1,657 @@
import Foundation
/// Runtime-output translation.
///
/// Chinese literals in engine and UI code are the source of truth and stay where they are.
/// This table maps each one to its English rendering. In Chinese the input passes through
/// untouched; in English an unmapped string also passes through, so an ASCII name such as
/// "Documents" needs no entry.
///
/// Keys are the exact literal text, including any leading/trailing spaces that were part
/// of the original string.
func tl(_ zh: String) -> String {
guard Lang.resolved == .en else { return zh }
return RuntimeText.map[zh] ?? zh
}
enum RuntimeText {
// Filled by the localization pass. Every key is a Chinese literal that appears in the
// source; every value is its English rendering.
static let map: [String: String] = [
"\n\n种子 ": "\n\nseed ",
"\n(达到资源预算,提前收敛 —— 这是刻意的,不是失败)": "\\n(resource budget reached, converged early — deliberate, not a failure)",
"\n内核未返回任何错误码": "\nkernel returned no error codes",
"\n属性: ": "\nattributes: ",
"\n状态: ": "\nstatus: ",
"\n若 27.0 未钳制,这些 0x41 来自越界读到的堆内容;27.2 会直接丢弃越界标记。": "\\nIf 27.0 does not clamp, these 0x41 bytes come from the out-of-bounds heap read; 27.2 discards the out-of-range marker outright.",
"\n负载 ": "\npayload ",
"\n通知注册被拒 ": "\nnotification registration refused ",
" 直接读 errno=": " direct read errno=",
" 落在当前容器内: ": " inside current container: ",
" 候选: ": " candidates: ",
" 分区 ": " partition ",
" 命中: ": " hits: ",
" 未读到内容 — ": " nothing read — ",
" 直接读 errno=": " direct read errno=",
" 直接读也成功 ": " direct read also succeeded ",
" B · 4 个条目 · 名字域 36 单元 / 72 字节": " B · 4 entries · name field 36 units / 72 bytes",
" B · 64 位=": " B · 64-bit=",
" B · 900 切片": " B · 900 slices",
" B · 解包 ": " B · unpacked ",
" B — 该平台未对该路径施加沙盒,本项不构成证据": " B — no sandbox on this path on this platform, not evidence",
" B — 该平台未施加沙盒": " B — no sandbox on this platform",
" B — 边界已被跨越": " B — boundary crossed",
" B → 产出 ": " B → output ",
" B 的 decmpfs 属性": " B decmpfs attribute",
" B(ZipWriter 产出,stored 条目)": " B (ZipWriter output, stored entries)",
" B,block-id 1 × 6(容量 4)": " B, block-id 1 × 6 (capacity 4)",
" B,单个 charstring 连续推入 300 个操作数后 endchar。\n": " B, one charstring pushing 300 consecutive operands then endchar.\\n",
" B,可用 ": " B available ",
" ms,对象数 ": " ms, objects ",
" ms;中心像素 RGBA = ": " ms; centre pixel RGBA = ",
" · 加密=": " · encrypted=",
" · 受阻 ": " · blocked ",
" · 尺寸 ": " · size ",
" · 层 ID 0x3F": " · layer id 0x3F",
" · 帧数 ": " · frames ",
" · 库 ": " · lib ",
" · 无沙盒 ": " · no sandbox ",
" · 真实写探针=": " · real write probe=",
" ← 两者不一致,说明 access() 不可信": " ← mismatch, so access() is not trustworthy",
" 一致": " consistent",
" 一致 / ": " consistent / ",
" 不一致": " inconsistent",
" 不存在": " absent",
" 个二进制": " binaries",
" 个内核指针候选": " kernel pointer candidates",
" 个可写": " writable",
" 个可读 · ": " readable · ",
" 个字形": " glyphs",
" 个属性": " attributes",
" 个文件": " files",
" 个文件 → ": " files → ",
" 个文件逐字节一致": " files byte-identical",
" 个文件,共 ": " files, ",
" 个条目": " entries",
" 个条目 · mode ": " entries · mode ",
" 个目录读写正常": " directories read/write ok",
" 个长度存活": " lengths survived",
" 个(mode ": " (mode ",
" 仍不可用: ": " still unusable: ",
" 可开 · ": " openable · ",
" 命中: ": " hits: ",
" 处": " sites",
" 处 @ ": " sites @ ",
" 处 · 偏移一致=": " sites · offsets match=",
" 处 · 旧模式残留 ": " sites · old mode residue ",
" 处 → 新模式 ": " sites → new mode ",
" 处: ": " sites: ",
" 处并已保存(备份 ": " sites and saved (backup ",
" 处(应为 0)": " sites (expected 0)",
" 字节": " bytes",
" 字节 0x41": " bytes 0x41",
" 存在且": " present and ",
" 存在但被拒 · ": " present but refused · ",
" 存活 — ": " survived — ",
" 已用 / 预算 ": " used / budget ",
" 张表": " tables",
" 是文件而不是目录 —— 跳过": " is a file, not a directory — skipped",
" 条": " items",
" 条 · type=": " items · type=",
" 条目": " entries",
" 条目 / ": " entries / ",
" 条目 · ": " entries · ",
" 核": " cores",
" 次 —— 该平台不允许对自身端口注册通知,": " times — this platform does not allow notification registration on own ports, ",
" 次操作,无异常返回": " operations, no abnormal returns",
" 次端口分配与回收,": " port allocations and releases, ",
" 段标记填充字节": " segment marker padding bytes",
" 目录读写正常": " directory read/write ok",
" 类错误码": " error classes",
" 行": " rows",
" 被拒绝 — ": " refused — ",
" 解析出 ": " parsed ",
" 连续 ": " consecutive ",
" 页": " pages",
" 项": " entries",
" 项 · ": " entries · ",
" 项 · 每项 ": " entries · each ",
" 项(含 ../ 路径)→ 遏制必须由调用方负责": " entries (with ../ paths) → containment is the caller's job",
"\")": "\")",
") · 原始大小 ": ") · raw size ",
"),经链接读到 ": "), via link read ",
"-12203 = 存在但被拒": "-12203 = present but refused",
"-17913 = 不存在": "-17913 = absent",
"0x 前缀写法: ": "0x prefix form: ",
"1. 不存在的深层目录自动创建: ": "1. missing deep directory auto-created: ",
"2. Container.write 自动建父目录: 通过(读回 \"": "2. Container.write auto-creates parents: passed (read back \"",
"2. Container.write: 失败 ": "2. Container.write: failed ",
"2000 层嵌套": "2000 nesting levels",
"27.0 扫描边界 0x48 = 72 B": "27.0 scan bound 0x48 = 72 B",
"27.0 期望:push 路径无计数检查,操作数栈越界。\n": "27.0 expectation: the push path has no count check, the operand stack overruns.\\n",
"27.0 期望:分配截断 → 转换循环越界写。27.2 期望:_TIFFCheckMalloc_type 拒绝。": "27.0 expectation: allocation truncation → the conversion loop writes out of bounds. 27.2 expectation: _TIFFCheckMalloc_type refuses.",
"27.0 期望:切片上限未检查 → 插件内越界。27.2 期望:\"too many slices!\"。": "27.0 expectation: the slice cap is unchecked → overrun inside the plugin. 27.2 expectation: \"too many slices!\".",
"27.2 收紧到 0x24 = 36 B": "27.2 tightened to 0x24 = 36 B",
"27.2 期望:Push/Pop 两道栈保护在解释前拒绝该字体。\n": "27.2 expectation: Push/Pop stack guards reject the font before interpretation.\\n",
"3 次解码指纹": "3-decode fingerprint",
"3. 旧 UUID 路径重挂: ": "3. old UUID path remount: ",
"32 轮完成,进程存活": "32 rounds complete, process alive",
"4. isWritableFile(容器根)=": "4. isWritableFile(container root)=",
"64 × 4 KB 随机内容": "64 × 4 KB random content",
": 不可见": ": not visible",
": 解码失败": ": decode failed",
": 读取被拒绝(沙盒)": ": read refused (sandbox)",
"ANE 用户态入口探测": "ANE user-space entry probe",
"AVC 参数集路径已触发": "AVC parameter set path triggered",
"AVD.videodecoder 插件": "AVD.videodecoder plugin",
"AVD.videodecoder 插件(非 kext)": "AVD.videodecoder plugin (not a kext)",
"Apple 未将其视为安全问题,无 CVE": "Apple does not treat it as a security issue, no CVE",
"CGBitmapContext 创建失败": "CGBitmapContext create failed",
"CGDataProvider 创建失败": "CGDataProvider create failed",
"CGFont 拒绝该字体数据": "CGFont refused the font data",
"CGImageDestination 创建失败": "CGImageDestination create failed",
"CGImageSource 拒绝该数据": "CGImageSource refused the data",
"CGPDFDocument 解析失败(文件被拒绝)": "CGPDFDocument parse failed (file refused)",
"CHHapticEngine 初始化失败: ": "CHHapticEngine init failed: ",
"CHHapticEngine 启动成功": "CHHapticEngine started",
"CHHapticEngine 启动成功(沉浸式音频会话已建立)": "CHHapticEngine started (immersive audio session established)",
"CHHapticEngine 未尝试": "CHHapticEngine not attempted",
"CMGetDMVersionLevelFromRPU 未导出": "CMGetDMVersionLevelFromRPU not exported",
"CTFontGetLigatureCaretPositions 返回 ": "CTFontGetLigatureCaretPositions returned ",
"CoreMedia 符号不可用": "CoreMedia symbols unavailable",
"CoreMedia 符号解析失败,或 XPC 连接无法创建": "CoreMedia symbol resolution failed, or the XPC connection cannot be created",
"DRC 路径探测完成": "DRC path probe complete",
"EACCES 沙盒拒绝访问": "EACCES sandbox access refusal",
"EDQUOT 超出配额": "EDQUOT over quota",
"EEXIST 已存在": "EEXIST already exists",
"EISDIR 目标是目录": "EISDIR target is a directory",
"ENAMETOOLONG 名称过长": "ENAMETOOLONG name too long",
"ENOENT 父目录或文件不存在": "ENOENT parent or file absent",
"ENOSPC 空间不足": "ENOSPC no space",
"ENOTDIR 路径中间是文件": "ENOTDIR path component is a file",
"EPERM — 沙盒拒绝": "EPERM — sandbox refusal",
"EPERM 操作被拒绝": "EPERM operation refused",
"EROFS 只读文件系统": "EROFS read-only filesystem",
"EXDEV 跨卷(.atomic 写到了别的卷)": "EXDEV cross-volume (.atomic landed on another volume)",
"FigXPCCreateBasicMessage('Curl') 失败": "FigXPCCreateBasicMessage('Curl') failed",
"FontParser · charstring 解释器": "FontParser · charstring interpreter",
"GPS 读取存活": "GPS read survived",
"GPT 头: 条目表 LBA ": "GPT header: entry array LBA ",
"GPT 镜像已构造并解析": "GPT image built and parsed",
"HEVC 参数集 = ": "HEVC parameter set = ",
"HEVC 层路径已触发": "HEVC layer path triggered",
"HID 路径可达性": "HID path reachability",
"IOHIDFamily · caps 表查找": "IOHIDFamily · caps table lookup",
"IOKit 事件入口探测": "IOKit event entry probe",
"IOPSCopyPowerSourcesInfo 不可用": "IOPSCopyPowerSourcesInfo unavailable",
"IPA 产出": "IPA output",
"IPA 手术链路可用": "IPA surgery pipeline available",
"ImageIO · 图像解析": "ImageIO · image parsing",
"ImageIO · 纹理与编码": "ImageIO · textures and codecs",
"Info.plist 读取失败,跳过字段改写": "Info.plist read failed, skipping field rewrite",
"LigCaret 查询完成": "LigCaret query complete",
"MDLAsset 载入完成 ": "MDLAsset load complete ",
"OOB 写": "OOB write",
"OOB 读": "OOB read",
"PDF 无第 ": "PDF has no page ",
"PDF 解码路径已触发": "PDF decode path triggered",
"Payload/ 下没有 .app": "no .app under Payload/",
"RockRidge CL/PL 环:27.0 与 27.2 都未修(上游已修,Apple 未取)": "RockRidge CL/PL cycle: unfixed in both 27.0 and 27.2 (fixed upstream, Apple did not take it)",
"RockRidge 路径已遍历": "RockRidge path traversed",
"SBHomeScreenService 在进程内: ": "SBHomeScreenService in-process: ",
"SQLite3 不可用": "SQLite3 unavailable",
"SpringBoard 路径探测": "SpringBoard path probe",
"Type-5 阴影的写入是值可控的,但短溢出会被相邻 VLA 吸收。逐级抬升 R,确定该构建上栈布局开始失效的维度。": "The Type-5 shading write is value-controlled, but a short overflow is absorbed by the adjacent VLA. Step R upward to find the dimension at which this build's stack layout starts to break.",
"UDID (设备)": "UDID (device)",
"XNU · ipc_port.c 请求表消费方": "XNU · ipc_port.c request-table consumers",
"XNU 内核": "XNU kernel",
"archive_read_new 失败": "archive_read_new failed",
"audioCustom 事件已投递": "audioCustom event delivered",
"caret 坐标: ": "caret positions: ",
"charstring 推 300 个操作数": "charstring pushes 300 operands",
"codespace 长度 128": "codespace length 128",
"com.apple.decmpfs 是内核压缩文件系统用的属性。改它等于直接改内核解压的输入 —— CVE-2026-113910 就是这条路径上「解压产出少于预期」时内核把未写满的页缓冲交给用户态。这里可以手动设一个、读回来、再删掉。": "com.apple.decmpfs is the attribute the kernel's compressed filesystem uses. Changing it changes the input the kernel decompresses — CVE-2026-113910 is exactly this path: when decompression under-produces, the kernel hands the unwritten page buffer back to user space. Here you can set one by hand, read it back, then delete it.",
"consume 后读取失败: ": "read after consume failed: ",
"decmpfs 操作": "decmpfs operations",
"dlopen 失败": "dlopen failed",
"entitlements: 无法读取(SecTask 不可用或为空)": "entitlements: unreadable (SecTask unavailable or empty)",
"fcTL 声明 26B 实到 4B": "fcTL declares 26B, 4B present",
"getifaddrs 失败": "getifaddrs failed",
"hosts 表": "hosts table",
"iOS 27.2 起修复": "fixed since iOS 27.2",
"issue_file 被拒: ": "issue_file refused: ",
"libarchive 不可用": "libarchive unavailable",
"libarchive 的 2 字节堆越界与 CoreMedia 的 28 字节结构体外写,是整套中仅有的两个「写穿过对象边界」的形状。前者精确但浅,后者深且落在保存寄存器区。同一 CVE 下的 CAB 站点与 GPT 分区名越界读一并标定。": "libarchive's 2-byte heap overrun and CoreMedia's 28-byte write past the struct are the only two \"write across an object boundary\" shapes in the whole set. The former is precise but shallow; the latter is deep and lands in the saved-register area. The CAB site under the same CVE and the GPT partition-name OOB read are calibrated alongside.",
"libarchive 解包 ": "libarchive unpacked ",
"libarchive 返回 ": "libarchive returned ",
"libarchive.2.dylib 无法 dlopen(沙盒或路径受限)": "libarchive.2.dylib cannot dlopen (sandbox or path restricted)",
"magic cmpf · 类型 ": "magic cmpf · type ",
"mediaplaybackd.bytestream.xpc 对任何沙盒应用可达。守护进程以自身凭据打开客户端指定的绝对路径,并把活描述符放进回复的 ByteStreamDetails。描述符级 I/O 不受客户端沙盒的路径检查约束 —— 应用自身 open() 返回 EPERM 的文件,其内容可经该描述符完整读回。": "mediaplaybackd.bytestream.xpc is reachable from any sandboxed app. The daemon opens the client-specified absolute path with its own credentials and puts a live descriptor into the reply's ByteStreamDetails. Descriptor-level I/O is not subject to the client sandbox's path checks — a file whose open() returns EPERM for the app itself can be read back in full through that descriptor.",
"mkdir 失败: ": "mkdir failed: ",
"networkd 偏好": "networkd prefs",
"opcode 已被封 (-16158)": "opcode sealed (-16158)",
"plist 语法错误,未写入": "plist syntax error, not written",
"registerAudioResource 失败: ": "registerAudioResource failed: ",
"sandbox_extension 符号不可用": "sandbox_extension symbols unavailable",
"sandbox_extension_issue_file / consume 无法解析": "sandbox_extension_issue_file / consume cannot be resolved",
"sandbox_extension_issue_file 在签发时解析符号链接,但不强制 SANDBOX_EXTENSION_NOFOLLOW。签发返回的令牌绑定签发时刻解析出的目标,而内核对消费时刻所用路径不做复核。序列为:沙盒内建立链接 L 指向沙盒内文件 S → 对 L 签发扩展 → 将 L 重指向沙盒外目标 T → 消费令牌后经 L 读取。": "sandbox_extension_issue_file resolves the symlink at issue time but does not enforce SANDBOX_EXTENSION_NOFOLLOW. The token it returns is bound to the target resolved at issue time, and the kernel never re-verifies the path used at consume time. The sequence: create link L in the sandbox pointing at in-sandbox file S → issue the extension for L (the kernel records S) → repoint L at out-of-sandbox target T → consume the token and read through L.",
"setxattr 失败 errno=": "setxattr failed errno=",
"symlink(decoy) 失败: ": "symlink(decoy) failed: ",
"symlink(target) 失败: ": "symlink(target) failed: ",
"— 判定 —": "— verdict —",
"— 基线 —": "— baseline —",
"— 失效模式验证 —": "— failure mode verification —",
"— 存在性预言机 —": "— existence oracle —",
"— 对照 —": "— control —",
"— 平台限制 —": "— platform limit —",
"— 目录枚举 —": "— directory listing —",
"— 读取 —": "— read —",
"✓ AudioCodecs 可加载": "✓ AudioCodecs loadable",
"✓ 书签 ": "✓ bookmarked ",
"✓ 已创建 ": "✓ created ",
"✓ 已加入书签": "✓ bookmarked",
"✗ AudioCodecs 无法 dlopen": "✗ AudioCodecs cannot dlopen",
"上下文创建失败": "context create failed",
"不可用": "unavailable",
"不可见": "not visible",
"不可读": "unreadable",
"不存在": "absent",
"不存在 ": "absent ",
"不存在 (-17913)": "absent (-17913)",
"不存在(未修复)": "absent (unfixed)",
"不是 Mach-O": "not a Mach-O",
"不是 decmpfs(magic 0x": "not decmpfs (magic 0x",
"两者均失败:直接读 errno ": "both failed: direct errno ",
"两者都需要稳定的堆布局控制,而这正是上一阶段泄露所提供的。": "Both need stable heap-layout control, which is exactly what the previous stage's leaks provide.",
"个原语": " primitives",
"主二进制读取失败(可能已加密)": "main binary read failed (possibly encrypted)",
"主密码文件(通常不可读)": "master password file (usually unreadable)",
"主机名": "hostname",
"事件投递失败: ": "event delivery failed: ",
"二进制": "binary",
"产出": "output",
"产出 ": "output ",
"会话建立失败": "session setup failed",
"低电量模式": "low power mode",
"信息泄露": "info leak",
"值偏移 +65536": "value offset +65536",
"值可控写": "value-controlled write",
"值可控写与地址泄露相加,构成构造可控状态的全部要素;所缺的是将写转为执行的环节。": "Value-controlled write plus address disclosure is every element needed to build controlled state; what is missing is the step that turns the write into execution.",
"元数据读取完成": "metadata read complete",
"充电中": "charging",
"先取得地址与内容。decmpfs 欠产出将内核页缓冲尾部交回用户态;TIFF 截断条带与 EXIF 短读将进程堆残留交回图像与元数据;CoreMedia bytestream 与 sandbox_extension 越过沙盒边界取回文件内容。": "Addresses and content come first. decmpfs under-production hands the kernel page-buffer tail back to user space; the truncated TIFF strip and the EXIF short read hand process-heap residue back as image and metadata; the CoreMedia bytestream and sandbox_extension cross the sandbox boundary and retrieve file contents.",
"全局偏好": "global prefs",
"全局偏好(/private 前缀)": "global prefs (/private prefix)",
"全部 ": "all ",
"全部读取": "read all",
"关": "off",
"内容": "content",
"内容 (": "content (",
"内核": "kernel",
"内核面": "kernel surface",
"写入失败: ": "write failed: ",
"写入探测属性": "write probe attribute",
"写入被拒 (-12878)": "write refused (-12878)",
"分配/拆除路径可用,通知武装被平台拒绝": "allocate/teardown path available, notification arming refused by the platform",
"分配路径已触发": "allocation path triggered",
"创建 ": "created ",
"判定依据:直接读被拒 且 经链接读成功": "verdict basis: direct read refused AND read via link succeeded",
"十六进制": "hex",
"十六进制查找: ": "hex search: ",
"协议表": "protocol table",
"压缩类型 3 = LZX": "compression type 3 = LZX",
"发现 ": "found ",
"取自本进程的 Mach-O:": "Mach-O taken from this process: ",
"只支持 64 位 Mach-O": "only 64-bit Mach-O supported",
"只读": "read-only",
"只读(探针未通过)": "read-only (probe failed)",
"可写": "writable",
"可写根目录: ": "writable roots: ",
"可开": "openable",
"可开 ": "openable ",
"可开(code 0)": "openable (code 0)",
"可用空间: ": "free space: ",
"可见": "visible",
"可读": "readable",
"可读域: ": "readable domain: ",
"可达性探测": "reachability probe",
"合计 ": "total ",
"名称 → ": "name → ",
"否": "no",
"否(需 IOKit 平台 Expert 接口)": "no (needs the IOKit platform expert interface)",
"启动 UUID": "boot UUID",
"启动时间": "boot time",
"命中 ": "hit ",
"回复类型 ": "reply type ",
"回复类型: ": "reply type: ",
"回复里没有 fd": "no fd in reply",
"因此握手收不到任何回复。真机上该服务常驻,握手应返回字典。": "So the handshake gets no reply. On a real device the service is resident and the handshake should return a dictionary.",
"因此该原语在此平台上无法给出证据。真机上直接读应返回 EPERM,": "So the primitive cannot produce evidence on this platform. On a real device the direct read should return EPERM,",
"在取得稳定泄露之后,才有条件讨论将溢出写成什么值;否则只能触发崩溃。": "Only after a stable leak is there any basis for choosing what the overflow writes; before that, it can only crash.",
"在标定所得长度上,以 PDF 中选定的 double 位模式决定被覆盖的指针。崩溃地址即证据 —— 它证明写入内容由攻击者控制,而非仅证明发生了崩溃。": "At the calibrated length, the double bit pattern chosen in the PDF decides the pointer that gets overwritten. The fault address is the evidence — it proves the written content is attacker-controlled, not merely that a crash happened.",
"坐标即追链读到的 16 位值": "the positions are the 16-bit values the chain read",
"基线已采集": "baseline captured",
"声明长度 65518": "declared length 65518",
"处理中…": "working…",
"备份": "backups",
"备份往返 ": "backup round-trip ",
"外设": "peripheral",
"大小": "size",
"失败": "failed",
"失败 —— ../ 逃出了目标目录": "failed — ../ escaped the destination",
"失败: ": "failed: ",
"头部空隙不足:需要 ": "header gap insufficient: need ",
"字体 / Model I/O": "fonts / Model I/O",
"字体加载成功 name=": "font loaded name=",
"字体在 CGFont 层被拒绝": "font refused at the CGFont layer",
"字体在解析阶段被拒绝": "font refused at parse stage",
"字体安装": "font install",
"字体已加载并绘制": "font loaded and drawn",
"字符串替换 ": "string replace ",
"字符串替换 Cinder27 → Cind3r27:": "string replace Cinder27 → Cind3r27: ",
"字符串替换失败:": "string replace failed: ",
"存在": "present",
"存在·被拒 ": "present·refused ",
"存在但被拒 (-12203)": "present but refused (-12203)",
"存在性预言机": "existence oracle",
"存在(已修复)": "present (fixed)",
"存活: ": "survived: ",
"守护进程以自身凭据打开客户端指定的路径": "the daemon opens the client-specified path with its own credentials",
"完成": "done",
"容器占用: ": "container usage: ",
"容器已处于正常状态,无需修复": "container already healthy, no repair needed",
"容器根": "container root",
"容器根: ": "container root: ",
"对照 直接读 ": "control direct read ",
"对照: 应用自身 open() 被 EPERM 拒绝": "control: the app's own open() refused with EPERM",
"对自身端口注册通知返回 -300 (KERN_INVALID_CAPABILITY)。": "notification registration on own ports returns -300 (KERN_INVALID_CAPABILITY).",
"将上述产物转为可用形式:IPA 改包、二进制注入、字节级替换、属性改写、数据库读取。本层不依赖任何漏洞,但它是「漏洞能力」最终交付到手上的形态。": "Turn those artifacts into usable form: IPA repacking, binary injection, byte-level replacement, attribute rewriting, database reads. This layer depends on no vulnerability, but it is the shape in which \"vulnerability capability\" is finally delivered into the hand.",
"尺寸 ": "size ",
"届时「直接读被拒 + 经链接读成功」即为越界成立的判定。": "At that point \"direct read refused + read via link succeeded\" is the verdict that the boundary was crossed.",
"工作区": "Workspace",
"工具会解包、改 Info.plist、往主二进制里插 LC_LOAD_DYLIB、做字节级字符串替换、去掉 LC_CODE_SIGNATURE,然后重新打成 zip。产出仍然是未签名的 —— 你用同一套证书签它。": "The tool unpacks, edits Info.plist, inserts LC_LOAD_DYLIB into the main binary, does byte-level string replacement, removes LC_CODE_SIGNATURE, then repacks into a zip. The output is still unsigned — you sign it with the same certificate.",
"工具链自检": "toolchain self-test",
"工具链落地": "toolchain landed",
"已写入 ": "written ",
"已创建但探针失败: ": "created but probe failed: ",
"已取回": "retrieved",
"已注册到用户字体域:": "registered into user font domain: ",
"已移除": "removed",
"已选择 ": "selected ",
"市场名称": "marketing name",
"帧数 ": "frames ",
"广告标识符": "advertising identifier",
"序列号可读": "serial readable",
"序列开始: ": "sequence start: ",
"序列结束: ": "sequence end: ",
"应用与系统进程": "apps and system processes",
"开": "on",
"引擎启动失败: ": "engine start failed: ",
"引擎已停止": "engine stopped",
"归档 ": "archive ",
"当前为模拟器:模拟器不对应用施加沙盒,直接读与经链接读都会成功,": "This is the simulator: it applies no sandbox to apps, so both the direct read and the read via the link succeed,",
"当前为模拟器:模拟器内不运行 mediaplaybackd,该 Mach 服务无人监听,": "This is the simulator: mediaplaybackd does not run inside it, no one listens on that Mach service,",
"成功": "ok",
"所有标准目录已存在": "all standard directories exist",
"手术失败:": "surgery failed: ",
"手术完成:": "surgery complete: ",
"手术未完成": "surgery incomplete",
"打开失败": "open failed",
"执行": "run",
"扩展属性": "extended attributes",
"扫描完成": "scan complete",
"找不到主二进制名": "main binary name not found",
"把字体文件注册进本进程的字体域。iOS 允许应用注册用户字体,注册后 CoreText 立刻可见 —— 这是改机里唯一一条完全不需要任何越权就能改「系统观感」的路径,代价是只在本进程生效。": "Register font files into this process's font domain. iOS lets apps register user fonts, visible to CoreText immediately — the one device-modification path that needs no privilege at all to change the \"system look\"; the price is that it only takes effect in this process.",
"把容器内的偏好、文稿与工具产物打成 ZIP。归档走同一写入器,可被 libarchive 解回。": "Packs the container's preferences, documents and tool output into a ZIP. The archive goes through the same writer and reads back with libarchive.",
"持有授权": "entitlement held",
"探测": "probe",
"探针 = 建文件 → 写 → fsync → 读回 → 比对 → 删除": "probe = create file → write → fsync → read back → compare → delete",
"接受 · 尺寸 ": "accepted · size ",
"握手建立: ": "handshake established: ",
"握手未完成": "handshake incomplete",
"握手被拒绝": "handshake refused",
"搜索串为空": "search string empty",
"搜索字符串": "search string",
"操作数 300 > 栈容量 48": "300 operands > stack capacity 48",
"数据库": "database",
"数据过短": "data too short",
"整数溢出": "integer overflow",
"文本查找 Cinder27: ": "text search Cinder27: ",
"文本,或 41 42 43 / 0x414243": "text, or 41 42 43 / 0x414243",
"新名字": "new name",
"无": "none",
"无 GPT 签名": "no GPT signature",
"无可用属性": "no attributes available",
"无外部地址": "no external address",
"无授权 — 只能走无线链路": "no entitlement — radio link only",
"无数据": "no data",
"无条目(解码器在块层就停了)": "no entries (decoder stopped at the block layer)",
"无法 dlopen CoreMedia 或解析 FigXPC 入口": "cannot dlopen CoreMedia or resolve the FigXPC entry points",
"无法创建 ": "cannot create ",
"无法建立会话": "cannot establish session",
"无法读取自身二进制": "cannot read own binary",
"无线链路": "radio link",
"无错误": "no error",
"无需竞态窗口": "no race window needed",
"无(符号被 strip 或不可见)": "none (symbol stripped or invisible)",
"日历附件遏制路径探测": "Calendar attachment containment probe",
"是": "yes",
"显示名称": "display name",
"更多": "more",
"替换 ": "replaced ",
"替换: ": "replace: ",
"替换串不能比原串长 —— 这是原地改写,不改文件布局,所以不会破坏任何偏移。注入 LC_LOAD_DYLIB 需要头部有空隙,没有就会明确报出来。": "The replacement cannot be longer than the original — this is an in-place rewrite that keeps the file layout, so no offset is disturbed. Injecting LC_LOAD_DYLIB needs a header gap; if there is none it is reported explicitly.",
"替换串不能比原串长(": "replacement cannot exceed original (",
"替换为": "replace with",
"替换失败: ": "replace failed: ",
"替换并保存": "replace and save",
"替换(可选,不能更长)": "replace (optional, not longer)",
"最低系统": "minimum OS",
"有效(../ 未逃出)": "effective (../ did not escape)",
"有断言不成立": "assertion failed",
"有断言失败": "assertion failed",
"服务无人监听 —— 该构建可能已移除或重命名该 Mach 服务。": "no service listener — this build may have removed or renamed the Mach service.",
"服务无人监听(本平台不适用)": "no listener for the service (not applicable here)",
"服务有回复但握手被拒绝。": "service replied but the handshake was refused.",
"服务有回复但非字典 —— 握手被拒绝。": "service replied but not with a dictionary — handshake refused.",
"服务表": "service table",
"未修复": "unfixed",
"未发现内核指针": "no kernel pointers found",
"未取到数据": "no data retrieved",
"未命中": "miss",
"未命中,未写入": "miss, not written",
"未在产出里找到源标记的填充区": "no marker padding found in the output",
"未知": "unknown",
"未读到内容": "no content read",
"未返回数据(沙盒或接口不可用)": "no data returned (sandbox or interface unavailable)",
"本容器内 IconState: ": "IconState in this container: ",
"本模块仍完成了 ": "this module still completed ",
"本次新建: ": "created now: ",
"本进程": "this process",
"机型": "model",
"权限受限": "entitlement-gated",
"权限面已采集": "privilege surface captured",
"权限面测绘": "privilege surface mapping",
"条目 ": "entries ",
"构建号": "build",
"构造 ": "built ",
"枚举目录": "enumerate",
"查找": "find",
"查找 / 替换": "find / replace",
"查找替换全部断言通过": "all find/replace assertions passed",
"查询(只读)": "query (read-only)",
"校验方法不存在(27.0 未修复)": "validator absent (unfixed in 27.0)",
"校验方法存在(27.2 已修复)": "validator present (fixed in 27.2)",
"植入 ": "planted ",
"沉浸式音频入口探测完成": "immersive audio entry probe complete",
"沙盒 / 签名 / entitlements": "sandbox / signing / entitlements",
"注入 LC_LOAD_DYLIB → ": "inject LC_LOAD_DYLIB → ",
"注入 LC_LOAD_DYLIB:ncmds ": "inject LC_LOAD_DYLIB: ncmds ",
"注入 dylib 路径": "dylib path to inject",
"注入失败: ": "inject failed: ",
"注入未成功(头部无空隙):": "injection failed (no header gap): ",
"注册失败(无错误信息)": "registration failed (no error)",
"注册失败:": "registration failed: ",
"活跃": "active",
"消费 ": "consume ",
"清理残留探针 ": "cleaning leftover probes ",
"温度": "temperature",
"渲染存活 — 该构建未受影响": "render survived — this build unaffected",
"渲染存活(与源分析的负结果一致)": "render survived (matches the source-analysis negative)",
"源 ": "source ",
"源 IPA": "source IPA",
"源 JPEG ": "source JPEG ",
"源解码失败": "source decode failed",
"源解码失败(标记先被拒绝了)": "source decode failed (marker refused first)",
"溢出阈值标定": "overflow threshold calibration",
"热状态": "thermal state",
"版本": "version",
"物理内存": "physical memory",
"生成改机 IPA": "build modified IPA",
"生效用户设置": "effective user settings",
"用户态可触及的内核入口数量有限。ipc_port 请求表索引竞态无 entitlement 门槛;decmpfs 已在泄露层验证。本层度量的是「能否将用户态的错误转为内核侧的状态变化」。": "The kernel entries reachable from user space are few. The ipc_port request-table index race has no entitlement gate; decmpfs is already verified in the leak layer. This layer measures whether a user-space error can be turned into kernel-side state change.",
"电源": "power",
"电量": "battery",
"目标": "target",
"目标 ": "target ",
"目标 ": "target ",
"目标创建失败": "target create failed",
"目标文件": "target file",
"直接 open 成功(意外)": "direct open succeeded (unexpected)",
"直接 open 被拒 errno=": "direct open refused errno=",
"直接读也成功 ": "direct read also succeeded ",
"直接读被拒 (errno ": "direct read refused (errno ",
"真实但被拒的路径返回 -12203,不存在的路径返回 -17913。两个不同的服务端错误码在不授予访问的前提下披露文件是否存在。": "A real but refused path returns -12203, a nonexistent one -17913. Two distinct server-side error codes disclose whether a file exists without granting any access.",
"码 ": "bytes ",
"硬件型号": "hardware model",
"确定该构建上的实际起点:进程持有哪些 entitlement、沙盒放行到哪一层、mach 命名空间如何组织。后续每一步的收益都要以该基线折算。": "Establish the real starting point on this build: which entitlements the process holds, how far the sandbox lets it through, how the mach namespace is organised. Every later stage's yield is measured against this baseline.",
"种子 ": "seed ",
"种子缺失": "seed missing",
"种子缺失 deep_nest.usda": "seed missing deep_nest.usda",
"种子缺失 joliet_path_oob.iso": "seed missing joliet_path_oob.iso",
"种子缺失 ktx2_bad_dims.ktx2": "seed missing ktx2_bad_dims.ktx2",
"种子缺失 stack_bomb.cff": "seed missing stack_bomb.cff",
"移除": "removed",
"移除 LC_CODE_SIGNATURE": "remove LC_CODE_SIGNATURE",
"移除 LC_CODE_SIGNATURE ×": "remove LC_CODE_SIGNATURE ×",
"移除 LC_CODE_SIGNATURE:": "remove LC_CODE_SIGNATURE: ",
"移除失败: ": "remove failed: ",
"移除损坏的 journal": "removing corrupt journal",
"空闲": "idle",
"竞态完成 ": "race done ",
"竞态完成,内核返回 ": "race done, kernel returned ",
"符号不可用": "symbol unavailable",
"符号解析失败": "symbol resolution failed",
"签发 ": "issue ",
"签发时解析链接目标,消费时不复核路径": "resolves the link target at issue time and never re-verifies the path at consume time",
"类型混淆": "type confusion",
"系统可用字体(": "system fonts (",
"系统组数据库": "system group database",
"系统账户数据库": "system account database",
"系统账户数据库(/private 前缀)": "system account database (/private prefix)",
"系统进程": "system process",
"累计路径 1024 B": "cumulative path 1024 B",
"结果": "result",
"缺失": "missing",
"缺少该基线,无法区分「漏洞所得」与「签名所授」。": "Without that baseline there is no separating what a vulnerability earned from what the signature granted.",
"网络": "network",
"耗时异常 —— 递归路径可能没有终止条件": "abnormal duration — the recursive path may have no terminator",
"联动": "chain",
"自己写 ZIP → libarchive 读回": "own ZIP writer → libarchive read-back",
"自检全绿意味着工具链本身可信 —— 此后出现的问题是选择问题,不是工具问题。": "All-green self-tests mean the toolchain itself is trustworthy — any problem after that is a targeting problem, not a tooling problem.",
"自造 IPA:": "self-built IPA: ",
"表: ": "table: ",
"被拒绝本身即说明校验发生在解释器之前 —— 这是该构建上有效的观测。": "The refusal itself proves the validation happens before the interpreter — a valid observation on this build.",
"视频编解码": "video codecs",
"解包": "unpack",
"解包 ": "unpacked ",
"解包失败:": "unpack failed: ",
"解析 ": "parsed ",
"解析器面": "parser surface",
"解析存活(已解码=": "parse survived (decoded=",
"解析返回 ": "parse returned ",
"解码 ": "decoded ",
"解码器可达性探测完成": "decoder reachability probe complete",
"解码器接受参数集 · 尺寸 ": "decoder accepted the parameter set · size ",
"解码存活 ": "decode survived ",
"解码存活 · 尺寸 ": "decode survived · size ",
"解码存活 · 帧数 ": "decode survived · frames ",
"解码存活(已解码=": "decode survived (decoded=",
"解码返回错误: ": "decode returned error: ",
"触觉事件已尝试": "haptic event attempted",
"记录": "record",
"该 Mach 服务无人监听 —— 本平台不适用(模拟器内不运行 mediaplaybackd)。真机上该服务常驻。": "no one listens on that Mach service — not applicable on this platform (mediaplaybackd does not run in the simulator). On a real device the service is resident.",
"该平台不允许这条武装路径,故请求表索引竞态无法在此被驱动。": "This platform forbids that arming path, so the request-table index race cannot be driven here.",
"该平台未施加沙盒 — 无证据": "no sandbox on this platform — no evidence",
"该序列确定性成立,不需要竞态窗口。Apple 未将其视为安全问题,因此没有 CVE 编号。": "The sequence holds deterministically and needs no race window. Apple does not treat it as a security issue, so there is no CVE number.",
"该构建上未越界": "not out of bounds on this build",
"该阈值决定后续所有负载的长度预算。": "That threshold sets the length budget for every subsequent payload.",
"详情": "detail",
"请求表路径无法被武装。真机上应返回 KERN_SUCCESS。": "The request-table path cannot be armed. On a real device it should return KERN_SUCCESS.",
"读写正常": "read/write ok",
"读取 ": "read ",
"读取 ": "read ",
"读取 IPA 失败": "IPA read failed",
"读取失败": "read failed",
"读取失败 errno=": "read failed errno=",
"读取失败: ": "read failed: ",
"读回内容不一致": "read-back mismatch",
"读回失败: ": "read-back failed: ",
"资产载入存活": "asset load survived",
"越过沙盒读取": "read past sandbox",
"越过沙盒读取 ": "read past sandbox ",
"跨沙盒": "cross-sandbox",
"跨沙盒读取 ": "cross-sandbox read ",
"跨越边界 ": "crossed boundary ",
"路径": "path",
"路径不存在 (-17913)": "path absent (-17913)",
"路径中间不是目录": "path component is not a directory",
"路径存在但拒绝访问 (-12203)": "path present but access refused (-12203)",
"路径穿越遏制: ": "path traversal containment: ",
"输出不稳定 — 未初始化内存迹象": "output unstable — uninitialised-memory signature",
"输出干净": "output clean",
"输出文件里出现 ": "output file contains ",
"输出稳定": "output stable",
"过程": "process",
"运行时长": "uptime",
"返回 0 —— 偏移被钳制或链未被跟随": "returned 0 — offset clamped or chain not followed",
"返回错误: ": "returned error: ",
"进程内": "in-process",
"连接 com.apple.coremedia.mediaplaybackd.bytestream.xpc": "connecting to com.apple.coremedia.mediaplaybackd.bytestream.xpc",
"连接对象已创建: ": "connection created: ",
"选择 .sqlite / .db": "choose .sqlite / .db",
"选择一个 .ipa": "choose an .ipa",
"选择一个文件": "choose a file",
"选择字体文件": "choose a font file",
"选择文件": "choose file",
"逐字节比对: ": "byte comparison: ",
"通过": "passed",
"遍历完成,": "traversal complete, ",
"重复越界写 32 次": "repeat OOB write 32×",
"重打包 ": "repacked ",
"重编码成功=": "re-encode ok=",
"错误: ": "error: ",
"错误码 ": "error code ",
"镜像 ": "image ",
"镜像过短": "image too short",
"需要 65536 B,实际 64 B": "needs 65536 B, 64 B present",
"需达到可复现阈值;低于该阈值时,越狱路径不成立。": "A reproducible threshold is required; below it the jailbreak chain does not hold.",
"音频栈": "audio stack",
"音频资源 id=": "audio resource id=",
"页面 4000×4000 · 需要 64 MB 缓冲": "page 4000×4000 · needs a 64 MB buffer",
"页面渲染完成 ": "page rendered ",
"项": "entries",
"验证了名称空间的分配/拆除路径本身可用。": "verifies that the namespace allocate/teardown path itself works.",
"(按设计不接受新建文件,不计入探针)": " (by design accepts no new files, excluded from probes)",
")": ")",
",含 LC_LOAD_DYLIB=": ", contains LC_LOAD_DYLIB=",
",命令数 ": ", load commands ",
",尺寸 ": ", size ",
",属性 ": ", attrs ",
",已绘制 ": ", drawn ",
",已解码 ": ", decoded ",
",经链接 ": ", via link ",
",经链接亦失败": ", via link also failed",
",经链接读到内容": ", via link read content",
]
}