【免费下载链接】Relapse-Exploit
Exploit chain for PS5 7.00 - 13.60
Relapse-Exploit 是一款覆盖 PS5 7.00 – 13.60 固件的浏览器端利用链项目。每当索尼推送新固件,利用链中最先失效的就是各二进制文件的内存布局。本文带你彻底搞懂 offsets 偏移量机制,并给出一套"照抄模板 + 逐项核对 + 机测验证"的完整流程,让你在新固件发布后最快补上一份可用的 offsets,让项目第一时间支持最新版本。
先搞懂原理:为什么每个固件都要一份 offsets 🧩
Relapse-Exploit 的利用链分两级:
- 浏览器阶段:利用 WebKit(JSC)信息泄露 + 对象池错配,拿到用户态任意读/写;
- 内核阶段:通过路由套接字泄露 KASLR 基址,再利用
aio_multi_waitUAF 竞争建立内核读写,最后提权并加载 payload。
而这两个阶段里,所有符号地址、结构体字段、ROP 小工具都是相对于各共享库基址的偏移量,这些偏移量全部存放在offsets/目录下、与固件版本号同名的 JS 文件中,例如 offsets/13.60.js。
加载机制非常直白,只有两处代码:
- src/firmware.js:用正则从浏览器 User-Agent 里解析出固件版本(形如
PlayStation 5/13.60); - src/main.js:动态注入脚本
offsets/{版本号}.js,该文件必须向全局挂载window.KRW与window.SYMBOLS,否则内核阶段会在 src/relapse_exploit.js 直接抛出 "did not define window.KRW" 错误。
💡 结论:添加新固件 = 新写一个 offsets 文件 + 在支持列表里注册版本号,不需要改任何利用逻辑代码。
第一步:在 supportedFirmware 中注册新版本号
打开 src/firmware.js,把新固件版本加进supportedFirmware数组,例如"14.00"。
这一步虽然只有一行,但它是"门禁":window.firmware.rejection()(见 src/firmware.js)会先检查版本是否在数组中,不在就显示FW 14.00 is not supported并终止。
第二步:以最近的版本为模板创建 offsets 文件
固件相邻大版本之间,内核结构体布局通常保持稳定,所以最快的做法是复制最近一份 offsets 作为模板(例如为 14.00 复制 offsets/13.60.js),再逐项用反汇编核对。
以 offsets/13.60.js 为例,一份完整的 offsets 文件包含以下 6 组内容:
| # | 字段 | 所在库 | 作用 | 消费位置 |
|---|---|---|---|---|
| 1 | OFFSET_wk_host_constructor_candidates | libSceNKWebKit | 由泄露的宿主构造器地址反推 WebKit 基址,是后续一切用户态偏移的"根" | src/main.js |
| 2 | OFFSET_wk_memset_import、OFFSET_wk___stack_chk_guard_import | libSceNKWebKit 导入表 | 通过导入槽链式解析出 libc / libKernel 基址 | src/main.js |
| 3 | OFFSET_lk_*(_thread_list、worker_wait_return等) | libKernel | 指纹定位 ROP worker 线程栈、pthread 调用 | src/main.js |
| 4 | OFFSET_lc_*(memset、setjmp、longjmp) | libSceLibc | ROP 链收尾的上下文保存/恢复 | src/main.js |
| 5 | wk_gadgetmap | libSceNKWebKit | pop rdi、pop rsp等 ROP 小工具偏移 | src/rop.js |
| 6 | syscall_map | libKernel | 系统调用号 → 内核 syscall 入口 thunk | src/rop.js |
此外还有两个全局对象,是内核阶段的全部"弹药":
window.KRW(见 offsets/13.60.js):内核读写所需的一切偏移,包括kaslr(KASLR 校验用的静态返回地址与低 16 位)、oid(sysctl oid 窗口机制三组对象 a/b/c)、aio(UAF 竞争依赖的 aio 结构体布局)、proc/ucred/pipe/dynlib(提权要改写的结构体字段)、rodataProbe(内核读自检用的只读区字符串探针)。window.SYMBOLS(见 offsets/13.60.js):libKernel / libc 函数符号偏移,供 src/kexp.js 的resolveSymbols给 shellcode 打导入补丁用。
⚠️ 对比 offsets/7.00.js 和 offsets/12.02.js 可以看到:跨大版本后
kaslr.retStatic、oid各字段、wk_gadgetmap几乎都会变化,模板只能加速查找,不能替代核对。
第三步:重点核对四类"高变动"偏移
新固件上优先花精力核对这四类(它们跨版本变化率最高):
- KASLR 校验值:
kaslr.retStatic/retLow16(如 offsets/13.60.js)。泄露原理见 src/relapse_exploit.js:从路由套接字回包中取一个保存的返回地址,减去retStatic得到内核基址,低 16 位必须等于retLow16,否则报错kaslr: ... is not the expected return address。 - oid 三组对象(a/b/c):内核读写的"窗口"全靠改写 sysctl oid 的 kind 字节实现(src/relapse_exploit.js),新固件中 oid 对象在只读数据区的绝对 RVA 大概率整体平移。
wk_gadgetmap:WebKit 每次改版指令都会重排,ROP 小工具必须在新二进制里重新搜索(pop rdi、pop rsi、mov [rdi], rsi等指令模式)。OFFSET_lk_worker_wait_return:它是 worker 线程"指纹",靠它从线程链表(OFFSET_lk__thread_list)中唯一确定 ROP worker 栈(src/main.js),填错会报worker-stack signature ambiguous。
第四步:本地验证流程(机测)✅
验证只需要三步,全部按 README.md 的 Usage 一节执行:
- 运行
python serve.py启动本地静态服务(serve.py 默认监听 8000 端口并打印局域网地址); - 在 PS5 浏览器打开该地址;
- 观察控制台日志,每一行日志都能对应到一个偏移量分组,失败即定位:
| 控制台日志 | 含义 | 失败时优先排查 |
|---|---|---|
WebKit base: 0x... | 用户态基址推导成功 | OFFSET_wk_host_constructor_candidates |
Kernel: base 0x... | KASLR 泄露成功 | kaslr.retStatic/retLow16 |
read and write ready | oid 窗口内核读写建立 | KRW.oid各字段 |
fast read and write ready | pipe 快速读写建立 | KRW.pipe/KRW.filedesc* |
privileges ready | 提权完成 | KRW.ucred/KRW.dynlib |
elfldr is listening on port 9021 | payload 加载器就绪 | window.SYMBOLS |
🔄 稳定性提示(引自 README.md):WebKit 阶段可能需要多试几次,浏览器卡住就刷新页面;内核阶段若挂起或导致主机 panic,先重启主机再重试。
常见报错排查速查表
| 报错信息 | 直接原因 | 定位字段 |
|---|---|---|
FW 14.00 is not supported | 版本未注册 | supportedFirmware(src/firmware.js) |
WebKit base not found | 候选偏移推不出合法基址 | OFFSET_wk_host_constructor_candidates |
worker-stack signature ambiguous | worker 指纹不唯一 | OFFSET_lk_worker_wait_return、OFFSET_lk__thread_list |
kaslr: author+184 = 0x... not expected | 返回地址校验值过期 | KRW.kaslr |
did not define window.KRW | offsets 文件没挂全局对象 | 文件名必须与版本号完全一致 |
收尾清单 📋
- 新文件命名与固件版本号逐字符一致(
offsets/14.00.js); supportedFirmware已注册;kaslr、oid、wk_gadgetmap、worker_wait_return四组高变动字段已在新固件上反汇编核对;- 机测日志走到
privileges ready以上; - 遵守 README.md 的免责声明:仅用于教育与安全研究,只在你拥有或获授权的设备上测试。
掌握这套"注册 → 套模板 → 核对 → 机测"的固定流程后,为 Relapse-Exploit 支持一个新固件,本质上就是把 20 多个关键字段从旧版本映射到新版本并逐一验证——流程固定,重复可预期。
【免费下载链接】Relapse-Exploit
Exploit chain for PS5 7.00 - 13.60
相关推荐
Relapse-Exploit 偏移量文件详解:offsets/*.js 中 KRW 结构、gadget 表与符号表如何驱动整个利用链
Relapse Exploit 偏移量文件详解:offsets/ .js 中 KRW 结构、gadget 表与符号表如何驱动整个利用链 Relapse Expl
ATAC认证机制:Basic Auth与Bearer Token实现
ATAC认证机制:Basic Auth与Bearer Token实现 在API开发与测试过程中,认证(Authentication)是保障接口安全的重要环节。A
人工智能深度学习生物信息学科研终极Gyroflow开发指南:如何快速为新相机添加支持
终极Gyroflow开发指南:如何快速为新相机添加支持 Gyroflow是一款革命性的视频稳定软件,它利用陀螺仪数据来实现专业的视频防抖效果。如果你想要为新的相
视频处理桌面应用音视频
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考