thyrn90/tartarus-hobby-os
GitHub: thyrn90/tartarus-hobby-os
一个实验性的无 hypervisor 的 Ring-0 裸机操作系统,用于底层硬件研究和 PE 可执行文件在裸机环境下的动态加载、执行与逆向分析。
Stars: 0 | Forks: 0
# Tartarus
**严重警告:请勿在物理硬件(裸机)上运行**
*注意:本项目目前正处于积极开发阶段。*
这是一个实验性的、运行于 Ring-0 的业余操作系统,从零开始构建,旨在用于底层硬件研究和逆向工程。它会直接操纵物理内存、PCI 总线和 CPU 寄存器,且没有任何安全保护机制。在物理硬件上运行此系统可能会导致严重的系统不稳定、永久性数据丢失或硬件损坏。
**务必仅在 QEMU 或类似虚拟机中运行。**
## 概念
Tartarus 不是面向消费者的操作系统,也不是商业沙盒。它是一个定制的、无 hypervisor 的内核,完全在 Ring-0 下运行。通过剥离现代操作系统的抽象层,它提供了一个裸机环境,可以直接在 CPU 上执行、操纵和分析复杂的可执行文件(PE / 原始二进制文件)。
## 核心架构
完全使用 C 和 x86_64 汇编写成。在初始引导序列之后,内核会自行管理硬件接口,而无需依赖外部库或 UEFI 运行时服务。
* **中断处理:** 针对硬件异常(#GP、#PF、#DB)的自定义汇编包装器,采用了极简的 GDT/IDT 设置。
* **内存管理:** 解析 UEFI 内存映射,并使用支持块分割与合并的自定义动态堆分配器。
* **硬件枚举:** 直接扫描 PCI/PCIe 总线以及读取 ATA 驱动器的原始扇区。
* **原生文件系统:** 内置 FAT32 解析器,可直接从磁盘提取并执行二进制文件。
## 子系统
Tartarus 包含特定的机制,旨在 Ring-0 真空环境中操纵外部加载的程序。
### 动态 PE 执行引擎
Tartarus 不依赖静态入口点。它将 PE 节动态映射到虚拟内存中,扫描 MSVC 和 GCC (MinGW-w64) 编译器签名,并绕过标准的 CRT 样板代码,将执行流精准定位在原始的 `main()` 函数处。
### 缺页拦截与 IAT Hook
目标可执行文件经常会查询缺失的 API 或尝试写入受限内存。Tartarus 不会崩溃,而是拦截缺页(#PF)并 hook 导入地址表(IAT)。
* **自定义 PEB/LDR 链:** 构建一个循环双向链接的虚假 PEB/LDR 链,用于注入合成的 `ntdll.dll` 和 `KERNEL32.DLL` 模块。
* **动态 Trampoline:** 为拦截到的 API 调用即时编译 x86_64 汇编 trampoline。
* **Amnesia Stub:** 一片专用的物理内存区域 (0x06000000),填充了 `xor rax, rax; ret` 指令。当目标可执行文件尝试访问未授权或缺失的函数时,Tartarus 会将指令指针(RIP)重定向至此,为程序输入“失忆”数据,从而维持执行流继续运行。
### 硬件级调试器
利用 x86_64 调试寄存器(DR0-DR7)和自定义的向量 1 (ISR1) 处理程序来实现 Trap Flag(单步)执行。它包含一个内置的陷阱机制,可捕获硬件监控点,并将实时 CPU 寄存器状态(RAX、RBX、RCX 等)直接输出到 framebuffer。
## 从源码构建
**编译器警告:** 你必须使用 GCC(在 Windows 上使用 MinGW-w64 或在 Linux 上使用标准 GCC)。切勿使用 MSVC。Tartarus 重度依赖 GCC 特有的 GNU 内联汇编(`__asm__ volatile`)以及 `__attribute__((naked))` 指令来进行 Ring-0 状态操纵,而 MSVC 不支持在 x64 目标上使用这些特性。
需要交叉编译工具链和 `gnu-efi`。
```
# 1. 编译 core ASM interrupt wrappers
nasm -f win64 src/isr.asm -o src/isr.o
nasm -f win64 src/trampoline.asm -o src/trampoline.o
```
# 2. 构建 Tartarus EFI 二进制文件
make
## 在 QEMU 中运行
**Tartarus 需要一个 FAT32 格式的磁盘镜像才能通过 UEFI 引导,并使用其原生的 fat32.c 驱动程序在本地解析 payload。**
* 创建一个 50MB 的 FAT32 磁盘镜像 (disk.img)。
* 将编译好的 BOOTX64.efi 复制到磁盘镜像内部的 EFI/BOOT/ 目录中。
* 将你的目标 payload(例如 subject.exe 或原始 shellcode)直接放入磁盘镜像的根目录。Tartarus 的剖析引擎会自动扫描并映射它找到的第一个有效可执行文件。
**使用 OVMF 固件通过 QEMU 运行:**
```
qemu-system-x86_64 -bios OVMF.fd -drive file=disk.img,format=raw -m 512M -vga std
```
**架构师:thyrn90**
**许可证:BSD 2-Clause**
标签:x86_64架构, 云资产清单, 内核开发, 客户端加密, 底层硬件研究, 操作系统开发, 身份验证强制, 逆向工程