Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/48: Рейтинг темы: голосов - 48, средняя оценка - 4.60
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21

KernelExplorer without driver

25.10.2020, 03:26. Показов 11194. Ответов 74
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как-то давно поставил себе цель сделать некий инструмент на подобии WinDbg и Process Hacker но без использования драйвера.
Посмотреть как далеко может пустить ОС код, запущенный из-под обычного юзера, путем повышения прав, привилегий и т.д.
Но на какое-то время забросил этот проект. И вот сейчас решил восстановить, добавил функционала, поправил ошибки.

Из возможностей на данный момент:
1. открытие дескриптора любого процесса (Protected и ProtectedLite процессы открываются только для чтения)
2. вывод информации о DACL, SACL, таблиц доступа и аудита (в планах добавление функционала для изменения этих данных)
3. полный контроль над токеном процесса (включение, отключение и удаление привилегий)
4. завершение процесса (кроме Protected и ProtectedLite процессов)
Всё что я сейчас перечислил, Process Hacker делает только с включенным драйвером.
5. создание процесса с учетной записью SYSTEM
Здесь немного подробнее расскажу. Перед созданием процесса нужно открыть процесс, на основе которого будет создан новый.
Если открывается процесс, запущенный в SessionId 0, то и новый процесс будет запущен в нулевой сессии.
Это означает, что оконную процедуру вы не увидите, т.к. у каждой сессии свая станция (Windows Station) и у каждой станции свой рабочий стол.
Если открывается процесс, запущенный в SessionId 1, то и новый процесс будет запущен в этой же сессии с оконными процедурами, но как NT_AUTHORITY\SYSTEM (будь то блокнот или ещё что), при условии если parentprocess тоже был SYSTEM.
В следующем обновлении будет реализован механизм выбора рабочего стола (с Winlogon уже экспериментировал и запускал программы на экране блокировки, т.е. чтобы что запустить программу не нужно знать логин и пароль от ОС).

На данный момент никакой нумерации билдов не виду, т.к. попутно проектирую GUI версию (на ней планирую делать нумерацию).

Немного скринов)
Собственно приглашение пользователя ввести команду (всегда начинайте с op - открытие процесса, т.к. данная команда собирает всю необходимую информацию для последующих действий)

Пример вывода информации

Манипуляции с токеном


В общем если у кого-то есть предложения по расширению функционала, буду рад выслушать.

PS: для запуска необходимы права администратора (в дальнейшем эту проблему решу так же, как и у Process Hacker), и набор библиотек VC++ runtime (проект собран на VS2019).
Вложения
Тип файла: 7z KernelExplorer.7z (21.9 Кб, 35 просмотров)
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.10.2020, 03:26
Ответы с готовыми решениями:

MS SQL driver type 4 ошибка: [Microsoft][SQLServer JDBC Driver]No ResultSet set was produced.
Всем привет! Может мне кто-нибудь помочь с моей проблемой связанной с MS SQL driver type 4? Я использую для разработки проекта следующее:...

Ошибка при создании драйвера. Device driver does not install on any devices, use primitive driver if this is intended
Не могу создать драйвер ядра из-за данной ошибки. Помогите пожалуйста))) INF ФАЙЛ ; ; hellodriver.inf ; ...

wpd file system volume driver has a driver problem
Добрый вечер. Выносной хард видит диск но его нельзя открыть. Пробовал встроенным фиксом, он пишет wpd file system volume driver has a...

74
25.10.2020, 13:16

Не по теме:

Цитата Сообщение от _lunar_ Посмотреть сообщение
Как-то давно поставил себе цель сделать некий инструмент на подобии WinDbg и Process Hacker но без использования драйвера.
Цитата Сообщение от _lunar_ Посмотреть сообщение
набор библиотек VC++ runtime
Прежде чем пытаться обходится без драйверов нужно было научится обходится без установки рантайм либ.

0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
25.10.2020, 15:01  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Прежде чем пытаться обходится без драйверов нужно было научится обходится без установки рантайм либ.
и что это дало бы?
или тебе просто лень установить то, что по дефолту должно стоять в любом ПК.

для особо одаренных объясню: если код пишется на C++ с использованием IDE Visual Studio, неизбежно будет использоваться CRT среда.
а переписывать всю эту кашу с CRT себе в хидеры нормальный кодер в жизни не будет.

