中文 | English
IOSDecryptHub 是一个注入到 iOS App 进程中的运行时分析 dylib,可捕获加解密、文件、网络、Keychain 与动态加载行为,并提供 Web 面板、脱壳与 MCP 分析能力。
本仓是完整源码仓:引擎 dylib、越狱加载器、管理器 App、updater daemon、打包脚本全部在这里,可自行编译与修改。
官网与效果演示:ios.decrypthub.com
- 拦截系统加密 API,记录算法 / Key / IV / 明文 / 密文 / 调用栈(摘要、HMAC、对称、非对称、KDF、OpenSSL EVP)
- 文件、网络、Keychain、动态加载等行为观测
- 浏览器 Web 面板(实时事件流 + 详情),设备端悬浮窗显示统计与面板地址
- FairPlay 内存脱壳
- 内置 MCP 服务器(Streamable HTTP,复用 8088 端口),配合
idh网关可直接给 AI 客户端调用
从 官网首页 或 GitHub Releases 下载,或自行编译:
make VARIANT=trollstore产物在仓库根目录:decrypt_helper.dylib。
注意变体:线上 Release 里的 dylib 资产是用
VARIANT=trollstore编的。直接make(不带参数)编出来的是dev变体,能力相同,只是自报的变体名不同。详见编译变体。
三条注入路径共享同一份核心引擎,区别只在于谁负责把 dylib 放进目标 App 进程。
适用于已通过 TrollStore 安装注入器的设备:
- 在注入器中选择目标 App。
- 添加
decrypt_helper.dylib并执行注入。 - 完全退出并重新启动目标 App。
- 从悬浮窗或日志确认面板地址,在同一局域网的浏览器中打开
http://<设备 IP>:8088。
不同注入器界面略有差异,核心都是把 dylib 注入目标 App 后重启 App。
macOS 先安装 insert_dylib:
brew install insert_dylib执行仓库内置脚本:
./scripts/inject.sh <input.ipa> decrypt_helper.dylib脚本会生成 hooked_<input>.ipa。用 TrollStore、Sideloadly 或 AltStore 安装/重签后启动 App,再访问 http://<设备 IP>:8088。
Sileo / Zebra 添加源:
https://ios.decrypthub.com
按环境安装(两种包对应不同设备架构,不能混装):
- rootless(Dopamine、palera1n):
com.iosdecrypthubrootless 包 - roothide:
com.iosdecrypthubroothide 包
装好后桌面上会多一个 IOSDecryptHub 图标:在这里开关要注入的 App、检查更新、看历史版本。打开目标 App 前先完全退出,再启动即可注入。默认不注入任何 App。依赖 ellekit。
在电脑上安装 idh,手动连接设备(设备 IP 从 App 面板或悬浮窗获取):
pip install ios-decrypt-hub
idh connect <设备 IP>:8088
idh mcpidh mcp 把设备上的 HTTP MCP 桥接为本机 stdio MCP,可作为 Codex、Claude 等客户端的固定 MCP 配置。connect 会把设备保存为持久连接,之后 devices / watch / open / mcp 直接使用;也可临时用 --endpoint http://<设备 IP>:8088 指定。
一份源码编出四个变体,差别只有编译期的 -DDH_VARIANT 编号(见 src/core/dh_capability.c)。该编号目前只影响 MCP get_capabilities 握手自报的 variant 字段,能力位不随变体改变。
| 变体 | 命令 | 架构 | 用途 |
|---|---|---|---|
dev(默认) |
make |
arm64 | 开发者手动注入 / DYLD_INSERT_LIBRARIES / 本地调试 |
trollstore |
make VARIANT=trollstore |
arm64 | 巨魔注入器 —— Release 里的 dylib 资产 |
rootless |
make VARIANT=rootless |
arm64 | rootless deb 包里的引擎 |
roothide |
make VARIANT=roothide |
arm64 + arm64e | roothide deb 包里的引擎(胖切片) |
make dist # 产出带版本号的 decrypt_helper-<version>.dylib(发 Release 用)
make mac # macOS 版 dylib,本机灰度测试
make sim # iOS Simulator 版 dylib
make linux # Linux/WSL 交叉编译(需设置 IOS_SDK 和 CROSS_CC)make deb # 同时构建 rootless 与 roothide
make deb-rootless # 仅普通 rootless(arm64)
make deb-roothide # 仅 roothide(arm64 + arm64e)产物在 build/deb/。必须安装与设备环境匹配的包;roothide 环境装普通 rootless 包会因 arm64 / arm64e 不兼容而无法加载。
make deb 会自动先编译引擎并落到 vendor/dylib/<variant>/,再调用 build_deb.sh 打包。前提:macOS + Xcode(xcrun)+ dpkg-deb + ldid。
更新链路的仿真回归测试(macOS 本机即可,不需要真机,需要网络):
make test-updater发布产物固定三件:decrypt_helper-<version>.dylib(巨魔变体,给注入器用)
- rootless / roothide 两个 deb。
# 本地一键发版:编译 → 打 tag → 建 Release 并上传三件资产
./scripts/publish_release.sh也可以交给 CI —— 先改 Makefile 里的 VERSION 并推 main,再:
git tag v1.27.6 && git push origin v1.27.6.github/workflows/release.yml 会自动编译并创建 Release;Release 说明优先读
.github/release-notes/<version>.md(建议手写),没有则用提交标题自动生成。
build.yml 只在推 main / PR 时做编译验证,不发 Release。
两个工作流都会校验 tag 版本与 Makefile 的 VERSION 一致;CI 发现该 tag 的 Release
已存在时会跳过,所以本地发过之后再推 tag 也不会重复构建。
src/
core/ 核心:fishhook、能力位、脱壳、符号重定向、日志存储
hooks/ 各 API 的 hook(crypto/ 加密算法,behavior/ 文件/网络/Keychain/dyld)
server/ HTTP 服务与 MCP 服务器(Web 面板资源编译时嵌入)
ui/ 设备端悬浮窗
loader.m 越狱注入加载器(读启用名单 → dlopen 引擎,不含 hook)
dh_shared.h 加载器与引擎共享的定义
core/capstone/ 第三方反汇编引擎(BSD-3)
web/ Web 面板界面(编译时由 tools/gen_web.py 转成头文件嵌入 dylib)
tools/ gen_web.py(Web 资源转头文件)、patch_info_plist.py(IPA 重打包用)
app/ 越狱版管理器 App(桌面图标:开关应用 / 检查更新 / 版本回滚)
daemon/ updater daemon(launchd 按需拉起,检查 / 下载 / 安装 / 回滚引擎)
repo/ Sileo 源公钥(装进设备 APT 信任链,否则源索引无法更新)
vendor/dylib/ 打包用引擎落地目录(由 make deb / make test-updater 编译生成,不入版本库)
build_deb.sh 越狱 deb 打包脚本
| 组件 | 作用 |
|---|---|
| 注入加载器 | 读启用名单,命中才 dlopen 引擎;不含任何 hook |
| 引擎 dylib | 运行时分析引擎,源码在本仓 src/,所有 hook 都在它的 constructor 里 |
| 管理器 App | 桌面图标:开关应用、看引擎版本与更新状态、一键更新 / 回滚 |
| updater daemon | 一次性进程(launchd 按需拉起),负责检查、下载、安装、回滚引擎 |
管理器 App 里点「检查更新」→ 写入请求 → daemon 被 launchd 拉起执行:
- 取最新版本号(先读 GitHub
releases/latest的 302,不吃 API 配额;失败才退回 API) - 下载引擎 → 校验体积与 Mach-O 架构(只认 arm64 家族),不合格直接丢弃
- 先备份当前引擎,替换失败立刻用备份恢复;没有备份成功就绝不替换
- 原子落位后,结束已启用 App 的进程 —— 下次打开就是新引擎
- 回滚是 swap 语义:滚回去,备份里留着刚滚下来的版本,还能再滚回来
不用卸装重装,也不用 respring。
- Web 与 MCP 服务默认监听
0.0.0.0:8088,且没有身份认证,请仅在可信网络中使用。 - 注入、重签和脱壳能力受设备环境及目标 App 保护机制影响。
- 请勿将捕获到的 Key、口令、明文或其他敏感数据提交到公开 Issue。
遇到问题可在 GitHub Issues 反馈。
微信搜一搜 DecryptHub,点下面二维码也能加公众号。
- Telegram:https://t.me/decrypthubteam
- X:https://x.com/decrypthub_

