MarkShawn2020/macos-swift-binary-research

GitHub: MarkShawn2020/macos-swift-binary-research

一个可复用的 macOS Swift 二进制逆向研究 Skill,提供版本锁定的字节级补丁流程并以 Mole 应用为完整案例。

Stars: 1 | Forks: 0

# macOS Swift Binary Research 一个可复用的 macOS Swift 二进制研究 Skill,以及 Mole 1.11.0 Build 96 许可证状态案例。 这次研究从一篇针对 Mole 1.3.0 的旧教程出发。新版已经加入官方构建完整性 校验,并把“功能是否放行”和“界面显示什么许可证状态”拆成了不同路径。最终 结果不是简单复用旧偏移,而是重新建立样本身份、追踪 Swift 状态、用六处 版本锁定修改闭合状态,并以冷启动后的 `License Active` 作为验收。 ## 仓库内容 . ├── README.md ├── docs/ │ ├── mole-1.11.0-case-study.md │ └── publishing/ ├── scripts/ │ └── patch-mole.mjs └── skills/ └── analyze-macos-swift-binaries/ ├── SKILL.md ├── agents/openai.yaml ├── references/ └── scripts/patch-app.mjs - [`analyze-macos-swift-binaries`](skills/analyze-macos-swift-binaries/SKILL.md): 从样本识别、Universal Binary 坐标换算、Swift 状态追踪,到版本锁定清单、 隔离修改、重签名和冷启动验收的完整 Skill。 - [Mole 1.11.0 案例](docs/mole-1.11.0-case-study.md):旧教程为什么失效、 `LicenseGate` 与 `LicenseStatus` 如何分工,以及从“功能可用”到 “界面 Active”的关键转折。 - [发布稿](docs/publishing/):吾爱破解技术帖与会员申请模板、公众号长文和 小红书九张卡片,可从同一份研究资产派生。 - [`patch-mole.mjs`](scripts/patch-mole.mjs):Mole 1.11.0 Build 96 专用的一键副本、验证和安装脚本。 ## 安装 Skill git clone https://github.com/MarkShawn2020/macos-swift-binary-research.git mkdir -p ~/.codex/skills ln -s "$PWD/macos-swift-binary-research/skills/analyze-macos-swift-binaries" \ ~/.codex/skills/analyze-macos-swift-binaries 调用示例: 使用 $analyze-macos-swift-binaries 检查这个 macOS Swift APP, 建立版本锁定的状态追踪和补丁验证报告。 ## 通用工作流 先读取本地 APP 身份: node skills/analyze-macos-swift-binaries/scripts/patch-app.mjs \ --inspect /path/to/Target.app 再使用经过人工研究建立的清单,生成隔离副本: node skills/analyze-macos-swift-binaries/scripts/patch-app.mjs \ --manifest /path/to/patch.manifest.json \ --source /path/to/Target.app \ --output build/Target-research.app 脚本会先断言 Bundle ID、Version、Build、架构、可执行文件大小、SHA-256 和每个修改点的原始字节。任意字段变化都会停止写入。输出经过 ad-hoc 深度 签名,并再次验证清单与签名。 验证仓库结构、脚本语法和示例清单: npm run check ## Mole 1.11.0 Build 96 案例 精确样本: - Bundle ID:`com.tw93.MoleApp` - Version / Build:`1.11.0 / 96` - 架构:`x86_64 arm64` - 原始 Universal Binary SHA-256: `cc8ad1d6431e141613951e6ad926ee08401c882393d8bdf638e635ab64437a70` ### 修改点 | arm64 VA | Universal 文件偏移 | 原字节 | 新字节 | 作用 | | --- | ---: | --- | --- | --- | | `0x10024635C` | `0xD3E35C` | `08 40 80 52` | `28 20 80 52` | 初始化 `licensed=1`、`officialVerdict=1` | | `0x100255A84` | `0xD4DA84` | `E8 17 9F 1A` | `28 00 80 52` | 状态刷新后保持 `licensed=1` | | `0x10024BE8C` | `0xD43E8C` | `41 00 80 52` | `01 00 80 52` | 刷新分支 A:`trial` → `active(Date)` | | `0x10024E7A0` | `0xD467A0` | `41 00 80 52` | `01 00 80 52` | 刷新分支 B:`trial` → `active(Date)` | | `0x10024ECD4` | `0xD46CD4` | `41 00 80 52` | `01 00 80 52` | 刷新分支 C:`trial` → `active(Date)` | | `0x10025622C` | `0xD4E22C` | `41 00 80 52` | `01 00 80 52` | 启动分支:`trial` → `active(Date)` | 前两处闭合 `LicenseGate`;后四处把 `LicenseStatus` 的试用构造路径改为 `active`。Swift 运行时元数据显示 `active` 的 payload 是 `Foundation.Date`。 ### 使用 生成隔离副本: node scripts/patch-mole.mjs 验证已有副本: node scripts/patch-mole.mjs --verify build/Mole-1.11.0-patched.app 退出 Mole 后,生成并安装,同时在 `/Applications` 保留带时间戳的备份: node scripts/patch-mole.mjs --force --install ### 已完成验收 - `codesign --verify --deep --strict` 通过 - 无 `MoleUnofficialBuildDetected` - 运行时 `LicenseGate + 0x70` 为 `01 01` - 主界面无 `Trial · Activate` 和试用购买引导 - 设置页显示 `License Active` - 扫描可以进入 `Ready to clean` - 修改后的可执行文件 SHA-256: `734c77fd936b6afb86285f26324a86e33f7008b1539d7ef3e99754c9c33ea6ac` 验收停在清理确认前,没有执行永久清理。 ## 来源与致谢 研究起点是 HackXK 发布的 [《Mole 许可证破解教程》](https://www.52pojie.cn/thread-2107848-1-1.html), 其中记录了 Mole 1.3.0 Build 5 的两处修改思路。本仓库针对 1.11.0 Build 96 重新定位,并补充官方构建校验、Swift enum 元数据、异步刷新路径、可见状态验收 和通用清单工具。 ## License [MIT](LICENSE)
标签:MITM代理, Swift, 二进制分析, 云安全运维, 云资产清单, 数字取证, 自动化脚本, 自定义脚本, 软件破解, 逆向工程, 防御加固