- 操作系统
- 应用安全
【免费下载链接】Dopamine
Dopamine is a semi-untethered jailbreak for iOS 15 to 26(.0.1)
本篇技术指南围绕开源仓库 Dopamine 的 Standalone/Corellium/README.md 展开,完整讲解如何在 Corellium 虚拟化 iOS 设备上安装半无根(semi-untethered)越狱 Dopamine:从 endpoint.json 凭据配置、编译二进制、Trust Cache 注入,到dopamine.js自动化安装脚本与 SSH 接入的全流程。读完本文,你将掌握一套可复现的、基于 Corellium API 的 iOS 越狱环境自动化部署方案,并理解其底层 krw(内核读写)与 bootstrap 安装机制。
一、方案概述:Corellium 虚拟设备上的 Dopamine
Dopamine 是一款面向 iOS 15 至 26(.0.1) 的 semi-untethered 越狱工具,常规情况下需要在真实设备上通过图形界面点按越狱按钮完成。但在 Corellium(ARM 虚拟化 iOS 平台)上,Dopamine 提供了一套完全脚本化的部署路径:
- 利用 Corellium 平台自带的内核读写能力(
krw-corellium),跳过真实设备上的漏洞利用链; - 通过 Corellium 的 "Trust Cache" 设置,直接放行未签名/自签名的
dopamine二进制; - 借助 Node.js 编写的 dopamine.js 脚本,自动完成文件上传、命令执行、bootstrap 下载与安装。
整套流程由 Standalone/Corellium/ 目录下的三个核心文件支撑:
| 文件 | 作用 |
|---|---|
| README.md | 官方操作步骤总纲 |
| dopamine.js | 基于@corellium/corellium-api的自动化安装脚本 |
| endpoint.sample.json | Corellium 账号连接配置模板 |
二、第一步:配置 endpoint.json 与账号凭据
将endpoint.sample.json复制为endpoint.json,并填入 Corellium 账号信息:
cp Standalone/Corellium/endpoint.sample.json Standalone/Corellium/endpoint.json模板内容如下(endpoint.sample.json):
{ "endpoint": "https://app.corellium.com", "username": "username", "password": "password", "totpToken": "123456" }字段说明:
endpoint:Corellium API 端点地址,默认https://app.corellium.com;username/password:Corellium 账号的用户名与密码;totpToken:双重认证(TOTP)动态口令。
README 特别强调:"either username+password combination or a totp token is required",即用户名+密码组合与 totpToken 至少需要提供其一。对照 dopamine.js 的源码,脚本在实例化Corellium客户端时只读取了endpoint、username、password三个字段,随后调用corellium.login()完成登录:
let corellium = new Corellium({ endpoint: config.endpoint, username: config.username, password: config.password, }); await corellium.login();也就是说,totpToken作为可选字段存在,具体是否需要取决于你的 Corellium 账号是否开启了双重认证;若账号启用了 TOTP,登录时会被要求提供该动态口令。
三、第二步:编译 Dopamine 二进制与打包 Dopamine.tar
3.1 编译独立的 dopamine 二进制
README 步骤 2 要求"编译 Dopamine"。与面向真机的图形化 App 不同,Corellium 部署使用的是BaseBin/dopamine下的独立命令行版本(Standalone 构建),其构建入口在 BaseBin/dopamine/Makefile:
TARGET = dopamine CC = clang CHOMA_CFLAGS = -DDISABLE_SIGNING=1 ... sign: $(TARGET) @ldid -Cadhoc -Sentitlements.plist $<几个值得注意的构建细节:
- 使用
-DDISABLE_SIGNING=1(ChOma 相关)与 XPF 的 img4 处理 CFLAGS; - 目标平台为
iphoneos、架构arm64,最低系统版本15.0(-miphoneos-version-min=15.0),与 Dopamine 支持 iOS 15 起的定位一致; $(TARGET)依赖src/*.c src/*.m src/*.S、src/ui-stub/*.m、../libjailbreak/src/*、../ChOma/src/*、../XPF/src/*以及Application/Dopamine/Jailbreak/*、Extensions/NSData+Hex.m等,可见这个"独立版"实际上复用了主 App 的越狱逻辑(DOJailbreaker、DOBootstrapper、DOEnvironmentManager);sign目标使用ldid以 adhoc 方式签名并注入 entitlements.plist(其中包含platform-application、HID 相关私有 entitlement 与com.apple.security.iokit-user-client-class等)。
3.2 生成 Dopamine.tar
dopamine.js 会从../Dopamine.tar读取安装包上传到设备,这个 tarball 由 Standalone/Makefile 生成:
OUT_FILE = Dopamine.tar $(OUT_FILE): FORCE @mkdir -p .build @cp ../BaseBin/basebin.tar .build/basebin.tar @cp ../BaseBin/dopamine/dopamine .build/dopamine @mkdir -p .build/Packages @cp $(wildcard ../Packages/*/*.deb) .build/Packages @DYLD_FALLBACK_LIBRARY_PATH="../BaseBin" ../BaseBin/tar --transform "s|^.build|.|" -cvf "$(OUT_FILE)" ".build" --owner=0 --group=0即Dopamine.tar内打包了basebin.tar(basebin 基础组件)、dopamine二进制以及Packages/*.deb(内置 deb 包,如Packages/additional/launchctl、libkrw-provider、libroot等),并统一以 root 身份(--owner=0 --group=0)归档,保证设备端解压后的属主正确。
四、第三步:提取 CandidateCDHash 并注入 Trust Cache
README 步骤 3-4 是整条部署链路中最关键的一步:Corellium 虚拟设备默认只信任已注入其 Trust Cache 的二进制签名,而独立版dopamine是自签名的,必须手动放行。
首先在宿主机上查看二进制的签名信息:
codesign -dvvvv BaseBin/dopamine/dopamine输出中的CDHash=字段(即 CandidateCDHash)即为该二进制的代码目录哈希。然后在 Corellium 控制台的Non-Jailbroken 实例上操作:
- 进入实例的Settings;
- 打开Trust Cache;
- 将上一步输出的
CandidateCDHash粘贴进去并保存。
这一步是后续脚本能否成功执行的先决条件。dopamine.js 在命令执行失败时也会给出同样的提示:
if (!result.success) { console.log("Failed to run binary, ensure BaseBin/dopamine/dopamine binaries CDHash has been added to trustcache in the corellium instance under Settings -> Trust Cache") }五、第四步:运行 dopamine.js 自动化安装
5.1 命令语法与两种模式
env NODE_TLS_REJECT_UNAUTHORIZED=0 node dopamine.js install <Project> <Instance>其中:
<Project>与<Instance>既可以是名称(name),也可以是 ID(id),脚本会依次匹配(dopamine.js);install是安装模式,另一种可用模式是activate(激活已安装的环境)。
NODE_TLS_REJECT_UNAUTHORIZED=0用于在 TLS 证书校验异常的环境下放行 HTTPS 请求,正式使用前请确认你的网络与证书策略允许这样做。
5.2 脚本执行流程(install 模式)
对照源码(dopamine.js),install模式的完整流水线为:
- 登录与定位:
corellium.login()→ 枚举 projects → 按名称/ID 找到目标项目与实例(找不到会直接报错退出); - 等待实例就绪:
instance.waitForAgentReady()等待 Corellium agent 可用,随后instance.agent()取得 agent 句柄; - 清理旧文件:依次删除设备上的
/private/preboot/dopamine、/private/preboot/Dopamine.tar、/private/preboot/bootstrap_1900.tar.zst(异常被吞掉,保证幂等重试); - 下载 bootstrap:从
https://apt.procurs.us/bootstraps/1900/bootstrap-ssh-iphoneos-arm64.tar.zst下载 Procursus SSH bootstrap 到本地临时目录(脚本内置了 3xx 重定向跟随与失败清理逻辑,dopamine.js); - 三文件上传:
- bootstrap →
/private/preboot/bootstrap_1900.tar.zst ../Dopamine.tar→/private/preboot/Dopamine.tar../../BaseBin/dopamine/dopamine→/private/preboot/dopamine随后agent.changeFileAttributes("/private/preboot/dopamine", {mode: 775})赋予可执行权限;
- bootstrap →
- 执行安装命令:
/private/preboot/dopamine install /private/preboot/Dopamine.tar /private/preboot/bootstrap_1900.tar.zst,并输出Dopamine returned <exit-status>与逐行执行日志。
5.3 activate 模式
activate模式跳过文件上传,直接执行:
/var/jb/basebin/dopamine activate用于在环境已就绪(preboot 已挂载、bootstrap 已安装)后重新激活越狱环境。
5.4 设备端 install/activate 的底层语义
设备端dopamine二进制的入口在 BaseBin/dopamine/src/main.m:
if (!strcmp(argv[1], "install")) { if (argc >= 3) { const char *bootstrapPath = argc >= 4 ? argv[3] : NULL; install_dopamine_from_tarball(argv[2], bootstrapPath); } else { install_dopamine(); } } else if (!strcmp(argv[1], "activate")) { activate_dopamine(); }install <tarball> <bootstrap>:将Dopamine.tar解压到/private/preboot/dopamine_tmp,拷贝 bootstrap,再execve自身执行真正的install(main.m);- 真正的
install_dopamine()会依次执行activate_environment(false, true)(含 offset 查找、krw 初始化、显示非默认系统 App、启用开发者模式、创建越狱根、prepareBootstrap、加载 basebin trustcache、注入 launchd hook)、install_basebin_gen()生成并安装 basebin、activate_basebin()上传 fakelib dyld 的 trustcache,最后finalize_bootstrap_if_needed()运行prep_bootstrap.sh并安装内置 deb 包、load_var_jb_daemons()用launchctl bootstrap system加载/var/jb/Library/LaunchDaemons(main.m)。
六、第五步:端口转发、Wi-Fi 与 SSH 登录
安装完成后,README 步骤 6-9 给出接入方式:
- 在 Corellium 实例的Port Forwarding中新增一条端口映射:
- Device port =
22 - Router port =
22 - 勾选expose port(暴露端口);
- Device port =
- 确保设备已连接 Wi-Fi 网络(SSH bootstrap 依赖网络环境);
- 在实例的Connect面板底部查看 Wi-Fi IP;
- 使用
mobile用户 SSH 登录:
ssh mobile@<Wi-Fi IP>登录后即可获得基于 Procursus SSH bootstrap 的 shell 环境,用于验证越狱状态或进一步调试。
七、原理补充:Corellium 上的内核读写与 stub 组件
独立版dopamine之所以能在 Corellium 上跳过真实漏洞利用,关键在于 krw-corellium.m 将内核读写原语直接桥接到 Corellium 虚拟化平台的unicopy能力:
int corellium_krw_init(void) { uint64_t kernelBase = get_kern_info(KERN_INFO_VA); gSystemInfo.kernelConstant.slide = kernelBase - kconstant(staticBase); gPrimitives.kreadbuf = kreadbuf_wrapper; // 虚拟地址读 gPrimitives.kwritebuf = kwritebuf_wrapper; // 虚拟地址写 gPrimitives.physreadbuf = physreadbuf_wrapper;// 物理地址读 gPrimitives.physwritebuf = physwritebuf_wrapper; gPrimitives.phystokv = phystokv; return 0; }它从get_kern_info(KERN_INFO_VA)拿到内核基址并据此计算 slide,然后把gPrimitives的读写钩子全部替换为基于unicopy(UNICOPY_*_KERN/_PHYS)的实现。init_libjailbreak()(main.m)随后调用corellium_krw_init()、libjailbreak_physrw_pte_init()与libjailbreak_IOSurface_primitives_init(),完成从虚拟化平台原语到 libjailbreak 物理读写/PTE 原语的交接。
另外,app-stub.m 中对grab_kernelcache/grab_images提供了返回false的 stub 实现,说明在 Corellium 场景下内核缓存抓取(真机上用于 offset 定位)被禁用,offset 改为直接依赖 Corellium 提供的内核信息。
八、常见问题排查要点
| 现象 | 排查方向 |
|---|---|
脚本报Project not found/Instance not found | 确认<Project>/<Instance>名称或 ID 与 Corellium 控制台一致 |
执行dopamine失败 | 确认已将codesign -dvvvv BaseBin/dopamine/dopamine输出的CandidateCDHash粘贴进实例Settings → Trust Cache |
| bootstrap 下载失败(HTTP 非 200) | 检查网络可达性与重定向,脚本会删除失败残留文件并可重试 |
| SSH 连不上 | 核对 Port Forwarding 的 Device/Router port=22 且已勾选 expose port,并确认设备已连接 Wi-Fi |
| 重复安装 | install 模式会自动清理/private/preboot下旧文件,幂等可重试 |
九、总结
在 Corellium 上部署 Dopamine 是一条完全脚本化的路径:endpoint.json提供连接凭据,codesign -dvvvv提取 CDHash 并注入 Trust Cache 解决自签名放行问题,dopamine.js借助 Corellium API 完成 bootstrap 下载、三文件上传与安装/激活命令下发,最后通过端口转发 + SSH 接入验证。理解 main.m 与 krw-corellium.m 的底层实现,有助于在真实设备与虚拟化平台之间快速迁移调试思路,也能让你更清楚地看到 Dopamine 越狱流程中"原语获取 → basebin 安装 → launchd hook 注入 → bootstrap 落盘"的完整链路。
- 操作系统
- 应用安全
【免费下载链接】Dopamine
Dopamine is a semi-untethered jailbreak for iOS 15 to 26(.0.1)
相关推荐
用systemstat构建实时系统监控工具:5个实战案例
用systemstat构建实时系统监控工具:5个实战案例 systemstat 是一个纯 Rust 编写的跨平台系统信息库,专门用来获取 CPU、内存、磁盘、网
Vectras VM:在Android设备上实现移动虚拟化的终极指南
想要在手机上运行Windows、Linux甚至macOS系统吗?Vectras VM这款基于QEMU的Android虚拟机应用让这一切成为可能。本文将为您揭秘如
虚拟化嵌入式系统底层ARM64虚拟化实战:Proxmox VE在ARM平台上的完整部署指南
ARM64虚拟化实战:Proxmox VE在ARM平台上的完整部署指南 随着ARM64架构在树莓派、Rockpi等开发板以及服务器领域的快速发展,越来越多的用户
后端云原生
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考