为了账号安全,请及时绑定邮箱和手机立即绑定

如何在C#中的“任务管理器”中隐藏进程?

如何在C#中的“任务管理器”中隐藏进程?

C#
摇曳的蔷薇 2019-12-11 10:10:58
我需要在任务管理器中隐藏一个进程。它用于Intranet方案。因此,一切都是合法的。:)请随时分享您拥有的任何代码(最好是C#)或任何其他技术,或与此路线有关的任何问题。Update1:大多数用户具有管理员权限才能运行某些旧版应用程序。因此,建议之一是将其隐藏在任务管理器中。如果还有其他方法可以防止用户终止该进程,那就太好了。Update2:删除对rootkit的引用。不知何故使这篇文章看起来很消极。
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

没有支持的方法来完成此操作。可以以任何特权级别读取进程列表。如果您希望甚至对Administrators都隐藏一个进程,那么双重支持。


为了使它起作用,您需要编写一个内核模式rootkit来拦截对NtQuerySystemInformation的调用,以使SystemProcessInformation信息类无法列出您的隐藏进程。


安全地拦截系统调用非常困难,并且64位Windows内核竭尽全力防止这种情况的发生:尝试修改syscall表会立即显示蓝屏。在那些平台上这将非常困难


这是一个试图做类似事情的Rootkit的例子(有几个严重的问题)。



查看完整回答
反对 回复 2019-12-13
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

如果要防止用户从任务管理器中终止进程,则可以仅在进程上使用安全描述符来拒绝终止对所有人的访问。从技术上讲,管理员仍然可以通过拥有该进程的所有权并重置DACL来终止该进程,但是任务管理器中没有界面可以执行这些操作。Process Explorer可能有一个接口。


当您的进程开始时,请使用SetKernelObjectSecurity和DACL_SECURITY_INFORMATION当前进程句柄。使用零个ACL设置DACL。这将拒绝所有人的所有访问,包括那些试图通过任务管理器结束您的过程的人。


这是一个示例,它也更改了流程的所有者:


SECURITY_DESCRIPTOR sd;

ACL dacl;

SID_IDENTIFIER_AUTHORITY ntauth = SECURITY_NT_AUTHORITY;

PSID owner;


assert(InitializeAcl(&dacl, sizeof dacl, ACL_REVISION));


assert(AllocateAndInitializeSid(&ntauth, 1, SECURITY_LOCAL_SYSTEM_RID, 0,0,0,0,0,0,0, &owner));


assert(InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION));


assert(SetSecurityDescriptorDacl(&sd, TRUE, &dacl, FALSE));


assert(SetSecurityDescriptorOwner(&sd, owner, FALSE));


assert(SetKernelObjectSecurity(GetCurrentProcess(), DACL_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION, &sd));


assert(FreeSid(owner) == NULL);

不幸的是,它似乎并不有效。我仍然可以关闭该过程(尽管不是受限用户)。也许任务管理器正在获得所有权或调用其他特权来终止进程?我似乎还记得在以前的Windows版本(我正在测试2003)中可以使用的功能,但是我可能会误会。



查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 240 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信