Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Можно ли как-то определить является ли процесс системным?

18.03.2020, 16:06. Показов 2873. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как определить является ли процесс системным ?

Добавлено через 4 минуты
интересует для Линукс и виндовс
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2020, 16:06
Ответы с готовыми решениями:

Как узнать какой файл не является системным в win8.1
всем доброго дня возникла такая проблема. потребовался файл xlive.dll. его нашел, скачал и установил. но после этого перед каждым...

Как можно определить, сколько нагружает каждый процесс каждое ядро ЦП ?
Доброго времени суток, уважаемые форумчане ! Пишу диспетчер задач на шарпе, и столкнулся с такой проблемой: Как можно определить, сколько...

Каким образом через cmd узнать, какой диск является системным?
Каким образом через cmd узнать какой диск является системным ?

13
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
18.03.2020, 16:17
Лучший ответ Сообщение было отмечено ReYalp как решение

Решение

Цитата Сообщение от ReYalp Посмотреть сообщение
Как определить является ли процесс системным ?
самое банальное - попробовать получить хендл процесса по его идентификатору (OpenProcess).
если GetLastError вернёт 5, то процесс системный (или драйвер, что в принципе одно и тоже).

ещё вариант воспользоваться функцией GetProcessInformation с кодом ProcessProtectionLevelInfo
дальше в switch перебираете PROTECTION_LEVEL_WINTCB_LIGHT, PROTECTION_LEVEL_ANTIMALWARE_LIGHT, PROTECTION_LEVEL_WINTCB, PROTECTION_LEVEL_NONE
или нативный аналог GetProcessInformation - NtQueryInformationProcess с кодом ProcessProtectionInformation (функционала больше по сравнению с WinAPI)
дальше опять же switch на PS_PROTECTED_TYPE и PS_PROTECTED_SIGNER
2
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.03.2020, 16:29  [ТС]
_lunar_, так как я не очень разбираюсь в апи линукса и виндовса то прошу подсказать что из вышеперечисленного с апи виндовс а что из линукса?
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
18.03.2020, 17:02
Цитата Сообщение от ReYalp Посмотреть сообщение
что из вышеперечисленного с апи виндовс а что из линукса?
это всё WinAPI (для Windows).
с linux не подскажу.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.03.2020, 20:27  [ТС]
_lunar_, спасибо, еще такой вопрос по уровням защиты , какие из них относятся к системным программам?
Цитата Сообщение от _lunar_ Посмотреть сообщение
PROTECTION_LEVEL_WINTCB_LIGHT, PROTECTION_LEVEL_ANTIMALWARE_LIGHT, PROTECTION_LEVEL_WINTCB, PROTECTION_LEVEL_NONE
Добавлено через 29 минут
_lunar_, почему explorer не является системной программой? Как можно отличить тогда explorer от обычной программы ?
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
18.03.2020, 22:21
Цитата Сообщение от ReYalp Посмотреть сообщение
какие из них относятся к системным программам?
в современных ОС семейства Windows процессы разделены на 4 группы:
1. минимальные процессы ProcessProtected (самые защищенные - System, Registry), это соответствует флагу PROTECTION_LEVEL_WINTCB (PS_PROTECTED_TYPE::Protected, PS_PROTECTED_SIGNER::WinSystem)
2. далее идут ProcessProtectedLite (services.exe, wininit.exe, smss.exe, csrss.exe), это флаг PROTECTION_LEVEL_WINTCB_LIGHT (PS_PROTECTED_TYPE::ProtectedLite, PS_PROTECTED_SIGNER::WinTcb)
сюда же относятся антивирусы (MsMpEng.exe), флаг PROTECTION_LEVEL_ANTIMALWARE_LIGHT (PS_PROTECTED_TYPE::ProtectedLite, PS_PROTECTED_SIGNER::Antimalware)
3. системные процессы, не имеющие ни защиты, ни подписи (lsass.exe, winlogon.exe, svchost.exe), соответствует флагу PROTECTION_LEVEL_NONE (PS_PROTECTED_TYPE::None, PS_PROTECTED_SIGNER::None)
4. ну и юзермодные процессы, принадлежащие конкретному пользователю, флаг тоже PROTECTION_LEVEL_NONE

