### 做一个沙箱，有什么需要重定向的

1. 文件系统

这是最基本的重定向。一个恶意程序通常会读写文件、创建新文件或删除现有文件。你必须让它以为自己在操作真实的文件系统，但实际上，所有这些操作都被隔离在一个虚拟的、临时的环境中

- 重定向读写操作：
  - 拦截 `open`, `read`, `write`, `close` 等系统调用
  - 将所有对宿主机文件的访问重定向到沙箱内部的虚拟文件系统或一个特定的临时文件夹
  - 如果程序试图访问关键系统文件（如 `C:\Windows\System32`），应拒绝其请求或返回一个虚拟的、无害的版本

2. 注册表

在 Windows 环境下，注册表是恶意软件进行持久化和存储配置的关键

- 重定向注册表操作：
  - 拦截 `RegCreateKey`, `RegSetValue`, `RegOpenKey` 等注册表 API 调用
  - 将所有写入操作重定向到沙箱内存中的一个虚拟注册表
  - 当程序读取注册表时，先从虚拟注册表中查找，如果不存在，再从宿主机注册表读取，但绝不允许它修改宿主机注册表

3. 网络通信

恶意软件的另一大特征就是与外部服务器进行通信，例如下载其他恶意模块、发送窃取的数据或接收指令

- 重定向网络连接：
  - 拦截 `socket`, `connect`, `send`, `recv` 等网络系统调用
  - 你可以选择将所有网络连接完全禁止，或者将它们重定向到一个本地代理，由代理来记录和控制所有流量
  - 理想的沙箱会伪造 DNS 解析，将恶意域名指向一个本地 IP，然后让代理服务器来处理这些连接，从而捕获所有网络数据包，而不让它们真正离开宿主机

4. 进程与线程

许多恶意软件会创建新进程、注入代码或修改其他进程的内存以隐藏自身

- 重定向进程操作：
  - 拦截 `CreateProcess`, `CreateThread`, `InjectProcess`, `WriteProcessMemory` 等 API 调用
  - 沙箱应监控所有新创建的进程，确保它们也运行在受控环境中。
  - 对于进程注入，你可以直接拒绝这类行为，或者将其重定向到一个虚拟的环境，以防止对宿主机上其他进程的感染

5. 系统信息

为了躲避沙箱，恶意软件会查询系统信息来判断自己是否被监控。你需要对这些查询进行欺骗

- 重定向系统信息查询：
  - 拦截 `cpuid`, `GetSystemInfo` 等 API 调用
  - 当恶意程序查询 CPU 制造商、内存大小或系统时间等信息时，你需要返回虚假的值，让它以为自己在一个真实的物理机环境中。比如，将 `VMware` 制造商字符串替换为 `GenuineIntel`，或者让系统时间流逝得更慢

6. 渲染与屏幕

某些恶意软件可能会尝试截屏或与桌面环境交互

- 重定向屏幕操作：
  - 拦截 `GetDC`, `BitBlt` 等与屏幕渲染相关的 API
  - 你可以将截屏数据重定向到沙箱的临时文件，而不是让它访问真实的桌面内容