|
|
|
KernelExplorer without driver25.10.2020, 03:26. Показов 11695. Ответов 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).
1
|
|
| 25.10.2020, 03:26 | |
|
Ответы с готовыми решениями:
74
MS SQL driver type 4 ошибка: [Microsoft][SQLServer JDBC Driver]No ResultSet set was produced.
wpd file system volume driver has a driver problem |
|
|
||||||
| 27.10.2020, 20:00 [ТС] | ||||||
|
нашёл причину падения программы на Windows 7 - одна из этих функций работает не адекватно:
плюс ещё эта убогая cmd-консоль, которая не имеет вертикальной прокрутки и не разворачивается на весь экран (как conhost.exe на Win10), вымораживает весь мозг.. на данный момент мне семерка интересна только тем, что её системные процессы не имеют никакой защиты (PPL и сопутствующее с ними появились только в Windows 8.1) но поддерживать её я особо не собираюсь, слишком устаревшее ядро по отношению к современному коду (функции, структуры и прочее).
0
|
||||||
|
|
||||||||||||
| 27.10.2020, 23:49 [ТС] | ||||||||||||
|
для не экспортируемой функции GetSecurityInfoEx из библиотеки advapi32.dll я забыл поменять сигнатуру функции для её поиска ![]() пришлось доставать сигнатуру из advapi32.dll для Windows 7
![]() с консолью тоже разобрался - если кто не в курсе, делается это так: левой кнопкой мыши на верхний угол заголовка окна консоли -> Свойства -> вкладка Расположение -> Размер буфера экрана -> и меняем поле высота (я поставил 9999) всё, теперь можно растягивать окно консоли и пользоваться вертикальной прокруткой. PS: если кто сможет предоставить сигнатуры функции 64 битных SetSecurityInfoExA/SetSecurityInfoExW и GetSecurityInfoExA/GetSecurityInfoExW из Vista, Windows 8 и Windows 8.1 буду благодарен) делается это всё за пару минут при помощи x64dbg и плагина SwissArmyKnife, на выходе получается примерно так
0
|
||||||||||||
|
|
||||||||
| 28.10.2020, 20:14 [ТС] | ||||||||
|
смотрю тема мало кому интересна. тесторов нет вообще, комментариев по работе программы тоже. а жаль, функционал у программы уже большой, и много чего хочу ещё реализовать. выкладываю так сказать промежуточную релизную версию. допилил поддержку всех современных ОС - начиная от Vista, заканчивая 10. по поводу перехода в SessionId 0 от Vista до Windows 10 1709 включительно проблем с этим не возникнет - ОС сама предложит использовать утилиту обнаружения интерактивных служб (UI0Detect.exe) а вот начиная с Windows 10 1803 и новее придётся воспользоваться сторонним приложением от FireDaemon (триал на 30 дней) ДРАЙВЕР ПРОВОДНИК устанавливаете драйвер (через inf файл) устанавливаете проводник, запускаете, в трее появится соответствующая иконка, правой кнопкой мыши -> переключиться в Сессию 0 (Switch Session 0) ну и всё, вы попадаете на рабочий стол ядра ОС предварительно можете запустить какие-нить процессы моей программой, чтобы не так скучно было в ядре ![]() или даже тот же explorer, но толку от него мало - загрузится лишь оболочка, без какой-либо интерактивности, т.к. ядро обитает совершенно в другой папке нежели юзер, а именно здесь
0
|
||||||||
|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
|
| 28.10.2020, 20:31 | |
|
_lunar_, для теста открыл процесс вашей же программы, и мне вывело кучу всего в консоль, но я прочитать и проскролить ничего не могу, поскольку в Windows 7 командная строка вот такая неудобная, и видно только последние десяток строк
Как можно обойти эту проблему?
0
|
|
|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
|
| 28.10.2020, 22:52 | |
|
_lunar_, я не особо разбираюсь в "около-ядерном" низкоуровневом программировании под Win32, но например мне не хватило команды help, чтобы еще раз взглянуть на доступные команды. И еще что это за "промт" такой X:>? Просто интуитивно хочется подумать что я нахожусь в корне диска Х, которого у меня нет, может лучше сделать приветствие по типу "lunar> "
?А можете кратко описать в двух словах как реализовали большинство этих функций без драйвера, который используется в том же Process Hacker? И кстати увидел первый раз что можно создать процесс .dll файла от имени winlogon.exe
1
|
|
|
|
|||||||||||
| 28.10.2020, 23:46 [ТС] | |||||||||||
|
хотя там команд не особо много, но для информативности и наглядности сделаю небольшое описание ![]() как вариант могу сделать так, чтобы выводился SID пользователя или например имя активного пользователя, который зашел в систему. в общем подумаю, что лучше выводить. просто не стал городить экзешники, чтобы не запутать пользователя что конкретно нужно запускать. по сути, там реализован механизм нескольких запусков процессов с повышением SecurityDescriptor до системного процесса. GetSecurityInfoEx не документированная и не экспортированная функция в advapi32.dll (собственно интерес к этой функции и был толчком к написанию этой программы). с помощью GetSecurityDescriptorControl я читаю SACL, DACL и таблицы доступа и аудита (в перспективе добавлю функционал SetSecurityDescriptorControl, чтобы можно было добавлять себе разные ACL и ещё больше увеличить права). плюс целых ворох функций для работы с SID - GetSidIdentifierAuthority, GetSidSubAuthorityCount, GetSidSubAuthority, GetLengthSid выглядит всё это примерно так
по поводу защищенных процессов я уже рассказывал - изначально была функция GetProcessInformation, но из-за того, что она не поддерживается Windows 7 (и Vista соответственно), пришлось переделывать на NtQueryInformationProcess и читать PS_PROTECTED_TYPE и PS_PROTECTED_SIGNER привилегии долго кодил, класс TOKEN_INFORMATION_CLASS очень обширный, можно много чего делать с токеном, возможно какие-нить интересные манипуляции реализую в будущем. ну и плюс много чего по мелочам - всякие заглушки, поиски по сигнатуре, получатели разных id и прочее. я разбил программу на модули, сейчас у меня 6 модулей и каждый из них в среднем на 1000 строк кода, и это только начало) Добавлено через 9 минут введите - c:\\windows\\explorer.exe на вопрос о сессии выберите системную (1) рабочий стол выберите Default (1) и запустите. должно появиться окно утилиты обнаружения интерактивных служб согласитесь на переход к сообщению и наблюдайте как ОС настраивает вам рабочий стол в сессии 0 ![]() перед этим можно запустить в системной сессии ProcessHacker например, чтобы был функционал полазить по рабочему столу ядра как я показывал здесь KernelExplorer without driver
0
|
|||||||||||
|
|
||||||
| 06.11.2020, 00:37 [ТС] | ||||||
|
Новая сборка:
- добавил создание процесса как elevated (с повышенными правами и привилегиями), теперь программа создаёт либо системный процесс, либо пользовательский elevated процесс - вступительное приветствие изменил на
- исправил баг, когда сначала был открыт процесс с токеном только на чтение, то нельзя было изменять привилегии у процесса, открытого с полным доступом к токену - поменял цвет (хендлы, токены и прочее): зеленый полный доступ, желтый с ограниченным доступом, ну и красный доступа нет - некоторые оптимизации в коде - до help руки пока не дошли) на данный момент переключил свое внимание на UI0Detect полностью дизассемблировал сервис и его либу (из Windows 10 1709), попытаюсь собрать и интегрировать в программу, чтобы можно было при создании системного процесса в сессии 0 осуществлять переход на соответствующий рабочий стол. если кому интересно, могу описать этот процесс, реально круто и познавательно
0
|
||||||
|
|
|
| 06.11.2020, 12:43 [ТС] | |
|
0
|
|
|
|
|
| 08.11.2020, 13:52 [ТС] | |
|
В новой сборке добавлено:
- теперь возможно вывести список всех процессов с их идентификаторами командой lp - для удобства получения информации теперь можно вводить как имя процесса так и его идентификатор есть куча процессов с одинаковыми именами (svchost.exe) но разными id, теперь о них можно получать информацию а также есть процессы с именами, но эти имена "инертны" (например Memory Compression), и вывести их информацию можно только по id
0
|
|
|
|
|
| 11.11.2020, 00:28 [ТС] | |
|
Начал прорабатывать новую группу управления - Сервисы.
Меню расширилось до Главная идея - прикрутить службу UI0Detect (о которой я рассказывал в своём блоге) от Windows 10 1709 к последующим версиям Windows 10. Команда ui0 создаёт сервис и частично настраивает его как UI0Detect в Windows 7. Остальные настройки (привилегии и ещё кое-что) установлены как у FireDaemon (в планах дизассемблировать их тулзу, чтобы посмотреть как всё устроено) Команда ls выводит список всех установленных сервисов в системе (активные и остановленные). ОС видит созданный сервис UI0Detect При попытке запуска выдаёт ошибку План следующий: кто читал блог, тот в курсе, что для запуска сервиса система, в лице Wininit.exe, своей внутренней функцией RegisterSession0ViewerWindowHookDll, должна вызвать функцию Session0ViewerWindowProcHook из Wls0wndh.dll Умники из Microsoft в версиях Windows 10 1803 и новее просто взяли и вырезали RegisterSession0ViewerWindowHookDll из Wininit.exe (уже дизассемблировал разные версии и сравнивал). У сервиса (один из svchost.exe), к которому цепляется FireDaemon, я перехвачу хендл и создам в его процессе удаленный поток на функцию Session0ViewerWindowProcHook. При создании процесса в сессии 0, сервис должен будет запустить удаленный поток, тем самым запустить всю цепочку UI0Detect. Будет ли это работать пока не знаю, подозреваю система упадёт в синьку. Поэтому, если у кого-то есть какие-нибудь идеи, буду рад выслушать ![]() Сборку выкладывать пока не буду (ещё не дописан код для CreateService).
0
|
|
|
|
||||||||||||||||
| 13.11.2020, 16:32 [ТС] | ||||||||||||||||
|
Пытаюсь позвать функцию RegisterSession0ViewerWindowHookDll отдельно от Wininit.exe
Её суть заключается в передачи валидного дескриптора hdeskApplication во внутреннюю функцию ResilientSwitchDesktop(HDESK hDesktop) которая в 1803 и выше теперь называется ResilientSwitchDesktopWithFade. Внутри неё происходит просто переключение SwitchDesktop(hDesktop). Но чтобы получить валидный дескриптор hdeskApplication нужно позвать ещё одну внутреннюю функцию Wininit.exe - CreatePrimaryTerminal Опять же, начиная с 1803 microsoft обернул её более сложным прототипом PrimaryTerminalAndHookWorker, который располагается в wininitext.dll
- регистрируется процесс services.exe - создаётся рабочая станция WinSta0 - создаётся рабочий стол Winlogon - если Winlogon валиден создаётся рабочий стол Default - всё это регается и создаётся трейд с не менее внушительной callback функцией LaunchUmfdHostWithVirtualAccountThreadPr oc
Но какая же каша этот internal, просто ужас..
0
|
||||||||||||||||
|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
||
| 13.11.2020, 17:55 | ||
|
И кстати, в интернете же есть исходные коды Windows 2000 / Windows XP, вы видели их и использовали ли для своей наработки? Понимаю, что между кодом ядра windows xp и windows 10 огромная разница, но все же.
0
|
||
|
|
||||||||
| 13.11.2020, 18:51 [ТС] | ||||||||
|
но применить их на новых версиях win10 практически невозможно в следствии того, что либо эти участки кода по новой переписаны в ядре (что сводит слитые исходники к бесполезному набору кода), либо вырезаны вовсе. ![]() internal функции очень масштабны (в среднем более 1000 строк одна функция), плюс в этих тысячи строках куча других internal функций (порой кажется, что можно проваливаться в дизассемблере бесконечно), и всё это переплетено в огромный кошмарный, в плане понимания внутреннего устройства программы, узел. Добавлено через 20 минут И ещё один момент: в библиотеке wininitext.dll, начиная с 1803, есть функция с интересным названием UIStartupWorker() Собственно она ничего не делает, и только возвращает 0 прототип что-то вроде
Скорее всего реализация этой функции появится в новых версиях. В любом случае, за развитием UIStartupWorker нужно будет следить, есть подозрения что это некая замена UI0Detect.
0
|
||||||||
|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
||
| 13.11.2020, 19:33 | ||
|
Я когда смотрел сорсы win2k, то там комментариев с документацией нормально так было, т.е. ребята вроде тогда старались все по красоте еще сделать (но это не остановило серию зависаний винды того времени, к сожалению)) ).
0
|
||
|
|
|||
| 14.11.2020, 00:36 [ТС] | |||
|
объемы контента такие, что урезать код уже не куда.
0
|
|||
|
|
|
| 14.11.2020, 00:55 [ТС] | |
|
Выкладываю новую сборку.
В комплекте лежит сервис UI0Detect.exe и его библиотека WlS0WndH.dll (от Windows 10 1709). Добавлен новый инструментарий по работе с сервисами: - ls выводит список всех сервисов в системе (желтый цвет - сервис остановлен (stopped), зеленый цвет - запущен (running)) - os открывает сервис для вывода информации - cs на данный момент не реализован - ss запускает/останавливает сервис в зависимости от его состояния (на сервисах драйверов скорее всего не работает) - ds удаляет сервис - ui0 ну и самое интересное: создаёт сервис UI0Detect (поэтому файлы и лежат теперь с программой, т.к. с Windows 10 1803 этих файлов в системе больше нет) в остановленном состоянии (функцию RegisterSession0ViewerWindowHookDll и её реализацию на данный момент я отключил во избежание различного рода проблем). После создания сервиса UI0Detect не забывайте его удалять! На ОС до Windows 10 1709 создавать UI0Detect не рекомендуется, он итак у вас уже есть и вполне себе работает. Продолжаю искать способ его запуска. Сервис, обнаружив оконную процедуру в сессии 0, должен стартануть и создать себе процесс, как он это делает в Windows 7 но пока безрезультатно. Хотя переключение на другие рабочие столы в сессии 1 через Session0ViewerWindowProcHook вполне работает. Когда реализую обратный выход на рабочий стол Default добавлю этот функционал, т.к. сейчас обратного выхода нет и вы будете смотреть только на черный экран с курсором мыши
0
|
|
|
|
|
| 06.12.2020, 22:09 [ТС] | |
|
Новая сборка.
- пофиксил найденные мною ошибки - оптимизация кода для вспомогательных программ (запуск от админа и Nt авторизация для LocalSystem) - улучшения кода для блока Service - ну и самое интересное: по команде ui0 осуществляется переход на рабочий стол Winlogon (для возврата на рабочий стол Default предусмотрен специальный message). Механизм перехода на рабочие столы отлажен полностью. Продолжаю поиски получения валидного дескриптора HDESK рабочего стола Default сессии 0.
0
|
|
|
|
|
| 07.12.2020, 11:32 [ТС] | |
|
Интересный факт сейчас обнаружил с использованием Explorer++
Моя программа пока без GUI интерфейса (времени всё нет сесть и написать). Стандартный Explorer уже загружен в систему и его повторный вызов приводит к перезапуску проводника. Поэтому я решил попробовать поэкспериментировать с альтернативным проводником. На глаза попался Explorer++ Запустил его на рабочем столе Winlogon: команда 'cp' -> путь до 'Explorer++.exe' -> выбираем '2' (System process) -> выбираем '2' (USER_SESSION_ID) -> выбираем '2' (Winlogon) -> команда 'ui0' Ок, проводник запущен на рабочем столе Winlogon сессии 1 (выбор рабочего стола не важен, можно всё тоже самое проделать на Default). Теперь можно шариться по системе. Запустил из Explorer++ программу Process Hacker. Т.к. Explorer++ запущен как системный процесс, то всё что он запускает тоже является системным процессом, в частности Process Hacker. Иными словами в данном случае Explorer++ является частью системы и спокойно позволяет открыть например папку C:\Program Files\WindowsApps, по умолчанию к которой пользователь не имеет доступа. Соответственно делать с потрахами этой папки всё что угодно (кому там нужно удалить не удаляемые стандартные приложения типа OneDrive и прочей лабуды). Но будьте аккуратны, я создал настолько мощный инструмент, что неправильные действия могут обрушить систему в синьку (к примеру запуск wininit.exe из Explorer++ вызывает моментальный BSOD в связи со смертью критического процесса).
0
|
|
|
|
||
| 07.12.2020, 16:08 [ТС] | ||
|
Цитата из моего блога
Загрузил на этот рабочий стол Explorer++ и осуществил переход по валидному HDESK. Очень странный рабочий стол - сообщение для перехода не появляется, приходится переходить обратно на Default по таймеру. К тому же, загруженный Explorer++ как-будто сломан - окно отображено, но на нём нет никаких контролов (ListView, кнопки и прочее) и оно не активно (переместить либо закрыть нельзя). Вот уж точно малоизученный рабочий стол - никакой информации в интернете нет, приходится по крупицам выуживать из системы.
0
|
||
| 07.12.2020, 16:08 | |
|
QODBC (MS SQL SERVER) . Driver not loaded Driver not loaded
Ошибка - Driver not loaded Driver not loaded Wi-FI driver Wi-Fi driver Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|