隐藏 运行 程序的所有痕迹

Hide all traces of a program that is running

所以我觉得这个问题很有趣。在我失去任何人的注意力或他们开始用手指指着我的脸指责之前:不,我没有制造或试图制造病毒。我实际上有一个非常好的游戏想法。这个游戏有点像令人毛骨悚然的意大利面 (http://en.wikipedia.org/wiki/Creepypasta),因为它会模仿 "haunted game" 的理想。此游戏启动时只会播放几秒钟,然后最终 "crashing" 返回桌面。正是在这个时候,我想隐藏它存在的所有痕迹(在后台仍然是 运行),以便我可以继续游戏的第 2 阶段。在此阶段,我会随机 window 控制一个控制台,或者每隔 arbitrary/random 播放一次令人毛骨悚然的音效。游戏会随机打开,好像它也有自己的想法,但每次发生这种情况时游戏都会不同。

我想在任务管理器中完全隐藏游戏。所以这个 window:

无论用户选择哪个选项卡,程序都不会显示任何内容。从字面上看,我希望游戏变成幽灵。我计划使用的编程语言是 C#,图形库是 OpenTK(这与这个问题无关,但我想确保我尽可能多地提供信息)。

有人有什么想法吗?哦,我还应该提到我对 .NET framework/api 相当流利,我可以手动构建任何 windows 表单应用程序(不使用编辑器)。

更新:

我只是想到了一个有趣的替代方法来隐藏它。答案是:让程序更智能。将程序发送到桌面,然后监听任务管理器的打开。如果它打开,我的程序会立即关闭任务管理器,并且游戏会在控制台中以 "But i thought you wanted to play with me? Why are you trying to kill me?" 之类的超级令人毛骨悚然的方式响应。听起来真棒。哈哈

我不是专家,但我认为大多数处理进程隐藏的技术都使用 CreateRemoteThread
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682437(v=vs.85).aspx

很难做到正确,但是有很多关于它的博客,例如:
http://resources.infosecinstitute.com/using-createremotethread-for-dll-injection-on-windows/

这通过选择一些已经是 运行 的受害进程来实现,例如 svchost.exe 并将您的线程添加到其中。

此外,在谈到 svchost 时,您也可以非常合法地注册服务并由此 windows 进程托管,您的客户可以通过调用列表命令看到 运行 游戏:

 tasklist /svc /fi "imagename eq svchost.exe"

或:
http://www.howtogeek.com/80082/svchost-viewer-shows-exactly-what-each-svchost-exe-instance-is-doing/

这比作为任务直接出现要隐蔽一点,同时比 CreateRemoteThread 对用户更温和。也不太容易崩溃,而且,反病毒通常挂钩 CreateRemoteThread 以阻止对它的调用。