2011-01-12 38 views
1

爲了防止安裝期間彈出命令窗口,我使用WIX內置的自定義操作CAQuietExec。如何防止WIX CAQuietExec記錄命令行?

首先我定義了命令行:

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

NB:密碼屬性被定義爲隱藏。這可以防止Windows安裝程序將屬性值寫入日誌。

然後,我打電話到嵌入式維克斯擴展:

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

這工作得很好。

然而,當我去到臨時文件夾並打開了MSI日誌我看到下面的條目:

CAQuietExec: 「C:\ PROGRAM 文件\ MYEXE.EXE」/密碼INCLEARTEXT

即密碼以明文形式顯示而不是隱藏。

如何防止CAQuietExec從記錄明文密碼?

回答

2

在SRC \ CA \ wcautil \ qtexec.cpp是該線路QuietExec功能:

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

這以詳細模式記錄命令行。沒有條件停止記錄。

1

CustomAction標記具有HideTarget屬性,該屬性應該使自定義操作數據不會寫入日誌。

+0

謝謝,但我已經嘗試過 - 它添加到所有可能的自定義操作 - 這是行不通的。問題是CAQuietExec中的代碼不遵守此屬性或Hidden屬性。 – 2011-01-12 15:09:28

1

有很多方法來攻擊你的密碼。我可以看看ORCA的MSI。我可以在運行時運行WMIC路徑win32_process並查看命令行參數。將它從日誌中隱藏起來沒有多大價值。

我建議加密存儲在微星的密碼,並能夠解密它的你的EXE。根據您使用的密碼的不同,您可能還想採取其他措施,比如讓EXE在運行時生成一個隨機密碼,並在某些其他進程需要能夠訪問的地方將其加密/保存。

如果密碼是從用戶輸入進來的UI序列,你可以有隱窩的數據作爲第二屬性,然後傳遞到EXE自定義操作。或者,您可以將C++源代碼分發到QuietExec並將其修改爲不寫入日誌文件。

+0

不,我沒有在MSI中存儲密碼 - 這很愚蠢。將其隱藏在日誌中實際上具有很大的價值,因爲密碼由IT專業人員輸入,然後將MSI日誌郵寄給開發人員(不知道密碼)。我不明白爲什麼當已經有一個隱藏屬性(以及HideTarget屬性)時,WIX的用戶必須加入額外的長度,例如加密以防止敏感項目被記錄。這看起來像CAQuietExec中的一個錯誤。 – 2011-01-12 16:03:29

+0

hide屬性是指Windows Installer的msidbCustomActionTypeHideTarget屬性。它告訴MSIEXEC引擎記錄或不記錄CustomActionData。一旦你真的在延期的自定義行動中,我不知道有任何機制知道該標誌。必須有另一個標誌告訴QuietExec CA它是否應該對日誌中捕獲的內容做任何特殊處理。就像我所說的,如果你將源碼分離出來,那麼可以完成,因爲你提到了WiX中的錯誤......我相信Rob會讚賞補丁提交。 – 2011-01-12 16:41:05

1

看看Preventing Confidential Information from Being Written into the Log File文章,尤其是點#3。它基本上說,如果一個屬性被隱藏,但是調試策略被設置爲一個特殊值,命令行仍然會以明文形式轉儲到日誌文件中。驗證這是否是您遇到上述行爲的原因。

而且我不相信它可以在QuietExec CA的錯誤:)

+0

感謝您的提示,但設置調試策略(這是通過註冊表完成)沒有任何效果。我會繼續努力,而不是把它稱爲QuietExec CA中的一個bug - 以免冒犯任何人:)。 – 2011-01-12 17:25:32

2

花了幾個Google,並嘗試解決的辦法是創建proproperty和分配隱藏=「是」之前將值分配給屬性。在你的代碼中,你應該在賦值之前創建一個新的屬性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 ....