жду адекватных коментов, а не этот вброс..
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
25.10.2020, 15:37
_lunar_, интересный эксперимент, однако я бы запустил если бы вы опен сорснули эту штуку, а то куда она там лезет и что делает - неизвестно.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
25.10.2020, 17:02  [ТС]
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
если бы вы опен сорснули эту штуку
в планах есть выложить исходники на github, но позже (возможно с релизом GUI версии).
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
25.10.2020, 17:14
_lunar_, вот такую ошибку получил. Это связано с VS runtime? Я думаю что он у меня установлен.
Миниатюры
KernelExplorer without driver  
1
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
25.10.2020, 19:03  [ТС]
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
Это связано с VS runtime?
нет, не с VC runtime.

извиняюсь, забыл сразу указать: на данный момент программа собрана только для Windows 10 (возможно будет работать и на Windows 8/8.1).
некоторые функции, которые я применяю, появились в более поздних SDK (я работаю с последней версией), а следовательно в более старых ядрах этих функций просто нет.
в дальнейшем буду переводить некоторые функции на Nt-заглушки (NativeAPI), которые есть и в Windows 7 и в Windows 10.
0
Эксперт по электронике
6577 / 3204 / 335
Регистрация: 28.10.2011
Сообщений: 12,504
Записей в блоге: 7
25.10.2020, 21:46

Не по теме:

Цитата Сообщение от _lunar_ Посмотреть сообщение
или тебе просто лень установить то, что по дефолту должно стоять в любом ПК.
Зачем мне ставить рантайм только чтобы протестировать программу?

Вам как разработчику плевать на пользователей? Вот так появляются необоснованные требования к железу и современные программы по всем параметрам уступающие тем что выпущены 20 лет назад, требуют не ниже Windows 10, 8-ми ядреный проц и 128 ГБ ОЗУ и несколько десятков гигов на диске, потому что прога тянет многогиговый рантайм.

Цитата Сообщение от _lunar_ Посмотреть сообщение
если код пишется на C++ с использованием IDE Visual Studio, неизбежно будет использоваться CRT среда.
Если не в курсе, Си программа может обходится msvcrt.dll и системными библиотеками ОС. Или вовсе скомпилировать статически с рантаймом.

Цитата Сообщение от _lunar_ Посмотреть сообщение
переписывать всю эту кашу с CRT себе в хидеры нормальный кодер в жизни не будет.
Нормальный кодер понизит требование к версии рантайм-dll на те что по умолчанию есть в ОС или если это затруднительно - прилинкует статически.



Цитата Сообщение от _lunar_ Посмотреть сообщение
на данный момент программа собрана только для Windows 10
Лучше бы вы использовали драйверы но оставили совместимость с ОС начиная с XP, в крайнем случае Win7. Это пример именно того что я написал выше. Ваша прога более требовательная чем WinDbg или Process Hacker, а значит уступает им.
1
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
25.10.2020, 23:15  [ТС]
locm, подфорум называется "Бета-тест", и на данном этапе я не особо уделяю внимание совместимости со старыми ОС, наличию или отсутствию sdk'шных библиотек и прочему.
ок, я вас услышал, но тестирование поддержки ХР и всего того, что вы тут описываете, если и будет, то гораздо позже.
сейчас я занимаюсь логикой программы, а не адаптированием, т.к. разработка находится на самых ранних стадиях.

Цитата Сообщение от _lunar_ Посмотреть сообщение
В следующем обновлении будет реализован механизм выбора рабочего стола.
Итак, что нового:
1. больше не нужно сперва открывать процесс (op), а уже потом создавать новый (cp), можно сразу создавать новый.
2. благодаря новой логике подбора процесса реализован механизм выбора сессии.
немного FAQ:
перед тем как пользователь увидит рабочий стол и всё остальное на экране монитора, происходит загрузка основных модулей ОС и ядра.
начиная с Vista реализован механизм работы ОС в сессиях.
загрузка ядра и модулей (до рабочего стола) происходит в нулевой сессии - SessionId 0.
в сессии создаётся рабочая станция, а уже в рабочей станции создаются рабочие столы.
после загрузки ядра и модулей создаётся новая сессия SessionId 1 (отсчитывается по порядку).
если вы сделаете "Выход из системы", то после захода из Winlogon сессия увеличится на единицу - SessionId 2.
если вы сделаете "Смену пользователя", то после захода из Winlogon сессия продолжится в SessionId 1.
увидеть рабочие столы нулевой сессия невозможно (оконные процедуры не взаимодействуют между сессиями), но к ним можно обращаться через пайпы, события и другие каналы.
рабочих станций в Windows 10 несколько:
WinSta0 - основная рабочая станция (она является интерактивной (interactive window station))
Service-0x0-3e4$ - рабочая станция служб с правами NT AUTHORITY\NETWORK SERVICE: 0x3e4 (не интерактивная рабочая станция (non-interactive window station))
Service-0x0-3e5$ - рабочая станция служб с правами NT AUTHORITY\LOCAL SERVICE: 0x3e5 (не интерактивная рабочая станция (non-interactive window station))
Service-0x0-3e7$ - рабочая станция служб с правами NT AUTHORITY\SYSTEM: 0x3e7 (не интерактивная рабочая станция (non-interactive window station))
и несколько рабочих станций вида Service-0x0-67c25$ - рабочая станция пользователя user\USER: 0x67c25
касаемо рабочих столов: в Windows 10 я насчитал их три - Default, Winlogon и Disconnect.
Default - основной рабочий стол (то, что видит пользователь)
Winlogon - рабочий стол окна запроса логина и пароля при входе в систему
Disconnect - пока не разобрался что это за рабочий стол, но подозреваю связан он с "Смена пользователя" или "Выйти"

