С Новым годом! Форум программистов, компьютерный форум, киберфорум
_lunar_
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Исследование сервиса "Обнаружение интерактивных служб" (UI0Detect) Часть 3: Эпилог

Запись от _lunar_ размещена 30.01.2021 в 13:33
Показов 7381 Комментарии 0
Метки c, c++, winapi

Исследование сервиса "Обнаружение интерактивных служб" (UI0Detect) Часть 1: Windows Vista - Windows 7
Исследование сервиса "Обнаружение интерактивных служб" (UI0Detect) Часть 2: Windows 8 - Windows 10

В заключительной части много слов не будет. Я лишь скажу то, что мне всё таки удалось восстановить вырезанную Майкрософтом часть системы - сервис "Обнаружение интерактивных служб".
Очень долго я пытался заставить работать данный сервис на Windows 10 сборки 20H2 (2009), используя файлы UI0Detect.exe, WlS0WndH.dll и wininitext.dll от Windows 10 сборки 1709.
Делал разные хуки, инициализировал функции, просто подсовывал системе wininitext.dll, но wininit.exe на отрез отказывался запускать хукнутую PrimaryTerminalAndHookWorker с функцией RegisterSession0ViewerWindowHookDll.
При этом я знал, что платный инструмент ребят из FireDaemon прекрасно работает на сборке 1803 и последующих, в точности повторяя принцип работы дефолтового UI0Detect.
Поэтому, я решил написать свой сервис и попробовать его запустить.
Файлы FireDaemon дизассемблировать я не стал, т.к. они запакованы протом и тратить время на анпак я не собирался, да и ничего нового в части перехода в сессию 0 относительно UI0Detect я бы не увидел.
Тем более зачем мне это нужно, если я полностью дизассемблировал дефолтовый UI0Detect с имеющимися у Microsoft символами.

В итоге, после долгого тестирования и доработки сервиса мне удалось перейти в сессию 0 через стороннюю программу. Это была победа!
Далее появилась новая проблема - а как же теперь вернуться обратно в сессию 1?
Возврат я делал через меню ProcessHacker: сначала отключал сессию 1 Logoff (без этого перезагрузка из сессии 0 невозможна), затем перезагружал компьютер.
Такое положение вещей меня не устраивало. Я хотел быстрого перемещения из одной сессии в другую, как это делали дефолтовый UI0Detect и FireDaemon.
После долгих хождений по ядру ОС я всё же понял что необходимо для переключения в другую сессию.
С переходом получилось великолепно - одна команда и мы в сессии 0.
А с возвратом - дефолтовый UI0Detect запускается сразу в двух сессиях: основной поток в сессии 0 (как служба), и дочерний в сессии 1.
Я думаю это сделано для shared memory и глобальных данных, чтобы можно было видеть запросы в той и другой сессии и осуществлять переходы.
Ерундой этой я заниматься не стал и написал дополнительную программу для возврата в сессию 1.
В итоге, после перехода в сессию 0, вы увидите соответствующее уведомление (MessageBox), при нажатии на кнопку OK которого, будет осуществлен переход в сессию 1.

Теперь небольшая инструкция как осуществлять переход. Я не стал писать отдельное приложение, а просто включил данный функционал в свою программу.
Как мы помним из 2 части - Microsoft вырезала в Windows 10 поддержку устройств ввода\вывода в сессии 0 из драйвера win32kfull.sys.
Поэтому первое что нужно сделать - установить сторонний драйвер всё тех же FireDaemon (ребятам спасибо за дров, самому мне конечно же лень писать).

1. Драйвер нужно устанавливать всем пользователям Windows 10!
Для Windows Vista, Windows 7 и Windows 8\8.1 устанавливать его не обязательно, клава-мышь будет работать через дефолтовый win32kfull.sys в сессии 0.
Поэтому сразу после скачивания переходите в папку UI0Input и устанавливаете драйвер через FDUI0Input.inf (правой кнопкой мыши - Установить).
После установки драйвера обязательно перезагрузите компьютер.

