Как я могу запретить WIX CAQuietExec регистрировать командную строку? - PullRequest
1 голос
/ 12 января 2011

Для предотвращения появления командных окон во время установки я использую встроенное пользовательское действие WIX CAQuietExec.

Сначала я определю командную строку:

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

Примечание: свойство ПАРОЛЬ определено как Скрытое. Это не позволяет установщику Windows записать значение свойства в журнал.

Затем я звоню во встроенное расширение WIX:

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

Это отлично работает.

Однако, когда я захожу во временную папку и открываю журнал MSI, я вижу следующую запись:

CAQuietExec: "C: \ Program Файлы \ MyExe.exe "/ пароль INCLEARTEXT

т.е. пароль отображается в виде открытого текста и не скрыт.

Как запретить CAQuietExec регистрировать пароль в виде открытого текста?

Ответы [ 5 ]

2 голосов
/ 05 марта 2013

Взял несколько гуглов и попытался найти решение, чтобы создать свойство и назначить 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 голосов
/ 12 января 2011

В src \ ca \ wcautil \ qtexec.cpp есть эта строка в функции QuietExec:

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

, который регистрирует командную строку в подробном режиме. Нет никаких условий, чтобы остановить это от регистрации.

1 голос
/ 12 января 2011

Есть много способов атаковать ваш пароль.Я мог бы посмотреть на MSI в ORCA.Я мог бы запустить путь WMIC win32_process, пока он работает, и увидеть аргументы командной строки.Сокрытие этого от журнала будет иметь небольшое значение.

Я бы предложил зашифровать пароль, который хранится в MSI, и ваш exe-файл способен расшифровать его.В зависимости от того, для чего используется этот пароль, вы можете захотеть принять и другие меры, например, заставить EXE создать случайный пароль во время выполнения и зашифровать / сохранить его где-нибудь на случай, если какой-то другой процесс сможет получить к нему доступ.

Если пароль поступает из пользовательского ввода в последовательности пользовательского интерфейса, вы можете иметь настраиваемое действие, которое шифрует данные как второе свойство, а затем передает его в EXE.Или вы можете просто преобразовать исходный код C ++ в QuietExec и изменить его так, чтобы он не записывался в файл журнала.

1 голос
/ 12 января 2011

Взгляните на Предотвращение записи конфиденциальной информации в статью файла журнала, особенно пункт № 3.В основном это говорит о том, что если свойство скрыто, но для политики отладки задано специальное значение, командные строки все равно будут выгружаться в файл журнала в виде открытого текста.Проверьте, может ли это быть причиной, по которой вы испытываете упомянутое поведение.

И я не верю, что это может быть ошибкой в ​​QuietExec CA:)

1 голос
/ 12 января 2011

Тег CustomAction имеет атрибут HideTarget, который должен препятствовать записи данных пользовательских действий в журнал.

...