我怎么能知道一个进程是什么时候创建的,并阻止它在windows中执行或终止它



我正在尝试创建一个应用程序,它将根据白名单检查所有正在运行的进程,并且任何不在该名单中的进程都将被终止
我的想法是首先尝试使用tasklikst命令,在每秒钟内获取列表,并根据列表进行检查
然后我想最好早点检查,当一个流程被创建但尚未执行时,我们会根据列表进行检查,如果不在列表中,则终止它。那么我该怎么做呢
你建议用哪种方法来解决这个问题
我还怀疑用哪种语言来做,C++还是C#?在这种情况下会有什么不同吗?

C#中最简单的方法是定期使用Process.GetProcesses,然后使用Process.kill杀死任何你想杀死的人。但是,请注意,当你杀死它时,该进程可能正在做一些工作-它只会帮助你对付游戏等,而不会帮助你对付恶意软件。此外,不要忘记,用户可以将exe文件重命名为类似"notepad.exe"的文件。如果这是一个问题,你可以检查可执行文件的完整路径,而不仅仅是文件名。

如果您想要一种更智能的方式,而不需要轮询,您可以在启动进程调用上创建一个挂钩-请参阅系统中的监控进程启动。通过这种方式,您实际上可以从一开始就阻止进程运行。

一种技术是使用SetWindowsHookEx创建一个全局钩子DLL,该DLL将被注入到每个进程中。通过这种方式,您将收到任何新流程的通知,并且可以根据需要采取任何行动。

当然,考虑到它将被加载到每个进程中,你需要使这个DLL尽可能轻量级。但我仍然认为,这将比持续的民意调查或IAT补丁更精简。

您可以在C++或C#中实现这一点,这并不重要。选择一个你最舒服的。这里有一个算法:

  • 设置一个计时器或计划任务或类似的东西,偶尔执行一次代码
  • 枚举进程
  • 对于每个找到的进程,请对照白名单字典检查名称
  • 尝试终止进程

在C#中,您可以使用Process类来枚举和终止。

现在需要了解的内容:

  • 您的应用程序可能没有足够的权限枚举或终止其他应用程序
  • 您的代码可能需要管理员权限
  • 如果在使用组策略设置的Active Directory中运行,情况可能会变得复杂
  • 病毒或其他不受欢迎的应用程序可以将其代码"注入"到知名或无辜的应用程序中(即白名单应用程序中)
  • 你将无法杀死大多数系统任务,所以不要尝试这样做
  • 检查对全球化的支持,进程名称可以更改
  • 仅仅依靠名字是一种糟糕的做法。如果你想检查真实性,你应该依赖一些加密签名,当然,随着应用程序的更新,这是一件很难维护的事情

鉴于最后一段,您尝试实现的解决方案非常基本。没有什么能仅仅为了杀死你的应用程序而阻止用户。或者将病毒应用程序重命名为标准程序。它看起来很像"默默无闻的安全",有一些好处,但在防御力量方面确实很弱。

最新更新