в общем можете сами поэкспериментировать:
я создал новый процесс блокнота (notepad.exe) в сессии пользователя (USER_SESSION_ID) и на рабочем столе Winlogon

заблокировал компьютер, попал на окно запроса входа в систему, нажал alt+tab и увидел созданный мною блокнот
Вложения
Тип файла: 7z KernelExplorer.7z (22.8 Кб, 5 просмотров)
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,243
26.10.2020, 09:27
Цитата Сообщение от _lunar_ Посмотреть сообщение
и набор библиотек VC++ runtime (проект собран на VS2019).
Ну так и кладите их в архив вместе с вашим приложением.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
26.10.2020, 10:03  [ТС]
перекомпилировал с многопоточной линковкой статичных либ.
проверил на ПК без установленных библиотек vc++ runtime.
теперь должно работать без установки дополнительных sdk пакетов, но и размер соответственно увеличился в разы.
Вложения
Тип файла: 7z KernelExplorer.7z (152.2 Кб, 11 просмотров)
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,243
26.10.2020, 10:08
В 2020-м году о размере дистрибутива переживать не надо)
1
26.10.2020, 10:27

Не по теме:

Интересно, но поздно - я снова на линуксах. :yahoo:

0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
26.10.2020, 12:56  [ТС]
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
вот такую ошибку получил
т.к. отладчик ещё не реализован (только в черновом варианте) изменил WaitForDebugEventEx на WaitForDebugEvent
суть в том, что WaitForDebugEventEx правильно отрабатывает строки юникода и доступна эта функция начиная с Windows 10

все остальные функции в программе требуют
Minimum supported client - Windows XP
кроме ProcessIdToSessionId (как я уже упомянул сессии появились в Windows Vista) и GetFinalPathNameByHandle (опять же функция применяется для отладчика)
Minimum supported client - Windows Vista
попробуйте, должно теперь работать.
Вложения
Тип файла: 7z KernelExplorer.7z (152.1 Кб, 8 просмотров)
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,243
26.10.2020, 12:58
Цитата Сообщение от _lunar_ Посмотреть сообщение
Minimum supported client - Windows XP
Я бы забил на поддержку этой ОС. На ней полтора землекопа сидят.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
26.10.2020, 13:14  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Я бы забил на поддержку этой ОС.
а я и не парюсь на этот счёт
даже по той причине, что пол функционала программы просто не заработает на XP (та же тема с сессиями).
поэтому компилятор не настраиваю с "Поддержка Windows XP", смысла нет..
0
Эксперт по электронике
6577 / 3204 / 335
Регистрация: 28.10.2011
Сообщений: 12,504
Записей в блоге: 7
26.10.2020, 18:36
Цитата Сообщение от _lunar_ Посмотреть сообщение
размер соответственно увеличился в разы.
Он гораздо меньше чем у пакета рантайм-библиотек.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
26.10.2020, 20:06  [ТС]
забыл ещё про одну функцию, не поддерживаемую Windows 7 - GetProcessInformation
у неё минимум Windows 8, поэтому для тех кто всё же хочет попробовать, в этом аттаче будет лежать LdrModuleEx.dll с отключенным функционалом по открытию процесса (позже перепишу её на Nt)

но я всё таки добрался до ПК с Windows 7 и вот что обнаружил
при создании процесса в сессии ОС (нулевая сессия) на рабочем столе Default система делает запрос на переключение к тому рабочему столу


и вот что мы наблюдаем при соглашении на переход


