☰
Relapse-Exploit 开发者指南:如何为新固件快速添加一套 offsets 偏移量
2026/10/11 12:54:25 网站建设 项目流程

【免费下载链接】Relapse-Exploit

Exploit chain for PS5 7.00 - 13.60

项目地址:https://gitcode.com/gh_mirrors/re/Relapse-Exploit
点击查看免费下载

Relapse-Exploit 是一款覆盖 PS5 7.00 – 13.60 固件的浏览器端利用链项目。每当索尼推送新固件,利用链中最先失效的就是各二进制文件的内存布局。本文带你彻底搞懂 offsets 偏移量机制,并给出一套"照抄模板 + 逐项核对 + 机测验证"的完整流程,让你在新固件发布后最快补上一份可用的 offsets,让项目第一时间支持最新版本。

先搞懂原理:为什么每个固件都要一份 offsets 🧩

Relapse-Exploit 的利用链分两级:

  1. 浏览器阶段:利用 WebKit(JSC)信息泄露 + 对象池错配,拿到用户态任意读/写;
  2. 内核阶段:通过路由套接字泄露 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 组内容:

#字段所在库作用消费位置
1OFFSET_wk_host_constructor_candidateslibSceNKWebKit由泄露的宿主构造器地址反推 WebKit 基址,是后续一切用户态偏移的"根"src/main.js
2OFFSET_wk_memset_import、OFFSET_wk___stack_chk_guard_importlibSceNKWebKit 导入表通过导入槽链式解析出 libc / libKernel 基址src/main.js
3OFFSET_lk_*(_thread_list、worker_wait_return等)libKernel指纹定位 ROP worker 线程栈、pthread 调用src/main.js
4OFFSET_lc_*(memset、setjmp、longjmp)libSceLibcROP 链收尾的上下文保存/恢复src/main.js
5wk_gadgetmaplibSceNKWebKitpop rdi、pop rsp等 ROP 小工具偏移src/rop.js
6syscall_maplibKernel系统调用号 → 内核 syscall 入口 thunksrc/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几乎都会变化,模板只能加速查找,不能替代核对。

第三步:重点核对四类"高变动"偏移

新固件上优先花精力核对这四类(它们跨版本变化率最高):

  1. KASLR 校验值:kaslr.retStatic/retLow16(如 offsets/13.60.js)。泄露原理见 src/relapse_exploit.js:从路由套接字回包中取一个保存的返回地址,减去retStatic得到内核基址,低 16 位必须等于retLow16,否则报错kaslr: ... is not the expected return address。
  2. oid 三组对象(a/b/c):内核读写的"窗口"全靠改写 sysctl oid 的 kind 字节实现(src/relapse_exploit.js),新固件中 oid 对象在只读数据区的绝对 RVA 大概率整体平移。
  3. wk_gadgetmap:WebKit 每次改版指令都会重排,ROP 小工具必须在新二进制里重新搜索(pop rdi、pop rsi、mov [rdi], rsi等指令模式)。
  4. OFFSET_lk_worker_wait_return:它是 worker 线程"指纹",靠它从线程链表(OFFSET_lk__thread_list)中唯一确定 ROP worker 栈(src/main.js),填错会报worker-stack signature ambiguous。

第四步:本地验证流程(机测)✅

验证只需要三步,全部按 README.md 的 Usage 一节执行:

  1. 运行python serve.py启动本地静态服务(serve.py 默认监听 8000 端口并打印局域网地址);
  2. 在 PS5 浏览器打开该地址;
  3. 观察控制台日志,每一行日志都能对应到一个偏移量分组,失败即定位:
控制台日志含义失败时优先排查
WebKit base: 0x...用户态基址推导成功OFFSET_wk_host_constructor_candidates
Kernel: base 0x...KASLR 泄露成功kaslr.retStatic/retLow16
read and write readyoid 窗口内核读写建立KRW.oid各字段
fast read and write readypipe 快速读写建立KRW.pipe/KRW.filedesc*
privileges ready提权完成KRW.ucred/KRW.dynlib
elfldr is listening on port 9021payload 加载器就绪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 ambiguousworker 指纹不唯一OFFSET_lk_worker_wait_return、OFFSET_lk__thread_list
kaslr: author+184 = 0x... not expected返回地址校验值过期KRW.kaslr
did not define window.KRWoffsets 文件没挂全局对象文件名必须与版本号完全一致

收尾清单 📋

  • 新文件命名与固件版本号逐字符一致(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

项目地址:https://gitcode.com/gh_mirrors/re/Relapse-Exploit
点击查看免费下载

相关推荐

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

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

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

立即咨询