|
|
|
KernelExplorer without driver25.10.2020, 03:26. Показов 11514. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|