windows - 防止跨进程 SendMessage 调用

标签 windows winapi sendmessage

假设我有一个带有按钮的 Windows GUI 应用程序。我可以通过使用 sendMessage winapi 调用(并将 BM_CLICK 作为调用的参数)来模拟对该按钮的单击。

现在,从安全角度来看,我不希望这种情况发生。即我的目标进程应该忽略来自另一个进程的 sendMessage 调用。有没有规定可以做到这一点?一种验证 sendMessage 调用的方法?

编辑:换句话说,如何阻止诸如 Enabler、TurnitOn http://www.raymond.cc/blog/how-to-enable-and-access-disabled-grayed-out-buttons-windows-and-checkboxes/ 等应用程序阻止访问用户不应该访问的功能?

最佳答案

如果应用程序在用户自己的上下文中运行,那么它只能执行用户可以执行的操作。经常被忽视的推论是,应用程序可以做的任何事情,用户也可以做。

因此,没有必要过多担心此类应用程序上的按钮是否“真正”被禁用。用户总是可以找到另一种方法来完成按钮本来要做的任何事情。 (这可能是通过使用注册表编辑器,获取具有相同功能的另一个应用程序,或者,如果没有其他方便的方法,他们可以在调试器内运行该应用程序并强制其重新启用该按钮。)

适当的解决方案取决于上下文:

  • 在许多情况下,最合适的解决办法就是停止担心。您应该能够信任您的用户,如果不能,那就是人力资源问题,而不是技术问题。

  • 如果应用程序为在更高上下文中运行的某些东西提供接口(interface),例如防病毒软件的前端,那么安全决策(是否允许用户这样做?)应该发生在后端。也就是说,安全决策需要由用户无法控制的代码来做出。

  • 如果您是一名系统管理员,试图锁定一台信息亭机器(一台将由不受信任的用户使用的机器,通常使用某种类型的单个 guest 帐户),那么您可以使用 AppLocker 或软件限制定义允许用户运行哪些应用程序的策略。由于 Enabler 和 TurnItOn 不会出现在您的列表中,因此用户将无法运行它们来绕过您的安全策略。

关于windows - 防止跨进程 SendMessage 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11833500/

相关文章:

c++ - 如何在win32中获取鼠标光标的RGB字节数组?

c++ - 如何发送信息

windows - 如何将多行命令行命令复制/粘贴到命令提示符中?

c++ - EnterCriticalSection 似乎没有阻塞

windows - GitHub 分支 : Case-Sensitivity Issue?

c - RegQueryValueEx()读取REG_DWORD时总是在*lpData中填0

c++ - Windows 中的 Control+Z 表示输入 C++ 结束?

matlab编译器安装问题

c# - SendMessage() 仅在窗口打开时有效,在最小化时无效

python - 将文本编码为 win32api.SendMessage() 的 WPARAM