☰
PS5 WebKit Autoloader补丁拆解:三大WebKit漏洞如何被改造出?autoload自动加载能力
2026/10/16 10:18:43 网站建设 项目流程

【免费下载链接】ps5-webkit-autoloader

An automated payload loader for exploited PS5 consoles

项目地址:https://gitcode.com/gh_mirrors/ps/ps5-webkit-autoloader
点击查看免费下载

PS5 WebKit Autoloader 是一款面向越狱 PS5 主机的离线 payload 自动加载工具:它一次性把三条 WebKit 漏洞利用链(umtx2、Poops/slopkit、Relapse)连同补丁后的前端打包进主机,之后无需 PC、无需第三方 DNS,从主界面图标点一下就能跑完整个漏洞链并自动把 payload 送进 elfldr。本文拆解项目中 patches/ 目录下的三个 autoload 补丁,看看官方利用链是如何被"最小化改造"出?autoload自动加载能力的。

为什么需要离线 PS5 自动加载

传统 WebKit 利用链的玩法是:把 PS5 的 DNS 指向某个公网服务器,打开官方手册页触发漏洞,再用电脑向127.0.0.1:9021的 elfldr 手动发送 payload。这条链路有两个痛点:

  • 依赖第三方服务器:服务器一挂或一变更,整套设置立刻失效;
  • 每次都要手动操作:手动发 payload、按 R2 键触发后续步骤,无法无人值守。

PS5 WebKit Autoloader 的思路是:一次性安装后,所有漏洞资源缓存在本机(AppCache),漏洞链在主机内部闭环运行,payload 由漏洞页面自己发给本机的 elfldr。安装完成后主界面会出现WebKit Autoloader应用(内部代号WKAL00001),支持固件 1.00–5.50 与 7.00–13.60。

固件对照表:三大 WebKit 利用链如何选型

项目内置三条利用链,前端根据浏览器 User-Agent 中的固件号(PlayStation 5/x.xx)自动选择,逻辑写在 frontend/autoloader/app.js 中:

利用链适用固件运行条件补丁文件
umtx21.00 – 5.50完全离线patches/umtx2-autoload.patch
Poops(slopkit)7.00 – 12.00完全离线patches/slopkit-autoload.patch
Relapse7.00 – 13.60(除 9.05 / 11.40)需联网网卡(Wi-Fi/有线,无需外网)patches/relapse-autoload.patch

在双链都支持的固件(7.00–12.00)上,安装页面会先让你选择缓存 Poops 还是 Relapse。三条链最终殊途同归:运行漏洞 → 拉起 elfldr(9021 端口)→ 自动发送payload.elf。

⚠️ 关键理念:这三个补丁不修改漏洞本身,只把官方利用链的"手动交互步骤"替换为无人值守的自动步骤。原版利用链以只读子模块形式固定在 third_party/ 中,永远保持 pristine(未修改)状态。

补丁一:umtx2(FW 1.00–5.50)——事件合成实现自动发送

umtx2 补丁(见 patches/umtx2-autoload.patch)改动 umtx2/main.js 的拷贝,核心有三处:

  1. 给文件加载函数加base参数:load_local_elf和load_payload_into_elf_store_from_local_file原本写死从payloads/目录取文件,补丁允许传入自定义基础路径,使自动加载的 payload 可以从../payloads/(版本化应用目录下的共享目录)读取,而不必复制 fetch 逻辑;
  2. 屏蔽 confirm() 弹窗:原版在"elfldr 未运行"或"elfldr 已运行是否跳过内核漏洞"时会弹确认框,自动加载场景下这些对话框全部被替换为日志输出,保证链式运行不被打断;
  3. 合成按钮点击事件:页面以?autoload=payload.elf打开时,等待 4 秒让 elfldr 绑定 9021 端口,然后派发一个合成的MAINLOOP_EXECUTE_PAYLOAD_REQUEST自定义事件,携带{fileName, toPort: 9021, wkalAutoload: true}——主循环处理它与用户真正按下按钮完全相同的路径。发送成功/失败都会通过postMessage把结果{ok, bytes}或{ok, why}报回父页面。

这个"事件合成"手法是全文最值得学习的设计:不去改主循环,而是伪装一次用户操作,兼容性最好、对原链侵入最小。

补丁二:slopkit / Poops(FW 7.00–12.00)——轮询连接替代固定等待

Poops 链的补丁(见 patches/slopkit-autoload.patch)同时改了poops.html和p2jb.html两个页面:

  • autoload查询参数:poops.html的cfg里新增autoload字段,并在exactQuery精确参数校验中放行(否则这个额外参数会导致查询匹配失败、链拒绝启动);
  • 轮询式就绪探测:新增elfldrAccepting()函数——直接用漏洞获得的 syscall 能力对127.0.0.1:9021发起connect(),只有 elfldr 真正 accept 连接时才成功。startAutoload()以200ms 间隔、最多 50 次(约 10 秒上限)轮询,替代"猜一个固定等待时间"的脆弱做法;
  • 隐藏菜单项 + 复用发送通道:在 payload 菜单里注册了一个hidden: true的payload.elf条目,发送走原有的sendPayloadToElfldr(name, base)(补丁给它加了base目录参数),从../../payloads/取共享 payload;
  • "Already jailbroken" 保护:若探测发现 9021 端口已有 elfldr 在监听,自动加载模式直接上报失败(主机已越狱,无需再跑链),非自动加载模式则照旧打开手动菜单;
  • 二进制路径统一:elfldr-ps5.elf与kexp-ps5.bin改为从共享目录../../shared/加载,避免每个利用链各带一份重复二进制。

补丁三:Relapse(FW 7.00–13.60)——零二进制修补与 R2 步骤替换

