mstan/xboxlle-probe

GitHub: mstan/xboxlle-probe

一个用于在真实初代 Xbox 上执行低级硬件探测和数据采集的代理工具,供模拟器开发者将模拟行为与实际硬件测量结果进行对比验证。

Stars: 0 | Forks: 0

# xboxlle-probe 一个小型的 [nxdk](https://github.com/XboxDev/nxdk) 自制程序代理和主机端 Python 客户端, 用于观察真实的初代 Xbox。它最初是作为 `xboxlle` 的硬件预言机组件而诞生的: 模拟器的行为可以与实际硬件的测量结果进行比较,而不是 基于假设或另一个模拟器。 Xbox 运行 `xboxlle-probe.xbe`,它会监听 TCP 端口 4380。然后主机客户端可以: - 识别正在运行的代理和 Xbox 内核; - 运行带有 JSON 输出的、命名的只读 CPU 和 NV2A 探测; - 读取受保护的 RAM、NV2A/MCPX MMIO 以及选定的 flash 范围; - 将允许的范围批量读取到主机文件中; - 在明确启用的不安全模式下,写入 RAM/MMIO 或执行上传的 x86 负载; - 启动另一个 XBE 或返回到 dashboard。 命名的探测是面向人类和 AI 代理的预期接口。原始内存操作 是为硬件研究而存在的,但它们是高风险工具。 ## 安全模型 该项目减少了意外误用;它并不能使底层硬件访问变得安全。 - Xbox 会显示警告,并在打开其监听器之前进行等待。 - 在该 TCP 会话发送确切的启用短语之前,每个原始读取、转储、写入、执行和标题控制请求都会被拒绝。 - 主机客户端在执行危险操作之前需要 `--i-accept-the-risk`。 - 直接读取和写入会进行范围检查。`WRITE` 绝不接受 flash 写入。 - 命名的探测使用一小部分固定的寄存器,这些寄存器已在一台 Xbox v1.1 上经过测试。 这些措施是护栏,而不是安全边界。`EXEC` 有意运行任意 x86 机器码,这可以绕过每个范围检查并访问存储或 flash。 只读 MMIO 并非普遍无害:某些硬件寄存器具有读取副作用, 错误的地址仍然可能导致机器死机。 在运行代理之前,请阅读 [SECURITY.md](SECURITY.md)。 ## 要求 - 一台已经能够运行未签名自制程序的初代 Xbox。 - 一个由 Xbox 和主机计算机共享的私有、受信任的 LAN。 - [nxdk](https://github.com/XboxDev/nxdk) 及其前置条件以构建 XBE。 - 主机上安装了 Python 3.9 或更高版本。 - 一种 dashboard 或其他既定方法,用于传输和启动 XBE。 本项目不会绕过 Xbox 安全机制、安装软破解,或提供 Microsoft 固件、 密钥、EEPROM 内容、BIOS 镜像、dashboard 或其他受版权保护/主机专属的材料。 ## 构建 递归克隆 nxdk,激活其环境,并将此 Makefile 指向它: ``` git clone --recursive https://github.com/XboxDev/nxdk.git git clone https://github.com/mstan/xboxlle-probe.git export NXDK_DIR="$PWD/nxdk" eval "$("$NXDK_DIR/bin/activate" -s)" make -C xboxlle-probe -j ``` XBE 生成为: ``` xboxlle-probe/bin/default.xbe ``` 仓库 CI 固定了记录在 `.nxdk-version` 中的 nxdk 版本。当测量结果 必须可复现时,建议进行固定。 ## 安装与启动 使用你现有的自制程序工作流将 `bin/default.xbe` 复制到你的 Xbox。例如, 将其放置在: ``` E:\Apps\xboxlle-probe\default.xbe ``` 从你的 dashboard 启动它。屏幕将显示危险警告,等待 8 秒, 初始化网络,并显示其 IP 地址和监听端口。 提供了一个可选的 FTP 部署命令,但它会写入 Xbox 存储,因此 需要明确的风险接受确认: ``` python host/xbox_probe.py \ --host 192.168.1.50 \ --i-accept-the-risk \ deploy bin/default.xbe \ --ftp-user xbox ``` 除非提供了 `--ftp-password` 或 `XBOX_PROBE_FTP_PASSWORD`,否则将通过交互方式请求密码。不要将密码放在脚本、shell 历史记录、Git、 issues 或探测结果中。 ## 使用 显式设置地址。客户端故意没有内置 Xbox IP: ``` export XBOX_PROBE_HOST=192.168.1.50 ``` 检查连接性和元数据: ``` python host/xbox_probe.py ping python host/xbox_probe.py info ``` 运行固定的只读探测: ``` python host/xbox_probe.py probe cpu python host/xbox_probe.py probe nv2a ``` CPU 结果示例: ``` {"probe":"cpu","agent":"xboxlle-probe v0.3.0","vendor":"GenuineIntel","max_leaf":2,"signature":"0x0000068a","features_edx":"0x0383f9ff","features_ecx":"0x00000000"} ``` 受保护的原始读取(仍然危险——v0.1 曾因错误读取导致真实硬件死机): ``` python host/xbox_probe.py --i-accept-the-risk read 0xfd000000 4 ``` 将允许的范围批量读取到本地文件: ``` python host/xbox_probe.py \ --i-accept-the-risk \ bulk-read 0xff000000 262144 \ --output flash.bin ``` 所有原始或更改状态的命令都需要主机标志和会话启用: ``` python host/xbox_probe.py --i-accept-the-risk write 0x00011000 90909090 python host/xbox_probe.py --i-accept-the-risk exec payload.bin ``` 对于原始读取、转储、写入、执行和标题控制,主机客户端会打开一个新的 TCP 会话,发送 `ARM I_ACCEPT_THE_RISK`,验证 `ARMED` 响应,然后才发送危险的 请求。该短语是一个防止意外的护栏,**而不是身份验证**。 ## AI 辅助使用 AI 代理在与硬件交互之前应阅读 [AGENTS.md](AGENTS.md)。核心 规则是: 1. 绝不通过网络扫描来发现或猜测 Xbox IP。 2. 要求人类识别目标主机,并确认探测它是安全的。 3. 优先使用 `ping`、`info` 和固定的命名探测。 4. 未经人类对该确切操作的明确授权, 不得部署、写入、启动、转储或执行代码。 5. 在经过审查和清理之前,将所有硬件结果视为潜在的私密信息。 适合用于编写其他客户端的协议详细信息在 [docs/PROTOCOL.md](docs/PROTOCOL.md) 中。 关于原始硬件会话的清理报告位于 [docs/ORIGIN.md](docs/ORIGIN.md) 中。 ## 开发 主机端测试不需要 Xbox: ``` python -m unittest discover -s tests -v ``` 测试套件使用本地模拟 TCP 代理来验证组帧、批量传输和不安全 会话启用。 ## 许可证 MIT。请参阅 [LICENSE](LICENSE)。 该软件以 **“原样”提供,不提供任何形式的保证**。使用风险由您自行承担。
标签:nxdk, Python, Xbox自制程序, 云资产清单, 并发处理, 无后门, 硬件探针, 硬件测试, 系统底层, 逆向工具, 逆向工程