我怎么能知道一个进程是什么时候创建的,并阻止它在windows中执行或终止它
How can i know when a process is being created and stop it from being executed or terminated it in windows?
我正在尝试创建一个应用程序,它将根据白名单检查所有正在运行的进程,并且任何不在该名单中的进程都将被终止
我的想法是首先尝试使用tasklikst
命令,在每秒钟内获取列表,并根据列表进行检查
然后我想最好早点检查,当一个流程被创建但尚未执行时,我们会根据列表进行检查,如果不在列表中,则终止它。那么我该怎么做呢
你建议用哪种方法来解决这个问题
我还怀疑用哪种语言来做,C++还是C#?在这种情况下会有什么不同吗?
C#中最简单的方法是定期使用Process.GetProcesses,然后使用Process.kill杀死任何你想杀死的人。但是,请注意,当你杀死它时,该进程可能正在做一些工作-它只会帮助你对付游戏等,而不会帮助你对付恶意软件。此外,不要忘记,用户可以将exe文件重命名为类似"notepad.exe"的文件。如果这是一个问题,你可以检查可执行文件的完整路径,而不仅仅是文件名。
如果您想要一种更智能的方式,而不需要轮询,您可以在启动进程调用上创建一个挂钩-请参阅系统中的监控进程启动。通过这种方式,您实际上可以从一开始就阻止进程运行。
一种技术是使用SetWindowsHookEx
创建一个全局钩子DLL,该DLL将被注入到每个进程中。通过这种方式,您将收到任何新流程的通知,并且可以根据需要采取任何行动。
当然,考虑到它将被加载到每个进程中,你需要使这个DLL尽可能轻量级。但我仍然认为,这将比持续的民意调查或IAT补丁更精简。
您可以在C++或C#中实现这一点,这并不重要。选择一个你最舒服的。这里有一个算法:
- 设置一个计时器或计划任务或类似的东西,偶尔执行一次代码
- 枚举进程
- 对于每个找到的进程,请对照白名单字典检查名称
- 尝试终止进程
在C#中,您可以使用Process类来枚举和终止。
现在需要了解的内容:
- 您的应用程序可能没有足够的权限枚举或终止其他应用程序
- 您的代码可能需要管理员权限
- 如果在使用组策略设置的Active Directory中运行,情况可能会变得复杂
- 病毒或其他不受欢迎的应用程序可以将其代码"注入"到知名或无辜的应用程序中(即白名单应用程序中)
- 你将无法杀死大多数系统任务,所以不要尝试这样做
- 检查对全球化的支持,进程名称可以更改
- 仅仅依靠名字是一种糟糕的做法。如果你想检查真实性,你应该依赖一些加密签名,当然,随着应用程序的更新,这是一件很难维护的事情
鉴于最后一段,您尝试实现的解决方案非常基本。没有什么能仅仅为了杀死你的应用程序而阻止用户。或者将病毒应用程序重命名为标准程序。它看起来很像"默默无闻的安全",有一些好处,但在防御力量方面确实很弱。
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux for Windows上编译C++代码时出错
- 在Windows上用C++裁剪HBITMAP
- 我应该使用什么信号来终止/终止Windows上的应用程序
- Windows 脚本主机在关闭创建的窗口时终止
- Windows资源监视器使用哪些Win32函数来检测已终止进程的磁盘和网络活动
- C++:监视 Windows 中的进程创建和终止
- 我怎么能知道一个进程是什么时候创建的,并阻止它在windows中执行或终止它
- 如何在Windows线程中终止线程后获取剩余线程数?C++
- 使用 Windows 版C++加速终止套接字 WinHttp API 的方法
- 终止Qt进程:Windows任务管理器在做什么,我没有?
- 在Windows下,线程的创建和终止需要多长时间
- Qt 5.5.0 在 Windows 上使用 mingw:编译的可执行文件无法终止
- WinAPI - windows关闭前的清理终止进程
- 分配空终止符时Windows剪贴板函数崩溃
- c++在Windows API中单独创建线程,程序终止
- 连接和终止windows线程
- Windows服务在Windows7中意外终止
- 当一个c++程序在Windows上终止时,终止存根调用的最后一个函数是什么?