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 主机地址:

该配置文件将被放置在 `~/.yorhadbg.ini` 中。配置文件创建完成后,你就可以进行连接了。
## 暂停(Pause)
第一个实用的命令是 `pause`,它会在软件断点处将调试器陷入 trap,并将控制权转移给 trap 处理程序的 callgate。一旦调试器处于暂停状态,你就可以检查当前的线程状态、设置断点以及执行其他操作。在执行暂停命令后,它会立即在内部发出 `context` 命令。

## 上下文(Context)
顾名思义,context 命令提供有关当前线程状态的信息,包括寄存器值和当前代码的反汇编。其输出与 `pause` 命令相同,因为 context 会隐式调用 pause。
## 内存读取(Memread)
有了 `memread`,事情就开始步入正轨了。此命令允许你读取内存内容,并包含用于将数据转储到磁盘或将其显示为 hexdump 的修饰符。可用的修饰符有:
- --output, -o
- 将输出保存到文件中。
- --count, -c
- 指定要读取的字节数。

## 内存写入(Memwrite)
通过 `memwrite`,你可以将数据写入某个内存区域。你可以直接在命令行中指定数据,也可以从磁盘上的文件加载数据。可用的修饰符有:
- --bytes, -b
- 直接从 CLI 写入内容。对于原始字节请使用 `\x41\x42` 表示法,如有需要,你可以混合使用这两种表示法。
- --input, -i
- 将文件内容写入指定的地址。
直接从终端写入数据:

从磁盘文件写入数据:
||
|:--:|
| 从文件写入数据 |
## 反汇编(Disas)
使用 `disas`,你可以从指定地址开始反汇编指令。可用的修饰符是:
- --count, -c
- 指定要显示的***指令***数量。

## 断点(Breakpoint)
使用 `break` 命令,你可以在指定的内存地址设置断点。如果你已经停在某个断点处,可以使用 `continue` 命令恢复执行:

要删除断点,请使用带地址作为参数的 `breakdel` 命令。
## 单步执行(Single Step)
要对已暂停的线程执行单步调试,请使用 `step` 命令,该命令会在内部调用 context 命令。然后你可以照常使用 `continue` 恢复执行。
## 加载内核 payload
你可以使用带有 `--path` 参数的 `load_kpayload` 命令来加载内核 payload,参数需指定 payload 在磁盘上的路径。YoRHa 会加载该 payload 并在其入口点处停止,从而让你能够轻松地对其进行调试:

## 设置线程状态
你可以使用 `setr` 命令修改当前线程的寄存器,并将要修改的寄存器指定为参数。例如:

所有未指定的寄存器将保持不变。
# 总结
正如我之前所写,我做这个项目是为了学习更多关于 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, 云资产清单, 内存读写, 内核安全, 内核模式, 内核补丁, 内核调试器, 客户端加密, 底二进制分析, 断点, 流量嗅探, 游戏机破解, 漏洞利用开发, 网络安全, 逆向工具, 逆向工程, 隐私保护, 高性能