如何阻止WIX CAQuietExec记录命令行?

时间:2011-01-12 14:37:41

标签: installer wix windows-installer

为了防止在安装过程中弹出命令窗口,我使用的是WIX内置的自定义操作CAQuietExec。

首先我定义命令行:

<CustomAction Id="A01" 
       Property="QtExecCmdLine" Value="&quot;MyExe.exe&quot; /password [PASSWORD]" />

注意:PASSWORD属性被定义为隐藏。这可以防止Windows安装程序将属性值写入日志。

然后我调用嵌入式WIX扩展名:

<CustomAction Id="A02" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="ignore" />

这很好用。

但是,当我转到临时文件夹并打开MSI日志时,我会看到以下条目:

  

CAQuietExec:&#34; C:\ Program   文件\ MYEXE.EXE&#34; /密码INCLEARTEXT

即。密码以明文显示,不会隐藏。

如何阻止CAQuietExec以明文形式记录密码?

5 个答案:

答案 0 :(得分:2)

在src \ ca \ wcautil \ qtexec.cpp中是QuietExec函数中的这一行:

WcaLog(LOGMSG_VERBOSE, "%ls", wzCommand);

以详细模式记录命令行。没有条件阻止它进行记录。

答案 1 :(得分:2)

采取一些谷歌并尝试解决方案是创建proproperty并在将值分配给属性之前指定Hidden =“yes”。在上面的代码中,您应该在赋值之前创建一个新属性QtExecCmdLine。

 <Property Id="QtExecCmdLine" Hidden="yes"></Property>

然后

 <CustomAction Id="A01" Property="QtExecCmdLine" Value="&quot;MyExe.exe&quot; /password [PASSWORD]" />

然后

 <CustomAction Id="A02" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return ....

答案 2 :(得分:1)

CustomAction标记具有HideTarget属性,该属性应使自定义操作数据不会写入日志。

答案 3 :(得分:1)

有很多方法可以攻击您的密码。我可以看看ORCA中的MSI。我可以在运行时运行WMIC路径win32_process并查看命令行参数。从日志中隐藏它几乎没有价值。

我建议加密存储在MSI中的密码,让你的exe能够解密它。根据此密码的使用情况,您可能还需要采取其他措施,例如让EXE在运行时生成随机密码,并在某些地方加密/持久保存,以防某些其他进程需要能够访问它。

如果密码来自UI序列中的用户输入,您可以使用自定义操作将数据作为第二个属性进行隐藏,然后将其传递给EXE。或者您可以将C ++源代码分叉到QuietExec并将其修改为不写入日志文件。

答案 4 :(得分:1)

查看Preventing Confidential Information from Being Written into the Log File文章,尤其是第3点。它基本上表示如果隐藏了一个属性,但Debug策略设置为一个特殊值,命令行仍将以明文形式转储到日志文件中。验证这是否是您遇到上述行为的原因。

我不相信它可能是QuietExec CA中的错误:)