что интересно, начиная с Vista привилегию создавать токен (NtCreateToken) имеет только lsass.exe, при этом PPL процессы создаются ядром до создания lsass.exe
кроме того, при попытке захватить SID lsass.exe и передать его себе приложение вылетит (добавлять новые привилегии невозможно, только включать, отключать и удалять).

Цитата Сообщение от ReYalp Посмотреть сообщение
почему explorer не является системной программой?
потому что проводник работает в контексте SID пользователя.
сделано это в целях безопасности - не могут же MS позволить запускать юзермодные процессы прям в ядре.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.03.2020, 22:29  [ТС]
_lunar_, я заметил что разные svchostы имеют разный уровень защиты. Это зависит от того какой процесс они обслуживают?
У меня цель максимально освободить ресурсы CPU и GPU для запуска требовательного приложения, что мне можно отключить чтобы это было безопасно? Разумеется юзермодные процессы это само собой, а можно ли что-то еще? И можно ли как-то заблокировать процесс от включения на какое-то время?
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
18.03.2020, 22:37
Цитата Сообщение от ReYalp Посмотреть сообщение
Это зависит от того какой процесс они обслуживают?
в принципе да.
хостов очень много и каждый из них делает что-то конкртеное.

Цитата Сообщение от ReYalp Посмотреть сообщение
что мне можно отключить чтобы это было безопасно?
процессы, которые я перечислил, отключать категорически не советую (система просто рухнет в синьку).
можно (опять же методом проб и ошибок) попробовать по одному отключать всякие драйверы и прочие не MS процессы.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.03.2020, 23:25  [ТС]
_lunar_, тоесть отключать без вреда можно только юзеромодные процессы?

Добавлено через 26 минут
_lunar_, и можно как-то отличить обычный процесс в юзерспейсе от системного? уровни защиты у них одинаковые же PROTECTION_LEVEL_NONE
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
19.03.2020, 08:44
Цитата Сообщение от ReYalp Посмотреть сообщение
можно как-то отличить обычный процесс в юзерспейсе от системного?
конечно можно - прочитать его SID
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/////////////////////////////////////////////////////////////////////////////
//                                                                         //
// Universal well-known SIDs                                               //
//                                                                         //
//     Null SID                     S-1-0-0                                //
//     World                        S-1-1-0                                //
//     Local                        S-1-2-0                                //
//     Creator Owner ID             S-1-3-0                                //
//     Creator Group ID             S-1-3-1                                //
//     Creator Owner Server ID      S-1-3-2                                //
//     Creator Group Server ID      S-1-3-3                                //
//                                                                         //
//     (Non-unique IDs)             S-1-4                                  //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////
 
///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// NT well-known SIDs                                                        //
//                                                                           //
//     NT Authority            S-1-5                                         //
//     Dialup                  S-1-5-1                                       //
//                                                                           //
//     Network                 S-1-5-2                                       //
//     Batch                   S-1-5-3                                       //
//     Interactive             S-1-5-4                                       //
//     (Logon IDs)             S-1-5-5-X-Y                                   //
//     Service                 S-1-5-6                                       //
//     AnonymousLogon          S-1-5-7       (aka null logon session)        //
//     Proxy                   S-1-5-8                                       //
//     Enterprise DC (EDC)     S-1-5-9       (aka domain controller account) //
//     Self                    S-1-5-10      (self RID)                      //
//     Authenticated User      S-1-5-11      (Authenticated user somewhere)  //
//     Restricted Code         S-1-5-12      (Running restricted code)       //
//     Terminal Server         S-1-5-13      (Running on Terminal Server)    //
//     Remote Logon            S-1-5-14      (Remote Interactive Logon)      //
//     This Organization       S-1-5-15                                      //
//                                                                           //
//     IUser                   S-1-5-17
//     Local System            S-1-5-18                                      //
//     Local Service           S-1-5-19                                      //
//     Network Service         S-1-5-20                                      //
//                                                                           //
//     (NT non-unique IDs)     S-1-5-0x15-... (NT Domain Sids)               //
//                                                                           //
//     (Built-in domain)       S-1-5-0x20                                    //
//                                                                           //
//     (Security Package IDs)  S-1-5-0x40                                    //
//     NTLM Authentication     S-1-5-0x40-10                                 //
//     SChannel Authentication S-1-5-0x40-14                                 //
//     Digest Authentication   S-1-5-0x40-21                                 //
//                                                                           //
//     Other Organization      S-1-5-1000    (>=1000 can not be filtered)    //
//                                                                           //
//                                                                           //
// NOTE: the relative identifier values (RIDs) determine which security      //
//       boundaries the SID is allowed to cross.  Before adding new RIDs,    //
//       a determination needs to be made regarding which range they should  //
//       be added to in order to ensure proper "SID filtering"               //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////
а точнее хватит и sub-authority (GetSidSubAuthority) S-1-5-0x15 (или просто 21) это юзер.
1
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
19.03.2020, 20:20  [ТС]
_lunar_, какой самый простой способ получить SID ?

