如何隐藏一个 C# 程序不出现在任务管理器中?

19

有没有办法在Windows任务管理器中隐藏C#程序?

编辑: 感谢大家的热情回应!其实我不是想做什么可怕的事情。只是想赢得和朋友的赌约,让他不注意到我的程序。虽然有人建议我写一个rootkit,但我自己并不是很懂行,但我很想知道如何做。


13
为什么你想要做这样的事情? - Daniel A. White
4
我不知道答案,但如果我知道的话,在解释如何做之前,我会倾向于询问您为什么这样做的原因。 - Samir Talwar
6
是的,有的:不要开始它。 - RaYell
3
我认为我们都清楚地知道需要哪种程序来实现这个目标。X-) - Adriaan Stander
8
我认为这是一个合理且有趣的问题。 - Roee Adler
显示剩余7条评论
5个回答

29

据我所知没有这样的情况,也不应该有。任务管理器的目的是允许用户检查进程等内容。

如果用户应该能够做到这一点,他们应该能够找到你的程序。如果他们不应该在任务管理器中乱动,组策略应该阻止这种行为 - 而不是你的程序。


2
完全同意。我不认为程序应该达到任何理由。 - Juri
2
是的,过度完成的程序真的很烦人。 - Jeff Yates
2
如果它们所“实现”的是垃圾邮件、擦除您的硬盘等行为,那么限制程序的功能是完全合理的。 - Jon Skeet
原因:例如某些反病毒软件或远程应用程序会隐藏它们的任务。 - morteza karimian kelishadrokhi

19

我不是来发冷贴的,但我认为我可以提供一些有用的信息,来回答关于隐藏应用程序的问题,有两种方法(目前我能想到的)。

它们都有优缺点。

[1]SSDT表钩子 - 基本上要设置可写的表的MDL,使用您的函数的地址覆盖NtQuerySystemInformation的地址(如果我没记错),并在过滤结果后调用原始函数。

这种方法不太适合您的需求,因为挂钩函数总是需要在内存中,并且涉及写入内核模式驱动程序。这很有趣,但调试很麻烦,因为异常意味着蓝屏。

[2]直接内核对象操作(DKOM) - 进程列表是双向链接列表,使用内核模式驱动程序,您可以更改指向您进程上下记录的指针来绕过你的进程。这仍然需要使用内核模式驱动程序,但有像FU之类的rootkit可以轻松下载,其中包含exe和服务。 exe可以作为子进程从您的应用程序中调用(至少在我找到的FU的发布版本中存在一个错误,即如果隐藏的应用程序退出,则计算机会蓝屏,这是一个微不足道的修复)。

这将很快被几乎任何体面的杀毒软件发现,因此如果您想做一些隐秘的事情,您必须学会绕过它们(提示:它们使用二进制签名)。

我从未使用过方法1,但是从VB.Net应用程序中使用过方法2。

第三种可能的选择是只需将应用程序创建为Windows服务,这将默认显示在任务管理器中,但我敢打赌有一种方法可以告诉它不要在那里显示,因为还有其他许多服务不会出现在任务管理器中。

希望我有所帮助,我的建议是,如果您对这种东西感兴趣,请学习C ++。


14

您可以将程序作为服务,然后它将显示为"svchost"。这里面还有一些细节需要注意,但这应该给您一个正确的方向。


7

我不知道有什么方法可以从任务管理器中隐藏它,但是你可以通过将其显示为 "svchost.exe" 来伪装它。 它会与所有其他进程混在一起(通常有几个),变得难以区分。


并不完全是这样 - 您仍然可以在任务管理器中看到可执行文件的路径。 - xyz
1
@frou:是啊,但如果你只是将它命名为svchost.exe并将其放在c:/Windows下的某个地方,大多数人会认为它是一个普通的Windows应用程序。 - Mike Trpcic
1
Blah - 仅仅称它为svchost.exe是samoz建议的混乱/不太有效的版本 :) - xyz
1
+1 - 我认为这是混淆恶意软件的更常见技术之一。 - Mayo

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接