有没有办法从Windows任务管理器隐藏C#程序?
编辑:感谢压倒性的回应!好吧,我不打算做一些怪异的事情.只是想和我的朋友赢得赌注,我可以在没有他注意的情况下做到这一点.我自己也不是一个能够编写rootkit的极客,正如有人建议的那样,虽然我很想知道如何去做.
不是我知道 - 而且不应该.任务管理器的要点是允许用户检查进程等.
如果用户应该能够这样做,他们应该能够找到您的程序.如果他们不应该在任务管理器中闲逛,组策略应该阻止 - 而不是你的程序.
不要指僵尸,但我想我可以贡献一些有用的信息
如果你想隐藏一个应用程序有两种方法(我可以想到atm).
他们都有起伏
[1] SSDT表挂钩 - 基本上你必须将表的MDL设置为可写,用NtQuerySystemInformation
你的函数地址覆盖(iirc)的地址,并在过滤结果后调用原始函数.
这种方法不能很好地满足您的需求,因为挂钩函数总是需要在内存中,并且需要编写内核模式驱动程序.这是一件有趣的事情,但调试很痛苦,因为异常意味着BSOD.
[2] 直接内核对象操作(DKOM) - 进程列表是一个双向链表,使用内核模式驱动程序,您可以更改进程上方和下方的记录指针,以指向您的进程.这仍然需要使用内核模式驱动程序,但有一些root用户,如FU,可以轻松下载包含exe和服务.exe可以从你的应用程序内部作为子进程调用(在FU的发布版本中,至少我发现的那个,有一个我必须修复的错误,如果隐藏的应用程序退出计算机将BSOD,它是一个微不足道的修复).
幸运的是,这几乎可以被任何体面的防病毒程序捕获,所以如果你想偷偷摸摸地做一些事情,你将不得不学会解决这个问题(提示:他们使用二进制签名)
我没有使用方法1,但方法2从VB.Net应用程序为我工作.
第三种可能的选择是将应用程序创建为Windows服务,这将默认显示在任务管理器中,但我愿意打赌有一种方法可以告诉它不会显示在那里,因为还有很多其他的任务管理器中未显示的服务.
希望我能帮助一点,我的建议是,如果你对这类东西感兴趣,可以学习C++.
您可以使您的程序成为一项服务,然后它将显示为"svchost".除此之外还有一点点,但这应该会给你一个正确方向的暗示.
我不知道有任何方法可以将它隐藏在任务管理器中,但你可以通过将其显示为"svchost.exe"来伪装它.它会与所有其他人(通常有几个)混在一起,并且会变得无法区分.