如何防止远程进程在 Windows 中被关闭?

Posted

技术标签:

【中文标题】如何防止远程进程在 Windows 中被关闭?【英文标题】:How to prevent a remote process from being closed in Windows? 【发布时间】:2020-08-12 05:29:54 【问题描述】:

有一个程序我无法修改它的代码已打开。我想创建一个“观察者”来挂钩该程序的关闭事件,以便在用户尝试关闭该程序时隐藏而不是关闭程序的主窗口。

我在谷歌上搜索过,有人说挂钩名为 OpenProcess 的 API 可以工作。我尝试使用名为“EasyHook”的 C# 库并成功注入远程进程并挂钩 MessageBeep API。然后我尝试钩住OpenProcessTerminateProcess,但是这两个方法的钩住的方法从来没有被调用过。

那么我应该使用什么正确的方法或者有没有其他方法可以实现我的目的?如果没有办法防止进程被任务管理器终止,有没有钩住窗口关闭按钮之类的技巧?

附言。我不知道Windows的内核编程和驱动程序编程,所以如果可能的话,我想在用户态实现。

【问题讨论】:

【参考方案1】:

我想创建一个“观察者”来挂钩该程序的关闭事件,以便在用户尝试关闭该程序时使程序的主窗口隐藏而不是关闭。

没有可以挂钩的进程关闭事件。但是,对于 GUI 程序,有 WM_CLOSEWM_SYSCOMMAND|SC_CLOSE 窗口消息可以用 SetWindowsHookEx() 拦截。

我用谷歌搜索了它,有人说挂钩名为 OpenProcess 的 API 可以工作。

谁说挂钩 OpenProcess() 是解决此问题的方法要么是错误的,要么是您误读了该挂钩的实际用途。

我尝试使用名为“EasyHook”的 C# 库并成功注入远程进程并挂钩 MessageBeep API。然后我尝试 hook OpenProcess 和 TerminateProcess,但是这两个方法的 hooked 方法从来没有被调用过。

当然,因为您试图将它们挂接到正在终止的进程中,但这不是调用它们的位置,所以它们会在执行终止的进程中调用(即在任务管理器本身中)。

如果没有办法阻止进程被任务管理器终止

如果使用蛮力“结束进程(树)”选项,则无法捕获/阻止该选项。 “应用程序”选项卡上的“结束任务”选项会尝试在使用暴力破解之前使用窗口消息执行正常终止。

有没有钩住窗口关闭按钮之类的技巧?

请参阅我上面的第一条评论。

【讨论】:

以上是关于如何防止远程进程在 Windows 中被关闭?的主要内容,如果未能解决你的问题,请参考以下文章

如何杀死远程桌面连接上的进程? [关闭]

防止 MSYS 'bash' 杀死捕获 ^C 的进程

WINDOWS7如何防止行应用程序强行关闭?

windows下批处理实现进程监测,防止进程自动关闭

Linux终端关闭后台进程也结束原因分析和nohup的使用

如何在CMD在开启SQL Sever服务