Добавлено через 51 минуту
_lunar_, все , нашел, получается что те svchostы которые из юзерспейса работают очевидно имеют SID такой же как и обычные программы, а можно их как-то разделить?
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
20.03.2020, 10:00
поковырял тут advapi32.dll из Windows 10 1909
первое что интересно - функция GetSecurityInfo теперь не является частью advapi32.dll, её код перенесли в ntmarta.dll
зато в advapi32.dll есть не экспортируемая функция GetSecurityInfoEx (для ANSI и UNICODE)

но, настоящему прогеру не помеха экспортируемая она или нет
итак, прототипы
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
WINADVAPI
DWORD
WINAPI
GetSecurityInfoExA(
    _In_ HANDLE hObject,
    _In_ SE_OBJECT_TYPE ObjectType,
    _In_ SECURITY_INFORMATION SecurityInfo,
    _In_ LPCSTR lpProvider,
    _In_ LPCSTR lpProperty,
    _Out_ PACTRL_ACCESSA *ppAccessList,
    _Out_ PACTRL_AUDITA *ppAuditList,
    _Out_ LPSTR *lppOwner,
    _Out_ LPSTR *lppGroup
);
 
WINADVAPI
DWORD
WINAPI
GetSecurityInfoExW(
    _In_ HANDLE hObject,
    _In_ SE_OBJECT_TYPE ObjectType,
    _In_ SECURITY_INFORMATION SecurityInfo,
    _In_ LPCWSTR lpProvider,
    _In_ LPCWSTR lpProperty,
    _Out_ PACTRL_ACCESSW *ppAccessList,
    _Out_ PACTRL_AUDITW *ppAuditList,
    _Out_ LPWSTR *lppOwner,
    _Out_ LPWSTR *lppGroup
);
легким движением руки достаем из x64Dbg уникальную сигнатуру для данный функций
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// for ANSI
BYTE pattren_GetSecurityInfoEx[37] = {
    0x48,0x89,0x5C,0x24,0x08,0x48,0x89,0x74,0x24,0x10,0x48,0x89,0x7C,0x24,0x18,0x55,
    0x41,0x54,0x41,0x55,0x41,0x56,0x41,0x57,0x48,0x8B,0xEC,0x48,0x81,0xEC,0x80,0x00,
    0x00,0x00,0x49,0x8B,0xD9
}; LPCSTR mask_GetSecurityInfoEx = _TEXT("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
 
// for UNICODE
BYTE pattren_GetSecurityInfoEx[64] = {
    0x48,0x8B,0xC4,0x4C,0x89,0x48,0x20,0x44,0x89,0x40,0x18,0x89,0x50,0x10,0x48,0x89,
    0x48,0x08,0x53,0x56,0x57,0x41,0x54,0x41,0x55,0x41,0x56,0x41,0x57,0x48,0x83,0xEC,
    0x60,0x45,0x8B,0xF0,0x48,0x8B,0xF1,0xE8,0x00,0x00,0x00,0x00,0x8B,0xD8,0x33,0xFF,
    0x85,0xC0,0x0F,0x85,0x00,0x00,0x00,0x00,0x48,0x85,0xF6,0x75,0x08,0x8D,0x58,0x06
}; LPCWSTR mask_GetSecurityInfoEx = _TEXT("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx????xxxxxxxx????xxxxxxxx");
затем находим её адрес в advapi32.dll
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
31
32
bool DataCompare(PBYTE pData, PBYTE pattern, _TPCCH mask)
{
    for (; *mask; mask++, pattern++, pData++)
        if (*mask == 'x' && *pData != *pattern)
            return false;
    return true;
}
 
SIZE_T FindPattern(PVOID addr, ULONG length, PBYTE pattern, _TPCCH mask)
{
    MEMORY_BASIC_INFORMATION mbi{};
    SIZE_T offset = 0;
    while (offset < length) {
        VirtualQuery((LPCVOID)((SIZE_T)addr + offset), &mbi, sizeof(MEMORY_BASIC_INFORMATION));
        if (mbi.State != MEM_FREE) {
            PBYTE buffer = new BYTE[mbi.RegionSize];
            ReadProcessMemory(GetCurrentProcess(), mbi.BaseAddress, buffer, mbi.RegionSize, nullptr);
            for (unsigned i = 0; i < mbi.RegionSize; i++)
                if (DataCompare(buffer + i, pattern, mask)) {
                    delete[] buffer;
                    return (SIZE_T)mbi.BaseAddress + i;
                }
            delete[] buffer;
        }
        offset += mbi.RegionSize;
    }
    return 0;
}
 
MODULEINFO hModInfo{};
GetModuleInformation(GetCurrentProcess(), GetModuleHandle("advapi32"), &hModInfo, sizeof(MODULEINFO));
_GetSecurityInfoEx GetSecurityInfoEx = (_GetSecurityInfoEx)FindPattern(hModInfo.lpBaseOfDll, hModInfo.SizeOfImage, pattren_GetSecurityInfoEx, mask_GetSecurityInfoEx);
ну и применяем
C++
1
2
3
4
5
GetSecurityInfoEx(hProcess, SE_KERNEL_OBJECT,
    OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION | 
    LABEL_SECURITY_INFORMATION | ATTRIBUTE_SECURITY_INFORMATION | SCOPE_SECURITY_INFORMATION |
    PROCESS_TRUST_LABEL_SECURITY_INFORMATION | ACCESS_FILTER_SECURITY_INFORMATION | BACKUP_SECURITY_INFORMATION,
    nullptr, nullptr, &ppAccessList, &ppAuditList, &lppOwner, &lppGroup);
добавил всё это дело в свою утилиту, и вот что получилось на выхлопе

функция вывела имена владельца и группы, а также тех кто имеет доступ к объекту.
в структурах ACTRL_ACCESS и ACTRL_AUDIT тоже масса информации, но нужно правильно выбирать флаги SECURITY_INFORMATION
1
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
20.03.2020, 10:33
_lunar_, не экспорт, а настоящая экспроприация библиотечных функций )))
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
20.03.2020, 11:21

Не по теме:

Цитата Сообщение от Annemesski Посмотреть сообщение
настоящая экспроприация библиотечных функций
ну а что делать))
функция есть, значит надо её использовать, даже если MS не хочет этого



доведу свою утилиту до ума, выложу в паблик.
на данный момент осуществлен полный доступ к системным процессам без защиты,
а также частичный доступ к PPL процессам (при этом к некоторым ядреным объектам процесса имеется полный доступ)
к Protected процессам доступ пока ReadOnly с некоторым расширенным функционалам.
всё это работает без драйвера.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.03.2020, 11:21
Помогаю со студенческими работами здесь

Как вывести id процесса потомка, если мой процесс является предком?
Как вывести id процесса потомка, если мой процесс является предком?

Как можно упростить процесс?
Делал тест и столкнулся со следующей проблемой,в тесте имеется около 150 вопросов.Первый вариант был делать делать каждый вопрос на...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru