为了防止在安装过程中弹出命令窗口,我使用的是WIX内置的自定义操作CAQuietExec。
首先我定义命令行:
<CustomAction Id="A01"
Property="QtExecCmdLine" Value=""MyExe.exe" /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以明文形式记录密码?
答案 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=""MyExe.exe" /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中的错误:)