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