我为防御系统、防病毒、反恶意软件等编写程序。而且我在通过 tast manager->Kill Process 杀死防御进程时遇到问题。我测试了一些防病毒软件,但它们不允许我杀死他的进程。我只能在服务中阻止他们。我如何为我的程序创建这种防御。谢谢!
2 回答
通过调用 TerminateProcess (Win32 API) 来停止进程。默认情况下,不可能杀死在与发出对 TerminateProcess 的调用的进程不同的安全上下文下运行的进程。
可以配置用户模式运行服务(使用服务控制管理器),以便在有人终止服务时重新启动它。但是,如果您不希望从服务控制管理器界面或使用“net stop”命令停止服务,则可以在创建服务时适当设置 SERVICE_STATUS 结构的“dwControlsAccepted”字段。
还要考虑到,即使它是服务或系统进程,也可以通过预先启用调试权限来结束任何进程。此权限分配给管理员并在访问令牌中禁用。虽然任务管理器不使用调试权限,但 KILL 实用程序(随 Windows 资源工具包提供)可以。
您观察到的对于服务应用程序很常见,即您需要为此提供服务。
防病毒软件通常使用几个内核模式驱动程序(网络过滤器、文件系统过滤器等),它们具有检查用户模式进程是否可用的附加功能,如果没有,则重新启动它(它们还控制执行状态服务)。
服务也可以监视 UI 进程的存在并重新启动它。而 UI 进程又可以检查服务的状态。并行停止两个进程是相当棘手的(尽管可能),所以这个方案也可以工作。
我猜你会来到同样的架构。
但总的来说,rootkit 绕过了所有这些技巧,而 rootkit 是对现代计算机的最大威胁。