Как установить приложение менеджера утилит, чтобы оно могло работать на защищенном рабочем столе? - PullRequest
0 голосов
/ 13 апреля 2009

Я попытался написать приложение Utility Manager и пытаюсь протестировать его на WinXP SP3. Я добавил его в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\Utility Manager, и он хорошо работает при загрузке менеджера утилит, когда я вошел в систему.

Однако, когда я пытаюсь загрузить его из Utility Manager при запуске перед входом в систему (через Window + U) или из заблокированного экрана, появляется сообщение об ошибке (примерно, так как это немецкая версия WinXP) " Это приложение не может быть запущено на защищенном рабочем столе. Обратитесь к системному администратору для получения необходимых разрешений ".

Что я должен сделать по-другому, чтобы сделать это на безопасном рабочем столе?

[б] редактирование: [/ b] Я последовал совету Дэвида Поупа и попытался отладить utilman.exe (используя OllyDebug , так как я более привык к этому, чем использование нового отладчика ..., и попросил его прервать процесс создания). Кажется, мое приложение вообще не запускается. Поскольку у OllyDebug, казалось, были отключены некоторые функции (например, прерывание при вызове API) (возможно, потому, что процесс выполняется от имени другого пользователя), я дважды проверил его с помощью Sysinternals Process Monitor. При запуске экранной клавиатуры появляется событие «Процесс создан»; при запуске моего инструмента событие не появляется.

Еще одно замечание: когда я вставляю osk.exe (экранную клавиатуру) в мой новый ключ реестра, он работает нормально (у меня в меню две записи на экранной клавиатуре), но если я скопирую osk.exe osk2.exe и поместите osk2.exe в качестве исполняемого файла, копия экранной клавиатуры запускается на незащищенном рабочем столе. Таким образом, перед вызовом исполняемого файла должна быть какая-то проверка (в отношении имени файла + содержимого)? Замена magnify.exe моим инструментом (или osk.exe) приведет к тому, что один из них не будет работать после следующей перезагрузки (при перезапуске утилиты ??).

Другими словами: он будет работать только в том случае, если файл называется osk.exe и является экранной клавиатурой, или файл называется magnify.exe и является увеличителем.

Это также не создает никакой информации в журнале событий.

Ответы [ 3 ]

3 голосов
/ 20 апреля 2009

Следовали ли вы всем инструкциям на этой странице ? Кажется, он охватывает больше параметров реестра, чем вы описали.

Редактировать: Как вы указали, похоже, что эта страница для Vista. Раздражает то, как MSFT отбирает унаследованную информацию и затрудняет ее поиск ...

Одна вещь, которую нужно проверить, это журналы событий - возможно, они содержат подсказку. Может оказаться возможным повысить уровень аудита, чтобы увидеть больше данных, связанных с безопасностью.

У меня нет вашего кода, поэтому я не смог отладить его сам, но я смог подключить отладчик к utilman.exe и получить контроль в тот момент, когда он запускает утилиты на безопасном рабочем столе. Возможно, если вы сделаете это, вы сможете выяснить нарушение безопасности.

  1. На целевом компьютере:
    • Установите средства отладки для Windows.
    • Включить доступ по RDP.
    • Блокировка экрана.
    • Нажмите Win-U, чтобы вызвать диспетчер утилит и оставить его включенным.
    • Убедитесь, что ваши символы и источник видны на цели по тому же пути, по которому они были скомпилированы на компьютере разработчика.
  2. на другой машине:
    • RDP на целевой компьютер как пользователь с привилегиями отладки / администратора.
  3. В сеансе RDP:
    • Запустите WinDBG и присоедините к процессу utilman (клавиша F6)
    • Если он не входит в отладчик, нажмите ctrl-break.
    • Выполните .childdbg 1, чтобы убедиться, что ваша утилита загружается в этот экземпляр отладчика при запуске.
    • Выполните g, чтобы продолжить работу.
  4. Вернитесь на консоль целевого компьютера (экран входа в систему):
    • Запустите вашу утилиту из менеджера утилит. Отладчик (в сеансе RDP) должен прерваться внутри нового процесса, и вы сможете отлаживать его оттуда.

(У меня нет Visual Studio на компьютере, на котором я это пробовал; если у вас есть VStudio на целевой машине, вы, вероятно, можете использовать его вместо WinDBG.)

Если ваша утилита даже не загружается, то Windows выполняет какую-то проверку перед вызовом CreateProcess. Журналы безопасности могут вам помочь.

Редактировать 2 Я пытался использовать утилиту strings , чтобы найти программу, которая генерирует диалоговое окно, но я использую английский WinXP, поэтому у меня нет фактической строки , Я также безуспешно искал «osk.exe» и т. Д.

Если вы можете выяснить, что EXE выводит в этом диалоговом окне (возможно, utilman, возможно, winlogon ...), вы сможете подключиться к нему с помощью отладчика и пройти назад по стеку, чтобы найти проверку на наличие ошибок , Как только у вас будет общая близость неудачной проверки, вы сможете установить точку останова ранее в пути кода, которая должна пробиться в отладчик при следующей попытке запуска. Вы должны быть в состоянии пройти через неудачную проверку оттуда. Для всего этого убедитесь, что у вас есть символы ОС , поскольку это должно значительно облегчить чтение "указателей". Я не знаю, поддерживает ли ваш отладчик сервер символов.

1 голос
/ 24 апреля 2009

Ваша программа имеет цифровую подпись? Откуда запускается ваша программа?

Попробуйте использовать его в одном из следующих защищенных путей:

* ..\Program Files\ (and subfolders)
* ..\Program Files (x86)\ (and subfolders, in 64-bit versions of Windows only)
* ..\Windows\System32\ 

Вы видели http://netsecurity.about.com/od/secureyourwindowspc/qt/uacuiaccess.htm? Кажется, это описывает кое-что из того, что вы пытаетесь сделать.

0 голосов
/ 15 апреля 2009

Я не уверен, каково происхождение этого сообщения, но я знаю, что существует объект рабочего стола под названием Winlogon, который является безопасным рабочим столом CTRL + ALT + DELETE. Вы можете использовать OpenDesktop и SetThreadDesktop , прежде чем создавать какие-либо окна в потоке графического интерфейса, и это должно позволить вашим окнам отображаться там. Может быть другой способ сделать это с помощью специальных API в более новых версиях Windows.

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