Подпись и RequireAdministrator исполняемый файл запускается из временной папки? - PullRequest
5 голосов
/ 13 мая 2010

я показал мой исполняемый файл как администратор с требованием:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 

    <!-- Disable Windows Vista UAC compatability heuristics -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo> 
</assembly>

А потом я подписал его цифровой подписью.

Но затем, когда я запустил исполняемый файл, я заметил кое-что странное: имя исполняемого файла в диалоге Согласие изменилось с PingWarning.exe на pinxxxx.tmp; как будто временная копия была сделана, и она запускается:

альтернативный текст http://i42.tinypic.com/nmkppz.jpg

Я выкопал Process Montior, чтобы узнать, создает ли кто-нибудь файл *. Tmp , когда я запускаю свой исполняемый файл, и есть:

альтернативный текст http://i42.tinypic.com/10o1b8g.jpg

Служба Информация о приложении внутри этого конкретного контейнера svchost намеренно копирует мой исполняемый файл во временную папку Windows и запрашивает оттуда пользователя «Согласие»; давая неверное имя файла.

После получения согласия исполняемый файл запускается из исходного местоположения: текст ссылки http://i43.tinypic.com/104noub.jpg

Файл не копируется во временную папку, если я не подписал его цифровым способом:

альтернативный текст http://i43.tinypic.com/14kvevd.jpg


Так что моя проблема в том, что неверное имя файла появляется в диалоговом окне согласие , когда я ставлю цифровую подпись мой исполняемый файл, который проявляется как requireAdministrator.

Что делать?


Обновление:

Самое близкое объяснение, которое я могу найти, взято из Uninformed.org (http://uninformed.org/index.cgi?v=8&a=6&p=3):

В случае запроса на запуск программа, запрашивающая uiaccess, appinfo! RAiLaunchAdminProcess is позвонил на обслуживание запроса. Затем процесс проверяется на (жестко закодированный) набор разрешенных каталоги по AppInfo! AiCheckSecureApplicationDirectory . После проверки, что программа запускается из допустимого каталог, контроль в конечном итоге передано в appinfo! AiLaunchProcess который выполняет оставшуюся работу необходимо для обслуживания запуска запрос. На данный момент, из-за «безопасный» каталог приложений требование, это не возможно для ограниченный пользователь (или пользователь, работающий с низкая целостность, если на то пошло) поместите пользовательский исполняемый файл в любой из «безопасные» каталоги приложений.

Подсказка - это некоторые (недокументированные, неуказанные) жестко закодированные пути, в которых «разрешено» находиться приложению.

Другое - для программы, запрашивающей uiaccess . В моем случае у меня не было uiAccess="false" в моем первоначальном манифесте. Но изменив манифест, включив в него доступ без пользовательского интерфейса:

Но это не устранило исходную проблему.


Обновление два:

Из MSDN ():

Важно
Приложения с Флаг uiAccess, установленный в true, должен быть Authenticode подписан, чтобы начать правильно. Кроме того, приложение должно проживать в защищенном месте в файловая система. \ Program Files \ and \ windows \ system32 \
в настоящее время это два допустимых защищенных местоположения.

Это похоже на то, что исполняемый файл, запрашивающий uiAccess, должен находиться в разрешенном месте; за исключением того, что я не прошу uiAccess.

1 Ответ

2 голосов
/ 14 мая 2010

Я видел ту же проблему с неподписанными приложениями, в частности, с установщиками NSIS и InnoSetup (небольшая проблема, когда установщики 1gb + копируются в% windir% \ temp и затем сканируются с помощью согласия.exe).

В трекере ошибок NSIS есть запись . Когда я расследовал это, я связывался с кем-то @ MS, и они должны были связаться с кем-то, кто работал над UAC, но ничего из этого не получалось. Единственная применимая информация, которую я получил от этого разговора, была эта цитата:

Один из друзей в Windows смутно помнил, что это могло быть смягчение для беспокойства о подделке файла, в то время как диалог доверия отображается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...