☰
Dopamine 在 Corellium 虚拟设备上的部署与自动化安装指南(dopamine.js 实战)
2026/10/2 1:48:21 网站建设 项目流程
  • 操作系统
  • 应用安全

【免费下载链接】Dopamine

Dopamine is a semi-untethered jailbreak for iOS 15 to 26(.0.1)

项目地址:https://gitcode.com/GitHub_Trending/dop/Dopamine
点击查看免费下载

本篇技术指南围绕开源仓库 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.jsonCorellium 账号连接配置模板

二、第一步:配置 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 实例上操作:

  1. 进入实例的Settings;
  2. 打开Trust Cache;
  3. 将上一步输出的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模式的完整流水线为:

  1. 登录与定位:corellium.login()→ 枚举 projects → 按名称/ID 找到目标项目与实例(找不到会直接报错退出);
  2. 等待实例就绪:instance.waitForAgentReady()等待 Corellium agent 可用,随后instance.agent()取得 agent 句柄;
  3. 清理旧文件:依次删除设备上的/private/preboot/dopamine、/private/preboot/Dopamine.tar、/private/preboot/bootstrap_1900.tar.zst(异常被吞掉,保证幂等重试);
  4. 下载 bootstrap:从https://apt.procurs.us/bootstraps/1900/bootstrap-ssh-iphoneos-arm64.tar.zst下载 Procursus SSH bootstrap 到本地临时目录(脚本内置了 3xx 重定向跟随与失败清理逻辑,dopamine.js);
  5. 三文件上传:
    • 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})赋予可执行权限;
  6. 执行安装命令:/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 给出接入方式:

  1. 在 Corellium 实例的Port Forwarding中新增一条端口映射:
    • Device port =22
    • Router port =22
    • 勾选expose port(暴露端口);
  2. 确保设备已连接 Wi-Fi 网络(SSH bootstrap 依赖网络环境);
  3. 在实例的Connect面板底部查看 Wi-Fi IP;
  4. 使用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)

项目地址:https://gitcode.com/GitHub_Trending/dop/Dopamine
点击查看免费下载
上一篇:procs在系统监控中的应用:与Prometheus、Grafana的集成方案
下一篇:社区与生态:Heroku Ruby构建包的生态系统与贡献指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询