2. Запустите ReqAdmin.exe
Для всех пользователей Windows 10 первое что нужно сделать - выполнить команду ui0 (Enter) (делается один раз - сервис будет запускаться вместе с системой в остановленном состоянии).
На сборках до 1709 включительно (у тех, кто имеет дефолтовый UI0Detect) эта команда внесёт соответствующие изменения в реестр (без них сервис не запустится).
На сборках 1803 и последующих эта команда полностью взведёт новый, написанный мною, сервис UI0Detect (разместит файл UI0Detect.exe в Windows\System32, внесёт изменения в реестр).
В результате на всех Windows (от Vista до 10), если вы выполните команду os (Enter) UI0Detect (Enter), должны увидеть следующее
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 375
Размер:	23.8 Кб
ID:	6758
Сервис будет находится в остановленном состоянии (SERVICE_STOPPED), и не иметь родительского процесса (PARENT_PROCESS_IS_NOT_RUNNING).

3. На всех Windows выполните команду ss (Enter) UI0Detect (Enter). Снова выполнив команду os (Enter) UI0Detect (Enter)
Нажмите на изображение для увеличения
Название: 2.png
Просмотров: 342
Размер:	26.0 Кб
ID:	6759
вы увидите, что сервис запущен (SERVICE_RUNNING) и имеет соответствующий ProcessId.

3.1. На Windows Vista, Windows 7, Windows 8\8.1, Windows 10 включительно до сборки 1709 после выполнения команды ss (Enter) UI0Detect (Enter) вы сразу увидите сообщение системы
Нажмите на изображение для увеличения
Название: 7.png
Просмотров: 352
Размер:	25.3 Кб
ID:	6770
Нажав на Просмотреть сообщение, вы сразу попадёте в сессию 0 (а вот пользователям Windows 10 сборки 1803 и последующих нужно сделать ещё немного).

4. Собственно всё готово к переходу в сессию 0. Но чтобы там не было совсем скучно, давайте запустим проводник Explorer++
Для этого выполните команду utl (Enter) 1 (Enter) 2 (Enter) 1 (Enter) 1 (Enter)
Нажмите на изображение для увеличения
Название: 3.png
Просмотров: 293
Размер:	22.5 Кб
ID:	6760
это запустит Explorer++ как системный процесс в сессии 0 на рабочем столе Default. Вы его не увидите до тех пор, пока не перейдёте в сессию 0.

5. Выполнив обязательное условие (на всех Windows сервис должен быть со статусом Выполняется (SERVICE_RUNNING)) можно сделать переход.
Для этого выполните команду sw (Enter) Default (Enter)
Нажмите на изображение для увеличения
Название: 4.png
Просмотров: 323
Размер:	14.6 Кб
ID:	6761

Я вас поздравляю, вы находитесь в окружении системы
Кликните здесь для просмотра всего текста
Название: 5.jpg
Просмотров: 2283

Размер: 158.0 Кб


Там можно спокойно работать (этот блог я пишу из сессии 0), запускать программы, слушать музыку, серфить в интернете. И кстати браузер в сессии 0 открывается просто молниеносно, да и в целом там всё работает быстрее, т.к. нету целой физической оболочки пользовательского окружения, и все запросы отправляются прямиком в систему.
Единственно что не работает в сессии 0 - это графический драйвер (Microsoft об этом сразу заявляли). Так что запустить игру, или сделать интерфейс окон похожим на привычный пока что не получится.
А так, можно запустить какую-нибудь оболочку и превратить окружении сессии 0 в обычный рабочий стол (как это делается в linux системах).
А вот при попытке запуска дефолтового проводника Windows (explorer.exe), сначала произойдёт его первичная инициализация
Кликните здесь для просмотра всего текста
Название: 6.jpg
Просмотров: 2293

Размер: 135.4 Кб

но через несколько секунд он "упадёт". Хотя при этом, в Windows 7 explorer.exe спокойно инициализируется и работает.

По мере обновления программы, буду прикреплять новые сборки, так что если кому интересно поглядывайте иногда)
Если возникнут какие-либо вопросы, пишите в комментариях.

Скачать программу вы можете ЗДЕСЬ
Метки c, c++, winapi
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru