我们有一个调用辅助 exe 并传递命令行参数来控制它们执行的结构。由于可以看到命令行参数,因此可以由其他应用程序传递。我们希望我们的前任只能由我们调用。我们怎样才能以最小的改变来实现这一点,并保持当前传递命令行参数的结构完好无损?
编辑 1
可以识别来电者吗?例如,调用助手 exe 作为子级并识别父级
我们有一个调用辅助 exe 并传递命令行参数来控制它们执行的结构。由于可以看到命令行参数,因此可以由其他应用程序传递。我们希望我们的前任只能由我们调用。我们怎样才能以最小的改变来实现这一点,并保持当前传递命令行参数的结构完好无损?
编辑 1
可以识别来电者吗?例如,调用助手 exe 作为子级并识别父级
您可以在应用程序启动后使用 hack 清除内存中的命令行参数,方法是写入从 返回的地址GetCommandLineW()
,但这不会同时阻止任何读取它的内容,或者任何挂钩进程创建的内容。
您可以尝试创建共享内存并传递指针,但这只会掩盖数据。
一个简单的事实是,您无法隐藏以相同用户和执行级别运行的任何东西的数据。无论你付出什么努力来隐藏它,都可以用来解开它。即使是加密也意味着密钥和方法将在内存中并且可以读取。如果您想阻止随机用户尝试运行您的可执行文件,请不要将它们提供给随机用户:)
您根本无法隐藏命令行参数。您可能希望检查如何清除进程命令行?问题并在那里查看答案和评论。
如果你想坚持传递命令行参数,Raymond Chen 有一篇关于如何优雅地做到这一点的非常好的帖子:http: //blogs.msdn.com/b/oldnewthing/archive/2003/12/11/56043.aspx . 基本思想是使用匿名共享内存块来存储要在进程之间传递的实际数据,并将句柄的数值传递给它。
一个重量级的替代方案可能是加密/解密通过命令行传递的数据。或者附加一些生成的“秘密词”,以便被调用者可以验证它是否被您的一个应用程序调用。
我建议选择一种方法(以及相关的成本/收益)取决于风险:谁/为什么/何时会操纵您的辅助应用程序?
您的应用程序可以使用 DDE 相互通信。有关详细信息,请参阅使用 DDE 使两个 Visual Basic 程序交换数据以及如何在 Visual Basic 中使用 DDE 与其他 Windows 程序进行通信
您可以将这些值设置为变量并在您的 .exe 中提取这些变量吗?