buzzer-re/YoRHa

GitHub: buzzer-re/YoRHa

YoRHa 是一个运行在内核模式下的 PlayStation 4 网络内核调试器,支持断点、内存读写、单步执行等功能,用于调试内核 payload、漏洞利用开发及 PS4/FreeBSD 内核逆向研究。

Stars: 39 | Forks: 6

# YoRHa - PS4 KDebugger YoRHa 是一个正在开发中的 PlayStation 4 网络内核调试器。它支持基本操作,例如设置断点、读/写内存、管理线程状态等。该工具对于调试内核 payload、漏洞利用开发以及深入了解 PS4 内核内部结构非常有用。 该调试器设计为在内核模式下运行,需要内核 payload 加载器(例如 Mira)才能在内核级别执行 payload。 ## 功能特性: 目前支持的命令相当直观: - memread - 从指定的内存区域读取 N 个字节,并将结果显示为 hexdump 或保存到磁盘。 - memwrite - 向指定的内存区域写入 N 个字节。 - break - 在指定地址设置软件断点(int3)。 - breakdel - 删除先前设置的软件断点。 - pause - “暂停”当前的 YorhaDBG 线程以触发 trap 处理程序。 - 注意:系统并未完全冻结,因为某些网络组件需要继续工作。 - step - 执行单步执行(仅执行一条指令)并将控制权返回给调试器。 - load_kpayload - 加载内核 payload 并将调试器附加到其中 - context - 显示当前已暂停或陷入 trap 的线程(来自断点)的状态。 - setr - 修改当前已停止线程的寄存器。 ## 用例与初衷 我专门构建此调试器是为了更深入地了解 PS4/FreeBSD 的内部机制,并用于调试和解包私有的 HEN payload(例如 GoldHEN)。虽然也有其他类似 [Ring0GDB](https://github.com/m0rph3us1987/triggerRING0) 的项目创建了 GDB stub,允许使用任何与 GDB 协议兼容的工具,但我还是希望设计自己的协议和功能。 此调试器可用于调试漏洞利用程序、测试内核补丁以及辅助内核 payload 的开发。 ## 支持的固件版本 目前支持以下固件版本: * 9.0 * 9.03 ## 移植说明 移植此调试器相当简单,因为唯一的固件依赖项就是偏移量,这些偏移量可以在 `include/firmware/` 目录中找到。请参考 [fw900.h](include/firmware/fw900.h) 作为示例。在添加对新固件版本的支持后,请务必相应地更新 [offset.h](include/firmware/offset.h) 头文件。 # 安装说明 ## 编译 当我最初开始编写此调试器时,我使用 ps4sdk 项目来构建它。不过现在你只需简单地使用 ***make*** 即可完成构建 1 - 克隆仓库及其依赖项 2 - 编译它 生成的 payload 将是 ```Yorha_900.bin```。 ## 工作原理 在 YoRHa 的初始化期间,它会用一个自定义处理程序覆盖 IDT 的调用门 3,使其能够管理系统中的断点事件。YoRHa 在两个不同的端口上运行:控制器端口为 8887,调试器端口为 8888。即使线程陷入 trap,控制器端口也依然保持可用状态。 ## 安装说明 如前所述,要使用该调试器,必须首先在内核模式下加载 payload。我强烈建议使用 [Mira](https://github.com/OpenOrbis/mira-project) "CFW",因为它提供了增强的调试功能,包括读取日志消息(端口 ***9998***)的能力以及端口 ***9025*** 上的内核模块加载器。如果你无法使用 Mira,我推荐使用带有 ***BinLoader-9021*** payload 的 [Kameleon](https://www.kmeps4.site/900/kme900mfull/index.html) 漏洞利用宿主。只需将 ***Yorha.bin*** 发送到它们其中一个,它就会开始在端口 ***8887*** 上监听 目前,YoRHa 尚无法由用户模式的 binloader 加载,但未来的版本将具备以此方式(如 GoldHEN)加载并迁移至内核模式的能力。 # 使用 CLI 我开发了一个简单的 CLI 工具来与调试器进行交互。虽然这个工具并不是最终的版本——因为我计划为其构建一个 GUI 应用程序——但它仍然非常有用且操作简单。其源代码位于 `cli/` 文件夹中,你可以轻松地通过 `pipenv` 来使用它。 安装 `pipenv` 并同步依赖包(仅在首次使用时需要) 执行主脚本: ## 连接 在首次使用时,YoRHa 会创建一个简单的配置文件,其中包含你的 PS4 主机地址: ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/6e0cd6d673023900.png) 该配置文件将被放置在 `~/.yorhadbg.ini` 中。配置文件创建完成后,你就可以进行连接了。 ## 暂停(Pause) 第一个实用的命令是 `pause`,它会在软件断点处将调试器陷入 trap,并将控制权转移给 trap 处理程序的 callgate。一旦调试器处于暂停状态,你就可以检查当前的线程状态、设置断点以及执行其他操作。在执行暂停命令后,它会立即在内部发出 `context` 命令。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/9656d1da66023901.png) ## 上下文(Context) 顾名思义,context 命令提供有关当前线程状态的信息,包括寄存器值和当前代码的反汇编。其输出与 `pause` 命令相同,因为 context 会隐式调用 pause。 ## 内存读取(Memread) 有了 `memread`,事情就开始步入正轨了。此命令允许你读取内存内容,并包含用于将数据转储到磁盘或将其显示为 hexdump 的修饰符。可用的修饰符有: - --output, -o - 将输出保存到文件中。 - --count, -c - 指定要读取的字节数。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/822ae3e9ff023902.png) ## 内存写入(Memwrite) 通过 `memwrite`,你可以将数据写入某个内存区域。你可以直接在命令行中指定数据,也可以从磁盘上的文件加载数据。可用的修饰符有: - --bytes, -b - 直接从 CLI 写入内容。对于原始字节请使用 `\x41\x42` 表示法,如有需要,你可以混合使用这两种表示法。 - --input, -i - 将文件内容写入指定的地址。 直接从终端写入数据: ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/5779a99418023903.png) 从磁盘文件写入数据: |![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/2c594cf091023905.png)| |:--:| | 从文件写入数据 | ## 反汇编(Disas) 使用 `disas`,你可以从指定地址开始反汇编指令。可用的修饰符是: - --count, -c - 指定要显示的***指令***数量。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/42154481cd023906.png) ## 断点(Breakpoint) 使用 `break` 命令,你可以在指定的内存地址设置断点。如果你已经停在某个断点处,可以使用 `continue` 命令恢复执行: ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/f7e12d13dd023909.png) 要删除断点,请使用带地址作为参数的 `breakdel` 命令。 ## 单步执行(Single Step) 要对已暂停的线程执行单步调试,请使用 `step` 命令,该命令会在内部调用 context 命令。然后你可以照常使用 `continue` 恢复执行。 ## 加载内核 payload 你可以使用带有 `--path` 参数的 `load_kpayload` 命令来加载内核 payload,参数需指定 payload 在磁盘上的路径。YoRHa 会加载该 payload 并在其入口点处停止,从而让你能够轻松地对其进行调试: ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/2d4ce95207023910.png) ## 设置线程状态 你可以使用 `setr` 命令修改当前线程的寄存器,并将要修改的寄存器指定为参数。例如: ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/6e03dc69aa023911.png) 所有未指定的寄存器将保持不变。 # 总结 正如我之前所写,我做这个项目是为了学习更多关于 PS4 工作原理的知识,并提高我在主机破解方面的技能。在我的研究中,还有很多很酷的功能值得去探索和提取,这些功能同样适用于 PS4 和 PS5。我想感谢以下对我帮助极大的项目和资源: - [Mira](https://github.com/OpenOrbis/mira-project) - 我广泛阅读了这个令人惊叹的项目的源代码。这是一个用于学习和提高的绝佳资源。它还包含了 Ring0GDB 的源代码。 - [PPPWn](https://github.com/TheOfficialFloW/PPPwn/) - PPPWn 漏洞利用的源代码从漏洞利用的角度来看也是一个很好的阅读资源,而且它的 payload 源代码读起来也相当有趣,特别是像 [LightningMods](https://github.com/LightningMods/PPPwn/tree/master/stage2) 这样的分支版本。 - [PSDevWiki](https://www.psdevwiki.com/) - 这个 Wiki 上有大量我曾广泛使用过的优质资料。 - [OpenOrbis](https://github.com/OpenOrbis) - OpenOrbis 社区包含了大量的资料以及经过整理的 FreeBSD 头文件供开发者使用。这是一个极佳的资源。 -- 以上就是全部内容 --
标签:0day挖掘, API接口, Bro, Findomain, FreeBSD, GoldHEN, Mira, Payload开发, PS4, 云资产清单, 内存读写, 内核安全, 内核模式, 内核补丁, 内核调试器, 客户端加密, 底二进制分析, 断点, 流量嗅探, 游戏机破解, 漏洞利用开发, 网络安全, 逆向工具, 逆向工程, 隐私保护, 高性能