2013-04-08 105 views
3

我们有一个调用helper exes并将它们传递给命令行参数的结构来控制它们的执行。由于可以看到命令行参数,因此可以由其他应用程序传递。我们希望我们的exes只能由我们调用。 我们怎样才能以最小的变化实现这一点,并保持传递命令行参数的当前结构不变?如何隐藏命令行参数

编辑1

可来电识别?例如打电话给助手exe作为孩子,并确定父母

+2

要编辑#1:什么阻止“敌人”用自己的一个替换你的caller-exe? – 2013-04-08 11:47:11

+0

@kurniliya好的一个 – bjan 2013-04-08 12:09:46

回答

3

你根本无法隐藏命令行参数。您不妨检查How to clear a process command line?问题,并在那里看到答案和评论。

如果你想坚持传递命令行参数,Raymond Chen有一个非常好的文章,如何优雅地做到这一点:http://blogs.msdn.com/b/oldnewthing/archive/2003/12/11/56043.aspx。基本思想是使用匿名共享内存块来存储要在进程之间传递的实际数据,并将句柄的数值传递给它。

重量级的选择可能是加密/解密通过命令行传递的数据。或附加一些生成的“秘密词”,以便被调用者可以验证它是否被你的某个应用程序调用。

我建议选择一种方法(以及相关的成本/收益)取决于风险:谁/为什么/何时要操纵辅助应用程序?

0

您可以将值设置为变量并提取您的.exes中的这些变量?

+0

假设你的意思是环境变量,它们就像命令行一样可读。 – Deanna 2013-04-08 13:21:57

3

在应用程序启动之后,您可以使用hack清除内存中的命令行参数,格式为writing to the address returned from GetCommandLineW(),但这并不会阻止任何同时读取它的内容,或任何挂钩进程创建的内容。

你可以尝试创建共享内存并传递指针,但这只是模糊了数据。

简单的事实是,您不能隐藏任何以相同用户和执行级别运行的任何数据。无论你怎么努力隐藏它,都可以隐藏起来。即使是加密也意味着密钥和方法将存储在内存中并且可以被读取。如果你想停止试图运行你的可执行文件的随机用户,那么不要给他们随机用户:)

+0

写入从'GetCommandLineW()'返回的地址没有什么帮助。更改此位置对其他应用程序(如ProcessExplorer或Win32_Process WMI类)没有影响。他们仍然能够阅读原始命令行。 – 2013-04-08 11:25:47

+1

+1“简单的事实是,您无法将数据作为相同的用户和执行级别隐藏运行。” – 2013-04-08 11:27:05

+1

@kurniliya Raymond在他的文章中写道,如果您写入由'GetCommandLineW()'返回的指针,Process Explorer会显示修改后的数据。 – Deanna 2013-04-08 11:35:44