我们有一个调用helper exes并传递命令行参数的结构来控制它们的执行。由于可以看到命令行参数,因此可以由其他应用程序传递。我们希望我们的前任只能由我们召集。 我们如何以最小的变化实现这一点并保持传递命令行参数的当前结构不变?
修改1
可以识别来电者吗?例如将助手exe作为子进程调用并标识父进程
答案 0 :(得分:3)
您根本无法隐藏命令行参数。您可以查看How to clear a process command line?问题并查看答案和评论。
如果你想坚持使用传递命令行参数,Raymond Chen就如何优雅地执行它有一个非常好的帖子:http://blogs.msdn.com/b/oldnewthing/archive/2003/12/11/56043.aspx。基本思想是使用匿名共享内存块来存储要在进程之间传递的实际数据,并将句柄的数值传递给它。
重量级替代方案可能是加密/解密通过命令行传递的数据。或者附加一些生成的“秘密词”,以便被调用者可以验证它是否被您的某个应用程序调用。
我建议选择一种方法(以及相关的成本/收益)取决于风险:谁/为什么/何时将操纵您的帮助应用程序?
答案 1 :(得分:3)
您可以使用hack在应用程序启动后通过writing to the address returned from GetCommandLineW()
清除内存中的命令行参数,但这不会阻止同时读取它的任何内容,或任何钩住进程创建的内容
您可以尝试创建共享内存并传递指针,但这只会使数据模糊不清。
简单的事实是,您无法隐藏任何以相同用户和执行级别运行的数据。无论你付出什么努力,都可以将其隐藏起来。即使加密也意味着密钥和方法将在内存中并且可以被读取。如果您想阻止随机用户尝试运行您的可执行文件,请不要将它们提供给随机用户:)
答案 2 :(得分:1)
您的应用程序可以使用DDE相互通信。有关详细信息,请参阅Make two Visual Basic program exchange data using DDE和How to Use DDE in Visual Basic to Communicate with Other Windows Programs
答案 3 :(得分:0)
您可以将值设置为变量并在.exes中提取这些变量吗?