我正在尝试创建一个应用程序,它根据白名单检查所有正在运行的进程,并且列表中没有的任何进程都将被终止。
我的想法是第一次尝试使用tasklikst
命令并获取列表,让我们说每秒,并检查列表。
然后我认为更好的想法是更快地检查,当一个进程被创建并且尚未执行时,我们在列表中检查它,然后如果不在列表中则终止它。
那我该怎么办呢?
您建议以哪种方式解决此问题?
我也对使用哪种语言,C ++或C#持怀疑态度?
在这种情况下它会有什么不同吗?
答案 0 :(得分:3)
C#中最简单的方法是定期使用Process.GetProcesses,然后使用Process.Kill杀死任何你想要死的东西。但是,请注意,当您杀死它时,该过程可能正在做一些工作 - 它只会帮助您对抗游戏(等),而不是对抗恶意软件。另外,不要忘记用户只需将exe文件重命名为“notepad.exe”。如果这是一个问题,您可以检查可执行文件的完整路径,而不仅仅是文件名。
如果您想要一种更智能的方式,无需轮询,您可以在开始流程调用上创建一个挂钩 - 请参阅Monitor process start in the system。这样,您实际上可以防止该进程首先运行。
答案 1 :(得分:1)
您可以在C ++或C#中实现此功能,但确实不重要。选择一个你最舒服的。这是一个算法:
在C#中,您可以使用Process class来枚举和终止。
现在要了解的事情:
鉴于最后一段,您尝试实施的解决方案非常基础。没有什么能阻止用户杀死你的应用程序。或者将病毒应用程序重命名为标准内容。它看起来非常像“通过默默无闻的安全”,这有一些好处,但在防御力方面确实很弱。
答案 2 :(得分:1)
一种技术是使用SetWindowsHookEx
创建一个全局钩子DLL,它将被注入到每个进程中。这样您就可以获得任何新流程的通知,并且可以随心所欲地采取行动。
当然,你需要让这个DLL尽可能轻量级,因为它将被加载到每个进程中。但我仍然认为这比不断轮询或IAT补丁更加苗条。