18 KiB
OnionHEN
面向 PlayStation 5 的一体化 HEN 与工具箱
简体中文 · English
OnionHEN 是一套模块化的 PS5 payload。一个入口 ELF 完成系统准备、注入
ShellUI 工具箱,再拉起监控条、金手指、用户 payload 和后台服务。
功能
OnionHEN 面向已越狱的 PS5,提供一套能日常使用、也方便维护的自制环境。
- ShellUI 工具箱 — 注入 PS5 ShellUI 的设置页
- 系统准备 — 提权、重新挂载文件系统、阻断系统更新分区
- fSELF / fPKG — 内嵌 kstuff,用来跑自制 SELF / PKG;默认加载,可在工具箱关掉
- 插件运行时 — 发现、校验、启动、停止和删除带 descriptor 的插件 ELF
- PS5 FTP 服务器 — 由可选的外部
onionHEN-ftpsrv-plugin提供 - ShadowMount+ — 由可选的外部
onionHEN-shadowmountplus-plugin提供 - 远程游玩配对 — 在网络菜单中启用 PS5 原生远程游玩服务、生成配对 PIN 并注册客户端
- 用户 Payload 管理 — 启动和停止用户添加的普通
.elfpayload,可选自动启动 - 游戏监控条 — 游戏中显示 FPS、CPU、GPU、内存、温度和网络信息
- 金手指 — 本地 JSON、SHN、MC4、ShnExt 文件,运行中即可开关
- 主机工具 — 账号激活、外接硬盘、Title ID、风扇、快捷键和游戏选项
- DPI v2 — 由可选的外部
onionHEN-dpiv2-plugin提供 - 应用越狱 — 白名单自制软件可通过守护进程沙盒 FIFO 申请提权
- 可恢复运行时 — 关键守护进程和工具守护进程分开;主进程可以拉起工具进程
- 统一配置 — 工具箱和守护进程共用一份带版本号的
config.ini
OnionHEN 不内置内核漏洞。第一次引导仍需要外部 9021 上的 elfldr。
之后会启动自己的私有 9020 加载器,用来加载后续 ELF 和用户 payload。
运行
运行要求
- 一台已越狱的 PS5
- 一个监听 9021、用于第一次引导的外部 PS5
elfldr
加载 OnionHEN
- 运行内核漏洞利用,并启动外部
elfldr服务。 - 用漏洞加载端提供的加载器发送
OnionHEN.elf。 - 按顺序等待工具守护进程、
kstuff和主守护进程启动。 - 打开 PS5 设置,进入 OnionHEN 工具箱。
启动是按固定顺序进行的。第一次引导之后,OnionHEN 使用自己的
onion_elfldr.elf(端口 9020),9021 只作为兼容回退。
OnionHEN.elf → bootstrapper → onion_elfldr.elf (:9020) → util.elf → kstuff.elf → daemon.elf → Toolbox
kstuff 就绪后,daemon 会发现并启动外部插件。
FTP 服务器
FTP 由独立的
onionHEN-ftpsrv-plugin
提供。将其安装为 /data/OnionHEN/plugins/FTPS00001.elf 后,OnionHEN 会自动发现
并启动;插件动态设置页提供启用、端口和重启控制。插件保留上游 ftpsrv 的
KILL、SELF、SCHK、MTRW、AUTHID 等命令(视固件支持而定)。
ShadowMount+
ShadowMount+ 由可选的外部
onionHEN-shadowmountplus-plugin
提供。将带 descriptor 的 ELF 安装到 /data/OnionHEN/plugins/ 后,daemon 统一负责
发现、启动、停止、替换和删除;插件动态页面提供立即扫描操作。它依赖
kstuff,自身选项保存在 /data/shadowmount/config.ini。
DPI(网络包安装器)
DPI v2 由可选的外部
onionHEN-dpiv2-plugin
提供。将其安装为 /data/OnionHEN/plugins/DPIV00001.elf 后,OnionHEN 会自动发现
并启动;插件动态设置页提供启用、API 端口、WebUI 端口和重启控制。浏览器仍是
安装操作界面,保留分块上传、队列管理、暂存文件复用和 SSE 实时进度。默认 WebUI
地址是 http://<console>:12800。
远程游玩
远程游玩配对位于 工具箱 → 网络 → 远程游玩。 当前账号必须已经激活;未激活时,OnionHEN 会阻止进入远程游玩页面,并提示前往 工具箱 → 账号 → 账号激活。账号激活后,OnionHEN 会启用远程游玩注册表设置并显示 配对 PIN。保持页面打开,在官方远程游玩客户端中输入该 PIN;OnionHEN 会调用 PS5 原生远程游玩服务确认已注册的设备。
此功能只负责配对和设备注册。视频串流与客户端传输仍由 Sony 的原生远程游玩服务处理。
Payload
把独立 payload 放到:
/data/OnionHEN/payloads/
只支持普通 .elf。可在工具箱里打开自动启动;OnionHEN 会在 ELF 旁边写一个
同名的 .auto_start 文件记住这个选择。
所有 .elf 文件名都使用相同的 Payload 页面、加载器和自动启动流程。已有有效 PID
记录的用户 Payload 会保持运行,后续启动和自动启动请求直接跳过。
OnionHEN 插件属于独立类别,应放在 /data/OnionHEN/plugins/。
金手指
把金手指文件放到同一目录。文件名为 TITLEID_VERSION,进程名和 8 位十六进制 SOURCE_ID 都可省略:
/data/OnionHEN/cheats/<TITLE_ID>_<VERSION>[_<PROCESS>][_<SOURCE_ID>].json
/data/OnionHEN/cheats/<TITLE_ID>_<VERSION>[_<PROCESS>][_<SOURCE_ID>].shn
/data/OnionHEN/cheats/<TITLE_ID>_<VERSION>[_<PROCESS>][_<SOURCE_ID>].mc4
/data/OnionHEN/cheats/<TITLE_ID>_<VERSION>[_<PROCESS>][_<SOURCE_ID>].ShnExt
SOURCE_ID 只用于标识物理来源。没有 PROCESS 的文件是通用来源;带进程名的文件只匹配对应进程。相同游戏、版本和进程的多个 JSON、SHN、MC4、ShnExt 来源会同时加载。
金手指从磁盘加载。文件有改动时会重新载入,不必重启整套进程。
DOWNLOAD_CHEATS 会通过 HTTPS 下载金手指仓库 ZIP,解压 cheats/ 子树,再把 json/、shn/、mc4/ 里的文件按原名拷进上述目录;同步完成后会清理临时 ZIP。镜像由 [cheats] mirror 控制:auto 时简体中文走 cnb.cool,其它地区走 GitHub。
构建
依赖
| 依赖 | 用途 |
|---|---|
| PS5 Payload SDK | Prospero 编译器、目标头文件、运行库和 CMake 封装 |
| CMake 3.20+ 与 Ninja | 配置并构建整套 payload |
| Clang / LLVM | 编译 x86_64-sie-ps5 目标 |
lzma 或 xz |
压缩 bootstrapper |
Git 与 curl 或 wget |
初始化 submodule 并获取外部 payload 输入 |
完整构建
git submodule update --init --recursive
export PS5_PAYLOAD_SDK=/path/to/ps5-payload-sdk
./scripts/build.sh --jobs 8
脚本会配置项目、拉取外部依赖,并按所需顺序构建整条嵌入链。
使用 Docker 进行可复现构建:
docker compose build onionhen-build
docker compose run --rm onionhen-build
常用选项
| 选项 | 说明 |
|---|---|
--build-type Debug|Release |
选择 CMake 构建类型 |
--build-dir <path> |
覆盖默认的 build/ 目录 |
--cache-dir <path> |
覆盖 .cache/dependencies/ |
--stub-missing |
使用仅供编译的外部 ELF 占位文件,禁止在真机使用 |
--skip-unpacker |
构建完 bootstrapper 后停止 |
--init-submodules |
同步依赖前初始化 submodule |
运行 ./scripts/build.sh --help 查看完整选项列表。
构建产物
| 路径 | 说明 |
|---|---|
build/bin/OnionHEN.elf |
发送到主机的最终 payload |
build/bin/bootstrapper.elf |
未压缩的 bootstrapper |
build/bin/bootstrapper.elf.lzma |
嵌入最终 payload 的 bootstrapper |
build/bin/daemon.elf |
关键守护进程 |
build/bin/util.elf |
工具守护进程 |
build/bin/shellui.elf |
Toolbox 注入 payload |
build/lib/*.a |
本仓库静态库 |
构建产物都在 build/。下载的依赖缓存在 .cache/dependencies/。
不会往 source/ 里写产物。
测试
主机侧测试覆盖配置、IPC、payload 辅助逻辑、金手指解析、重定位、工具箱路由和共享平台代码:
make -C source/util/tests clean
make -C source/util/tests test -j8
链接主机侧测试时需要能通过 KEYSTONE_PREFIX 找到 Keystone,默认是 /opt/homebrew。
配置
OnionHEN 在下面两处读写同一份配置:
/data/OnionHEN/config.ini
/user/data/OnionHEN/config.ini
大部分选项都可以在工具箱里改。配置格式是 schema_version=1。
如果还没有配置文件,OnionHEN 会按 config.ini.example
写出一份带注释的默认文件。
| 配置项 | 默认值 | 可用值 |
|---|---|---|
meta.schema_version |
1 |
1 |
toolbox.language |
system |
system, zh-Hans, zh-Hant, en, ja, ko, fr, de, it, es, pt-BR, pt-PT, pl, ru, ar, th, nl, fi, sv, da, no, tr, cs, hu, el, ro, vi, id, uk |
startup.open_after_load |
none |
none, home_menu |
home_screen.show_title_ids |
false |
true, false |
game_menu.show_onionhen_options |
true |
true, false |
rest_mode.resume_reinject_delay_seconds |
10 |
0 到 255 秒 |
cheats.mirror |
auto |
auto, github, cnb |
app_jailbreak.debug_notifications |
false |
true, false |
cooling.fan_control |
automatic |
automatic, temperature_threshold |
cooling.temperature_threshold_celsius |
77 |
0 到 100 |
overlay.enabled |
true |
true, false |
overlay.background |
true |
true, false |
overlay.edge |
top |
top, bottom |
overlay.align |
center |
left, center, right |
overlay.font_size |
medium |
small, medium, large |
overlay.order |
fps,cpu,gpu,memory,ip,fan |
逗号分隔的 fps、cpu、gpu、memory、ip、fan |
overlay.show_cpu / overlay.show_gpu / overlay.show_memory / overlay.show_fps |
true |
true, false |
overlay.cpu_usage_mode |
average |
average, per_core |
overlay.show_ip_address |
false |
true, false |
shortcuts.cheats_menu |
off |
off, r3_l3, l2_triangle, long_options, long_share, share |
shortcuts.toolbox |
off |
off, l2_r3, long_share, share |
运行时数据
| 路径 | 用途 |
|---|---|
/data/OnionHEN/payloads/ |
用户 payload ELF |
/data/OnionHEN/plugins/ |
带 descriptor 的 OnionHEN 插件 ELF |
/data/OnionHEN/cheats/ |
金手指文件 |
/data/OnionHEN/cheats_tmp/ |
HTTPS ZIP 与解压临时文件(同步后清理) |
/data/OnionHEN/kstuff.elf |
可选的运行时覆盖文件,优先于内嵌 kstuff |
/data/OnionHEN/OnionHEN.log |
主运行日志 |
/data/OnionHEN/OnionHEN_crash.log |
保留的 daemon 崩溃信号与回溯日志 |
/data/OnionHEN/OnionHEN_util_daemon.log |
Utility daemon 日志 |
主机侧工具
| 工具 | 用途 |
|---|---|
scripts/daemon_log.py |
从主机拉取守护进程日志 |
scripts/shutdown_onion.py |
关闭 OnionHEN 用户态进程,但不结束 kstuff |
scripts/ps5_cmake.sh |
通过 PS5 Payload SDK 运行 CMake |
scripts/sync_dependencies.sh |
获取或构建外部 payload 输入 |
仓库结构
.
├── assets/ 项目图片资源
├── docs/ 架构与技术文档
├── scripts/ 构建、依赖和主机侧辅助脚本
├── source/ 本仓库的 PS5 源码
│ ├── bootstrapper/ 启动与内嵌 payload 链
│ ├── daemon/ 关键守护进程与工具箱注入
│ ├── util/ 工具守护进程、IPC 与金手指
│ ├── shellui/ 工具箱与 ShellUI 挂钩
│ ├── i18n/ 共享的工具箱 / 通知多语言目录
│ ├── unpacker/ 最终 OnionHEN payload 包装
│ ├── libonion_*/ 本仓库共享库
│ ├── common/ 共享底层实现
│ └── platform/ps5/stubs/ PS5 系统库链接 stub
├── third_party/ 外部源码、预编译库和 submodule
├── tools/ 仓库侧生成工具
├── build/ 生成的构建产物(忽略提交)
└── .cache/dependencies/ 下载的外部输入(忽略提交)
完整模块与 IPC 关系见架构文档。
故障排查
- 加载 OnionHEN 前,确认外部
elfldr能从 9021 连上。 - 确认这份 payload 是用完整的 PS5 Payload SDK、按当前固件构建的。
- 工具箱没出现时,等
util → kstuff → daemon启动完,再看日志。 - 构建拿不到
kstuff.elf时,再跑一次./scripts/sync_dependencies.sh,或初始化 submodule。 - 报问题时请附上固件、漏洞加载端、SDK 版本、构建类型、日志和复现步骤。
参与贡献
赞助
国内用户也可以扫描下方二维码进行捐赠:
| 支付宝(国内) | 微信(国内) |
|---|---|
如果 OnionHEN 对你有用,欢迎支持后续开发。谢谢。
致谢
OnionHEN 离不开 PS5 自制软件与逆向工程社区。
贡献者
来源
参考
- kstuff-lite — EchoStretch、sleirsgoevy 与贡献者;休息模式 Toolbox 恢复沿用其 SceSysCore
NOTE_EXEC监视NPXS40087,并等待libSceNpTrophy.sprx/libSceNpTrophy2.sprx - ps5-payload-manager — itsplk;休息后监听套接字重绑定(Unix IPC 与 TCP
accept失败自愈)参考了这个项目 - HEN-Cheats-Collection — TeeKay87;内置金手指同步下载所用的社区金手指合集
- PHU Games Tools — ArkSama;游戏内 FPS 计数沿用 PHU Games Tools 的 skip-hook 采样(
/dev/dcescanout 与对libSceAgcDriver的 DMAP 读取)
实际使用或内嵌
- PS5 Payload SDK — Prospero 工具链与头文件
- elfldr — 端口 9021 的首次引导加载器;不打进 payload
- kstuff-lite — EchoStretch、sleirsgoevy 与贡献者;可选的
kstuff.elf - onionHEN-ftpsrv-plugin — 基于 drakmor/ftpsrv 的可选外部 FTP 插件
- onionHEN-shadowmountplus-plugin — 基于 Drakmor 项目的可选外部 ShadowMount+ 扫描/挂载插件
- libhijacker — astrelsky;进程劫持与内核读写
- NineS — buzzer-re;注入 ShellUI
- cJSON — JSON 解析
- 7-Zip LZMA SDK — unpacker 解压
- miniz — 金手指文件解压
测试人员
即食面、雨之声、大饼电玩、安定区、随风、麒麟、尼克库尔曼、云、啊烦、小小蔡、B站谢锡榆、荆枫、苏打先森、噢、天天向上
也感谢其他参与测试、研究和给出有效反馈的人。
许可证
本项目基于 GNU General Public License v3.0 发布。 第三方组件保留各自的许可证与声明。
OnionHEN 是非官方自制项目,与 Sony Interactive Entertainment 无关。 请只在你自己的主机上使用,风险自负。本项目不提供任何担保。



