有没有办法在Windows任务管理器中隐藏C#程序?
编辑: 感谢大家的热情回应!其实我不是想做什么可怕的事情。只是想赢得和朋友的赌约,让他不注意到我的程序。虽然有人建议我写一个rootkit,但我自己并不是很懂行,但我很想知道如何做。
有没有办法在Windows任务管理器中隐藏C#程序?
编辑: 感谢大家的热情回应!其实我不是想做什么可怕的事情。只是想赢得和朋友的赌约,让他不注意到我的程序。虽然有人建议我写一个rootkit,但我自己并不是很懂行,但我很想知道如何做。
据我所知没有这样的情况,也不应该有。任务管理器的目的是允许用户检查进程等内容。
如果用户应该能够做到这一点,他们应该能够找到你的程序。如果他们不应该在任务管理器中乱动,组策略应该阻止这种行为 - 而不是你的程序。
我不是来发冷贴的,但我认为我可以提供一些有用的信息,来回答关于隐藏应用程序的问题,有两种方法(目前我能想到的)。
它们都有优缺点。
[1]SSDT表钩子 - 基本上要设置可写的表的MDL,使用您的函数的地址覆盖NtQuerySystemInformation的地址(如果我没记错),并在过滤结果后调用原始函数。
这种方法不太适合您的需求,因为挂钩函数总是需要在内存中,并且涉及写入内核模式驱动程序。这很有趣,但调试很麻烦,因为异常意味着蓝屏。
[2]直接内核对象操作(DKOM) - 进程列表是双向链接列表,使用内核模式驱动程序,您可以更改指向您进程上下记录的指针来绕过你的进程。这仍然需要使用内核模式驱动程序,但有像FU之类的rootkit可以轻松下载,其中包含exe和服务。 exe可以作为子进程从您的应用程序中调用(至少在我找到的FU的发布版本中存在一个错误,即如果隐藏的应用程序退出,则计算机会蓝屏,这是一个微不足道的修复)。
这将很快被几乎任何体面的杀毒软件发现,因此如果您想做一些隐秘的事情,您必须学会绕过它们(提示:它们使用二进制签名)。
我从未使用过方法1,但是从VB.Net应用程序中使用过方法2。
第三种可能的选择是只需将应用程序创建为Windows服务,这将默认显示在任务管理器中,但我敢打赌有一种方法可以告诉它不要在那里显示,因为还有其他许多服务不会出现在任务管理器中。
希望我有所帮助,我的建议是,如果您对这种东西感兴趣,请学习C ++。
您可以将程序作为服务,然后它将显示为"svchost"。这里面还有一些细节需要注意,但这应该给您一个正确的方向。
我不知道有什么方法可以从任务管理器中隐藏它,但是你可以通过将其显示为 "svchost.exe" 来伪装它。 它会与所有其他进程混在一起(通常有几个),变得难以区分。