поздравляю товарищи! мы находимся на рабочем столе ядра операционной системы (SessionId 0 -> WinSta0 -> Default)

переключится на рабочие столы Winlogon и Disconnect не удалось (с Winlogon ещё поэкспериментирую, есть задумка как его отобразить)
Вложения
Тип файла: 7z LdrModuleEx.7z (134.9 Кб, 6 просмотров)
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
27.10.2020, 00:14  [ТС]
служба "Обнаружение интерактивных служб" (UI0Detect.exe) начала свое существование с Windows Vista.
продолжила свой путь в Windows 7, Windows 8, Windows 8.1
а убрали её из Windows 10 начиная с версии 1803 и более поздних (в 1709 и более ранних она присутствует).
эта служба как раз и переключает рабочие столы между сессиями.

решил продолжить играть с семеркой и посмотреть что она позволит с собой сделать, оказывается много чего.
первым делом создал процесс explorer.exe в нулевой сессии на рабочем столе Default
перешёл и посмотрел как ОС настраивает мне рабочий стол


вернулся в пользовательскую сессию по ctrl+alt+del и создал процесс ProcessHacker.exe, снова перешёл в нулевую сессию


убедился что процессы, созданные через мою программу принадлежат нулевой сессии


ProcessHacker запущен без драйвера, и имеет только токен, который я ему предоставил


заходим в ядро (процесс System) и манипулируем токеном (и другими ресурсами процесса), который в обычном режиме доступен через драйвер (в данном случае просто повключал привилегии)


вот такой у меня вечерок экспериментов с Win7 получился)
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
27.10.2020, 00:25  [ТС]
PS: GetProcessInformation переписал на NtQueryInformationProcess(..., ProcessProtectionInformation, ...) и перебрал биты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
typedef enum _PS_PROTECTED_TYPE {
    PsProtectedTypeNone,
    PsProtectedTypeProtectedLight,
    PsProtectedTypeProtected,
    PsProtectedTypeMax
} PS_PROTECTED_TYPE;
 
typedef enum _PS_PROTECTED_SIGNER {
    PsProtectedSignerNone,
    PsProtectedSignerAuthenticode,
    PsProtectedSignerCodeGen,
    PsProtectedSignerAntimalware,
    PsProtectedSignerLsa,
    PsProtectedSignerWindows,
    PsProtectedSignerWinTcb,
    PsProtectedSignerWinSystem,
    PsProtectedSignerApp,
    PsProtectedSignerMax
} PS_PROTECTED_SIGNER;
 
typedef struct _PS_PROTECTION {
    union {
        UCHAR Level;
        struct {
            UCHAR Type : 3; // The first 3 bits contain the type of protected process
            UCHAR Audit : 1; // Reserved
            UCHAR Signer : 4; // The top 4 bits contain the protected process signer
        };
    };
} PS_PROTECTION, * PPS_PROTECTION;
Windows 7 спокойно проглотила NtQueryInformationProcess, но возникли некоторые сложности с модулем SecurityDescriptor
что-то не хочет семерка отображать инфу и крашит прогу где-то вначале.
поэтому выкладывать версию с переделанной GetProcessInformation смысла нет, буду тестировать и выявлять ошибку, и уже потом выложу.
в любом случае, для завода процесса в любой сессии, на любом рабочем столе и на любой ОС я уже всё выложил ранее
так что кому интересно исследуйте возможности программы и операционной системы)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.10.2020, 00:25
Помогаю со студенческими работами здесь

QODBC (MS SQL SERVER) . Driver not loaded Driver not loaded
Собрал себе драйвер QODBC. mingw x86. QSqlDatabase::drivers() возвращает (QSQLITE, QMYSQL, QMYSQL3, QODBC, QODBC3, QPSQL, QPSQL7) ....

На машине клиента "QSQLITE" выдает: Driver not loaded Driver not loaded
#include <QSqlDatabase> #include <QSqlQuery> #include <QSqlRecord> #include <QSqlError> #include <QDebug> #include <QFileDialog> ...

Ошибка - Driver not loaded Driver not loaded
Собрал драйвер MySQL. Пытаюсь запустить простое приложение - подключиться к базе и выполнить sql - запрос. Но получаю сообщение , которое...

Wi-FI driver
Нету драйверов на ОС. Помогите их настроить. Прочитал множество информации по установке драйверов на Д, но все ровно не получается....

Wi-Fi driver
Здравствуйте. У меня Ubuntu 10.04 Не могу установить драйвер для вай фая. http://www.broadcom.com/support/802.11/linux_sta.php ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru