如何在任务管理器中隐藏进程?

3
我正在开发一款Java程序,旨在让教师和管理员控制学生的权限和访问。我有一个服务器和客户端,但我的问题是学生可以通过任务管理器简单地关闭限制程序。我已经阻止了cmd和powershell,所以它们不可用。我可以阻止任务管理器,但我认为这个资源比没有更有益。
我知道rootkit可以隐藏进程,但它是侵入性的。是否有人知道我可以采取什么方法来解决这个问题。也许创建一个在Java中隐藏重要进程的“任务管理器”?
非常感谢任何帮助或指导。谢谢。

4
为什么不将其作为Windows服务运行,并确保学生没有管理员权限?参见https://dev59.com/LnVD5IYBdhLWcg3wKYP-?lq=1 - Matt Sieker
3
问题更多地涉及分配正确的权限。学生通常应使用非管理员帐户登录。只需从管理员帐户运行您的程序,任务管理器就不会允许学生终止您的程序。 - Ravi K Thapliyal
1个回答

5

总结

如果您能让您的学生以有限权限(非管理员帐户)运行,并在系统(管理员)帐户下运行您的守卫,则他们将无法关闭守卫。其余部分就容易了。正如Ravi Thapliyal所正确提到的那样,这应该是您的第一和唯一防线。如果由于某种原因不可行...

如果您无法阻止任意软件的安装,则最好可以轻松创建两个进程来观察彼此的存在并终止生成它们的进程。当其中一个死亡时,另一个应该生成两者的新副本,然后终止自身。将它们命名为Tuck和Hood(或任何两个看似不相关和不可疑的字母顺序相距较远的名称)。特别是与专业外观的错误消息(“检测到尝试...”)结合使用时,这应该会吓退大多数学生。

如果您可以防止任意软件的安装,则可以阻止Shift-click、Ctrl-click和其他好玩的功能以在已安装的任务管理器中执行多重选择。如果您可以使用其他更直接和简单的篡改方式,则应该这样做。或者,只需阻止所有其他任务管理器并编写自己的任务管理器,就像您建议的那样。

罗宾汉和修士塔克

您可以参考罗宾汉和修士塔克的故事,这是一对进程,其中包括非常难以终止的进程。

这个病毒所做的恶作剧清单是一个非常有趣的阅读材料,但有趣的部分在于这里:

... When Robin Hood was X'ed, the following sequence of events took place:

!X id1

id1:   Friar Tuck... I am under attack!  Pray save me!  (Robin Hood)
id1: Off (aborted)

id2: Fear not, friend Robin!  I shall rout the Sheriff of Nottingham's men!

id3: Thank you, my good fellow! (Robin)

Each ghost-job would detect the fact that the other had been killed, and would start a new copy of the recently-slain program within a few milliseconds. The only way to kill both ghosts was to kill them simultaneously (very difficult) or to deliberately crash the system.

...

基本思路(有两个进程相互恢复)仍然可行,但是任务管理器可以同时关闭两个进程,这是一个主要障碍。不过,此时你已经拥有了一个相当不错的防御措施,特别是如果这两个进程在进程列表中不相邻的话。当然,你不必止步于两个进程。除非用户找到它们,否则它们都会存活。
同时被杀死的问题是不幸的。全局禁用Shift-click和Ctrl-click会造成太多的附带损失。此外,自定义任务管理器(或适合控制台的任务管理器)可以轻松绕过该问题。黑名单中所有的任务管理器以防止多选——你玩过打地鼠吗?
但是,如果你可以防止任意软件的安装和执行(这几乎肯定是必需的,才能预防所有攻击),你可以针对并篡改系统中已有的任务管理器。如果你足够篡改它们,甚至不需要有两个进程来相互保护。但是,如果你有两个进程,只需禁用任务管理器的多选功能即可。还要注意它们的“结束进程树”的功能。
一个进程在响应退出信号之前可以花费任意长的时间。你可以考虑使用两个进程之间的TCP回环来同步它们的终止,以避免它们同时被杀死。然而,当进程被终止而不是被告知退出时,这种方法不起作用。
另一个潜在的问题是学生可能会决定删除守卫程序可执行文件,然后杀死它。这应该通过适当的文件锁定来处理。但是,如果你的操作系统允许这样做,你需要自己防止它。但是,如果你的操作系统允许删除任意文件,即使它们当前正在运行可执行文件,那就没什么办法了。

非常感谢!我创建了程序来互相监视,并且在其中一个被终止时通知管理员。我假设如果学生尝试进一步的任何行动,管理部门将处理纪律问题。我只是不想让普通编程学生有能力将其禁用。 - guyfleeman
只是好奇,这不属于“与编程专业相关的实际可回答问题”的范畴吗?它询问了一种保护和部署完成程序的方法。 - guyfleeman
Stack Overflow是针对那些具有单一(最好是确定的)答案问题的。例如:“这是一段L代码。它可以做X。如何让它做Y?我已经考虑过Z,但那似乎行不通。”或者:“有没有一个好的算法来实现X?我知道我可以做Y,但只有100项数据速度太慢了,而我需要能够处理10000项数据。”这个问题并不真正涉及到编程,而是与安全(请参见[security.se])或计算机管理([su])有关。典型的SO问题可能是“我正在尝试实现一个监控工具。如何确定特定程序是否正在运行?” - John Dvorak
我没有投票关闭或期望问题被关闭。然而,我确实理解关闭的原因。 - John Dvorak
我想那是有道理的,尽管我的意图是以编程方式完成它。谢谢。 - guyfleeman

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