用于启动软件安装的 RPC 命令

标签 rpc execution

我最近正在使用 Symantech 的一款名为 Norton EndPoint Protection 的产品。它由一个服务器控制台应用程序和一个部署应用程序组成,我想将它们的部署方法合并到我的产品之一的 future 版本中。

部署应用程序允许您选择运行 Win2K、WinXP 或 Win7 的计算机工作站。工作站的选择由 AD (Active Directory) 或 NT 域(WINs/DNS NetBIOS 查找)提供。从列表中,您可以单击并选择要部署端点软件(赛门铁克的病毒和 spy 软件防护套件)的工作站。

然后,在选择应接收软件包的工作站后,软件将 setup.exe 程序复制到每个工作站(可能通过管理共享\pcname\c$),然后命令工作站执行 setup.exe,从而导致安装软件的工作站。

我真的很喜欢他们的产品的工作原理,但不确定他们正在做什么来完成所有步骤。我还没有对此进行任何深入的调查,例如嗅探网络等...并且想在这里检查一下是否有人熟悉我正在谈论的内容,以及您是否知道它是如何完成的或有想法如何实现可以实现。

我的想法是,他们使用管理共享将软件复制到选定的工作站,然后发出 RPC 调用来命令工作站进行安装。

有趣的是,工作站执行此操作时,任何登录用户都不知道发生了什么,直到最后需要重新启动。此时,用户会收到一个弹出窗口,要求立即或稍后重新启动,等等...我的预感是 setup.exe 程序正在弹出此消息。

重点是:我正在寻找一种机制,一台基于 Windows 的计算机可以告诉另一台计算机执行某些操作或运行某些程序。

我的编程语言是 C/C++

任何想法/建议表示赞赏。

最佳答案

我也在研究这个,因为我也想远程部署软件。我选择对 pstools 进行数据包嗅探,因为它已经证明在此类远程管理任务中非常可靠。

我必须承认我对这个挑战想得太多了。您现在可能已经完成了数据包嗅探并发现了与我相同的事情。我希望通过留下这篇文章,我们可以帮助其他开发者。

这就是 pstools 完成任意代码执行的方式:

它将系统服务可执行文件复制到\\server\admin$(您必须在远程计算机上已有本地管理员,或者提供凭据)。复制文件后,它会使用服务控制管理器 API 将复制的文件设为系统服务并启动它。

显然,这个系统服务现在可以做任何它想做的事情,包括绑定(bind)到 RPC 命名管道。在我们的例子中,系统服务将安装一个 msi。要确认安装成功,您可以远程轮询注册表项或 rpc 函数。不管怎样,你应该在完成后删除系统服务并删除文件(psexec 不会这样做,我猜他们不希望它被 secret 使用,在这种情况下,留下服务至少会给一个管理员很有可能意识到有人已经破坏了他们的盒子。)此方法不需要对远程计算机进行任何预配置,只需您拥有管理员权限并且在防火墙中打开文件共享和 rpc。

我看过使用 WMI 的 C# 演示,但我不喜欢这些解决方案。文件共享和 RPC 最有可能在防火墙中开放。如果不是,远程服务器的文件共享和远程 MMC 管理将无法工作。 WMI 可以被阻止,但仍然保留这些功能。

我使用过很多远程安装软件,其中很多不如 pstools 可靠。我的猜测是,这是因为这些开发人员正在使用其他不太可能在防火墙级别开放的方法。

简单的解决方案往往是最难以捉摸的。一如既往,我向 SysInternals 的人们致敬。他们是真正的黑客,就这个词积极的、老式的含义而言!

关于用于启动软件安装的 RPC 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2609211/

相关文章:

GWT RPC 接口(interface)问题

php 超时 - set_time_limit(0); - 不工作

java - 在netbeans中停止执行程序的快捷方式

buffer - 从 php 回显 "as it goes"

java - 使用 `start` 在 Windows 批处理文件中使用双引号启动进程的副作用

java - Webservice客户端创建方法

java - Android:将服务传递给处理程序

java - GWT 与 JDO 问题

http - HTTP和RPC的比较

java - 我可以获得java程序测试用例的执行跟踪吗?