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", ] }