3

我想在 Windows 上设置一个在线法官(自动测试软件;获取潜在的恶意代码并在其上运行几个测试),但此类软件通常是为 *nix 系统编写的,因为在那里对代码进行沙箱处理要容易得多。目前看来我必须自己写。

  1. 如何编译 C++ 代码以防止除 stdin/stdout 之外的任何行为?
  2. 如何在只允许执行 stdio 的环境中运行可执行文件?

我考虑过从.libVisual Studio 标准设置中删除一些头文件,但恐怕在技术上仍然可以执行 WinAPI 调用。

另外,我可以再创建一个操作系统用户,在管理控制面板中设置一些权限,并runas从该用户那里获得可执行文件以获得“安全”环境,但我不擅长管理,不知道是否可以提供仅程序标准输出权限。

4

1 回答 1

3

由于这类问题将成为各种不同方面的一些相当“糟糕”代码的目标,我建议一个可能的解决方案是使用虚拟机来运行“外来”代码。因此,与其构建在真实硬件上执行操作的服务器软件(并可能出于恶意目的搞砸或接管机器),不如在资源有限且规则严格的虚拟机上运行代码。“结果”完成后,您关闭该 VM,并从“新”VM(通过克隆先前构建的 VM 创建)重新开始。

是的,删除库和标头肯定不会阻止某人使用您不想使用的调用/功能。它会使它变得更难一点,但只有一点点。大多数“有害”调用都在系统win32.dll中,您还需要系统 I/O 和类似的东西。

于 2013-09-07T17:10:01.010 回答