c - 禁用 WinAPI

标签 c winapi dll

我正在构建一个游戏,每个玩家都必须为自己的机器人编程。关键思想是玩家将使用 C(或 C++,或任何兼容语言)进行编程,构建一个 DLL 并将此 DLL 发送到服务器,这样就没有人可以得到他的代码。问题是:如何确定他没有调用任何非法函数?就像创建文件或打开套接字一样。 DLL 将使用 LoadLibrary 加载并调用一个函数。所有交互都将通过回调函数进行。一个可能的解决方案是放置一个空的 kernel32.dll(和其他),这样所有的 winapi 调用都会失败。这是否安全并且适用于所有情况?有更好的方法吗?

请注意,玩家线程(也就是所谓的 dll)必须仍然能够与游戏进行通信,也许是通过一个打开的套接字。在 Linux 上,这可以通过 seccomp 轻松完成。 .

最佳答案

最好的办法是创建一个权限较低的用户,这样您就可以很容易地控制文件访问,并在以该用户身份运行的子进程中运行机器人代码。

如果你也想限制网络连接,也很容易设置防火墙,使上述进程无权连接到外部主机。

如果您需要更多地控制允许或不允许哪些 API 调用,可以使用一种称为“通过 DLL 重定向进行 API 拦截”的技术,例如在此处进行说明:

http://109.163.225.194/download/files/other/DLL_Redirection_en.pdf

(通过谷歌找到)

关于c - 禁用 WinAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12320763/

相关文章:

c - 存储比堆更多的字节

c - 在 C 上使用 fork 进程失败 while 循环

c# - 使用 C# dll 时,C++ 应用程序无法初始化 (0xc0000005)

C 指针 : char to binary value

c - fork 、共享变量和处理僵尸进程

c# - SetWindowsHookEx 对媒体键没有反应

winforms - 如何使用 Windows 窗体在窗口标题栏中绘制自定义按钮?

c++ winapi,获取 ListView 标题文本

python - 启动 exe 时加载 Python dll : python35. dll 时出错(错误代码 193)

c++ - 为什么构建没有预编译头文件的 DLL 在使用时会出现奇怪的错误?