Relapse 补丁(见 patches/relapse-autoload.patch)涉及src/main.js和src/kexp.js,是三者中改造最深的:

  • 内核漏洞前的早期探测:新增isElfldrListening(p, chain),在跑内核漏洞之前先用 socket 探测127.0.0.1:9021;若 elfldr 已在监听则直接报 "Already jailbroken." 退出,避免重复拉起;
  • ?autoload=<name>替代 R2 键:原版 Relapse 跑完链后要用户按 R2 触发 kstuff/shadowmountplus/etaHEN 菜单。补丁里,若 URL 带?autoload=payload.elf,内核链把 elfldr 拉起后直接调用startAutoload()发送 payload 并回报字节数;不带该参数时原版 R2 路径完整保留;
  • 零二进制修补(Zero Binary Patching):原版kexp.js在内存中逐字节修补 shellcode(写入解析好的函数地址),补丁将其整体删除——改为通过标准KXP2API 表扩展(payload 参数中写入魔数0x4b585032、表长度、预解析符号表指针)把预解析函数指针传给kexp-ps5.bin,kexp 二进制原样运行,与 Poops 的契约一致;
  • 移除缓存破坏器:原版给 offsets 脚本加?v=+Date.now()查询串,但 AppCache 按完整 URL(含查询串)匹配,动态查询串会让缓存永远 miss。补丁改为纯 URL,因为整个应用已按版本目录(/app/<version>/)部署,每个构建天然拥有稳定的缓存键。

通用集成协议:三条链共享的"契约"

三个补丁虽然针对不同链,但共同实现了一套极简的集成契约(详见 ARCHITECTURE.md):

  • 入口参数:iframe 以?autoload=payload.elf打开(Poops 链还有go=1&auto=1&production=1等启动参数);
  • 虚拟文件名payload.elf:它不是固定的文件,而是按环境变化的"插槽"——PC 主机流程下发的是安装器 ELF,主界面应用下发的则是ps5-unified-autoloader(统一的 payload 入口,再按autoload.txt或 Payload Manager 分发你的负载);
  • 结果回报:iframe 通过window.parent.postMessage发送{type:"wkal", kind:"autoload", ok, bytes}或{ok:false, why},父页面的 app.js 据此推进进度条、输出日志;
  • 安全收敛:FW 7.00–13.60 使用只接受本机连接的 elfldr 变体(从 tools/download_deps.sh 固定版本拉取并校验 sha256),防止局域网内其他设备向 9021 端口投递 payload;umtx2 则沿用自带 elfldr。

构建时,Makefile 会自动执行 tools/apply_relapse_patch.sh、tools/apply_slopkit_patch.sh、tools/apply_umtx2_patch.sh:从 pristine 子模块拷贝一份到frontend/autoloader/、裁剪无关文件、git apply补丁,最后用一系列grep标记校验 + tools/check_exploit_js.py 按 ES Module 严格模式做语法检查——补丁若因上游更新而失效,会在构建期就报错,而不是等到主机上才崩。

安装与使用:两种方式一键上手

方式一:主机已越狱——下载发布页的webkit-autoloader-installer_vX.Y.Z.elf,用 elfldr 或 Payload Manager 发送到主机。安装器打开浏览器缓存一次前端、创建主界面WebKit Autoloader应用后退出;重启一次,以后直接点图标即可。

方式二:尚未越狱——在 PC 上运行发布页的webkit-autoloader-host.py(源码见 pc-host/host.py),它在本机绑定 53/443 端口,用自签名证书伪造manuals.playstation.net;把 PS5 的 DNS 指向该 PC,打开设置里的User's Guide即可触发安装流程。

两种安装完成后,payload 有两种配置方式:

  • 🟢Payload Manager:未配置autoload.txt时自动启动这个带 Web UI 的负载管理器,浏览器里直接配置和发送;
  • ⚙️手动配置:在 U 盘根目录或主机/data/ps5_autoloader目录放置.elf/.bin文件和autoload.txt(每行一个文件名,支持!1000这类等待指令,文件名大小写敏感)。找到autoload.txt时 Payload Manager 不会自动启动。

更新版本与首次安装步骤完全相同:重新跑一遍安装流程即可,已有的 payload 与autoload.txt不受影响。

核心文件速查

路径说明
patches/umtx2-autoload.patchumtx2 链自动加载补丁(事件合成方案)
patches/slopkit-autoload.patchPoops 链自动加载补丁(轮询连接方案)
patches/relapse-autoload.patchRelapse 链自动加载补丁(KXP2 API 表方案)
frontend/autoloader/app.js固件识别、链选择与日志镜像
src/http_server.c、src/app_installer.c安装器 ELF 的 HTTP 服务与WKAL00001应用创建
pc-host/host.py未越狱场景的 PC 侧 DNS/HTTPS 主机
tools/apply_relapse_patch.sh 等补丁应用与构建期校验脚本
ARCHITECTURE.md完整的架构与缓存布局文档

总结

PS5 WebKit Autoloader 的三个补丁给出了一个教科书式的"最小侵入集成"范式:原链不动、交互替换、参数驱动、结果可观测。?autoload参数 + 9021 端口 elfldr +postMessage回报,这套不到几十个参数的契约同时覆盖了低版本内核链(umtx2)、中期链(Poops)和最新链(Relapse),让整个项目对上游漏洞更新保持了很高的可维护性——上游一变,只需重新生成对应 patch 文件即可。

【免费下载链接】ps5-webkit-autoloader

An automated payload loader for exploited PS5 consoles

项目地址:https://gitcode.com/gh_mirrors/ps/ps5-webkit-autoloader
点击查看免费下载

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

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

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

立即咨询