Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/54: Рейтинг темы: голосов - 54, средняя оценка - 4.89
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4

Как получить HANDLE процесса и изменить его привилегии?

02.05.2021, 22:40. Показов 11160. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код
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
char*put="C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe";
 
STARTUPINFOA start_info={sizeof start_info};
PROCESS_INFORMATION proc_info={0};//
CreateProcessA(put,0,0,0,0,0,0,0,&start_info,&proc_info);//proc_info.dwProcessId/
Sleep(20000);
 
HANDLE Process_[4]={CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)};///TH32CS_SNAPALL
PROCESSENTRY32 pe32pr={};pe32pr.dwSize=sizeof(pe32pr);
if(Process32FirstW(Process_[0],&pe32pr)){
if(!_tcscmp(pe32pr.szExeFile,TEXT("brave.exe"))){
cout<<"процесс "<<pe32pr.th32ProcessID<<en;}
else
for(;Process32NextW(Process_[0],&pe32pr);){
if(!_tcscmp(pe32pr.szExeFile,TEXT("brave.exe"))){
cout<<"процесс "<<pe32pr.th32ProcessID<<en;break;}
}
}
 
Process_[1]=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,pe32pr.th32ProcessID);
THREADENTRY32 pe32pt={};pe32pt.dwSize=sizeof(pe32pt);
if(Thread32First(Process_[1],&pe32pt)){
if(pe32pt.th32OwnerProcessID==pe32pr.th32ProcessID){
cout<<"поток "<<pe32pt.th32ThreadID<<en;}
else
for(;Thread32Next(Process_[1],&pe32pt);){
if(pe32pt.th32OwnerProcessID==pe32pr.th32ProcessID){
cout<<"поток "<<pe32pt.th32ThreadID<<en;break;}
}
}
 
Process_[2]=CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST,0);//pe32pr.th32ProcessID
HEAPLIST32 he32k={};he32k.dwSize=sizeof(he32k);
if(Heap32ListFirst(Process_[2],&he32k)){if(he32k.th32ProcessID==pe32pr.th32ParentProcessID){
cout<<"номер блока/кучи "<<he32k.th32HeapID<<en;}
else
for(;Heap32ListNext(Process_[2],&he32k);){
if(he32k.th32ProcessID==pe32pr.th32ParentProcessID){//he32k
cout<<"номер блока/кучи "<<he32k.th32HeapID<<en;break;
}}
}
 
HEAPENTRY32 he32h={};he32h.dwSize=sizeof(he32h);
if(Heap32First(&he32h,pe32pr.th32ParentProcessID,he32k.th32HeapID)){//pe32pr.th32ParentProcessID/
if(he32h.th32ProcessID==pe32pr.th32ParentProcessID){
cout<<"Дескриптор "<<he32h.hHandle<<en;}
else
for(;Heap32Next(&he32h);){
if(he32h.th32ProcessID==pe32pr.th32ParentProcessID){
cout<<"Дескриптор "<<he32h.hHandle<<en;break;
}}
}
 
Process_[3]=OpenProcess(PROCESS_ALL_ACCESS,1,pe32pr.th32ProcessID);//возвращает 0
После запуска процесса функцией CreateProcessA доступ к Pid теряется/умирает и мне нужно всё находить вручную сканируя все процессы, это происходит не со всеми процессами но это происходит по не понятным причинам. he32h.hHandle вообще какой-то левый хэндл не понятно от чего. Я читал что это можно сделать функцией SeDebugPrivilege, но она требует дескриптор процесса.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.05.2021, 22:40
Ответы с готовыми решениями:

Получить имя процесса по его handle
Всем привет, ищу статью по получению имени из хендла процесса. Кому не трудно, киньте пример или подскажите алгоритм получения имени....

Как получить для процесса список его Handle по типам?
Как получить для процесса список его Handle с типом (File, Directory, ...) и их наименованиями? Как в проге Process Explorer.

Как выбрать окно, если его handle не совпадает с handle процесса?
Добрый день! Задача на первый взгляд довольно простая: выбрать окно программы, переместить его в определённую часть экрана и нажать на...

33
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
21.08.2021, 20:43  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от politoto Посмотреть сообщение
Положим, у Вас есть телевизор, Вы можете его включать, можете выключать.
А у кого-то телевизора нет, и ни выключить, ни включать телевизор, которого нет, нельзя.
а что это за протоколы по ссылке выше?
0
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
21.08.2021, 20:50
Цитата Сообщение от Nexi99 Посмотреть сообщение
А узнать же можно какие конкретно привилегии ограничены
Начинай отсюда. Получение доступных привилегий для маркера доступа:
GetTokenInformation

Цитата Сообщение от Nexi99 Посмотреть сообщение
и за что они отвечают
Список привилегий с описанием:
Privilege Constants
1
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
21.08.2021, 21:06  [ТС]
Цитата Сообщение от WhiteP Посмотреть сообщение
Список привилегий с описанием:
Privilege Constants
Они назначаются вызывающей программе системой автоматически, критерии видимо подбираются на основании того что программа делает?
0
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
21.08.2021, 21:36
Цитата Сообщение от Nexi99 Посмотреть сообщение
Они назначаются вызывающей программе системой автоматически, критерии видимо подбираются на основании того что программа делает?
Набор всех доступных привилегий задается при создании пользователя (локальные политики->назначение прав пользователя) администратором. Т.е. набор доступных привилегий зависит от имени какого пользователя запущена программа.
При вызове некоторых функций некоторые привилегии включаются (enable) автоматически (если они доступны для токена, иначе - acess denied). Некоторые привилегии нужно включать явно (SeDebug вроде одна из них, емнип).
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
21.08.2021, 22:19  [ТС]
Цитата Сообщение от WhiteP Посмотреть сообщение
Набор всех доступных привилегий задается при создании пользователя
Получается что чтобы программа ваша не делала привилегии все одинаковые (вопрос лишь в том включены они ил нет).
А если привилегии какие-то отсутствуют значит в данном направлении контексте безопасности ограничение не наложено?
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
24.08.2021, 18:53  [ТС]
Цитата Сообщение от WhiteP Посмотреть сообщение
вкл/выкл имеющиеся
Дескриптор процесса и дескриптор токена доступа это разные вещи?
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
25.08.2021, 17:14  [ТС]
Цитата Сообщение от WhiteP Посмотреть сообщение
Начинай отсюда. Получение доступных привилегий для маркера доступа:
Вот что у меня получилось Как раскрывается структура TOKEN_PRIVILEGES?, если есть здоровье и желание можете там ответить.
0
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
26.08.2021, 18:16
Цитата Сообщение от Nexi99 Посмотреть сообщение
Получается что чтобы программа ваша не делала привилегии все одинаковые (вопрос лишь в том включены они ил нет).
да, они задаются при входе в систему для юзера, и при старте процесса. Можно себя перезапустить (elevation) от админа или от кого нибудь еще, и могут быть другие. Но добавить привилегию в существующий токен нельзя, ну или это андок дикий.
1
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
26.08.2021, 22:30  [ТС]
Цитата Сообщение от Morgot Посмотреть сообщение
да, они задаются при входе в систему для юзера, и при старте процесса.
т.е. получается никакой пользы от них нет.
0
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
27.08.2021, 13:57
Цитата Сообщение от Nexi99 Посмотреть сообщение
никакой пользы от них нет.
Польза это понятие абстрактное и не-техническое. Привилегии нужны, чтобы у юзера были одни права, у админа другие, у бухгалтера третьи. Дома нужно одно, а в офисе другое.
У себя на компе вы можете дать пользователю вообще любые привилегии, какие угодно (системные и т.д.). Просто ребут надо будет сделать. Еще раз пишу - посмотрите книгу Рихтера, писал в другом посте, там есть прога для удобного управления токенами.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
27.08.2021, 21:49  [ТС]
Цитата Сообщение от Morgot Посмотреть сообщение
Привилегии нужны
С помощью функции LoadLibraryExA можно загрузить процесс в адресное пространство вызывающего процесса, получается что это приведёт к расширению адресного пространства процесса ну и плюс есть, процесс сольётся с вашим, и вы сможете иметь на него полные права доступа.
Тут непонятно 2 нюанса. 1.Увеличение адресного пространства автоматическое или нет, видимо да потому что dll выделяет память автоматически, просто я видел функцию для копированию виртуального адресного пространства в другое место.
2. Я так понимаю что pid генерируется при запуске exe файла, значит pid уже будет одинаковый? А если будет в адресное пространство запущено несколько exe как это будет работать?
Если есть функция для копирования адресного пространства то можно переместить часть этого адресного пространства в другое место и разделить процессы или это невозможно?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
28.08.2021, 09:59
LoadLibraryExA() не создаёт новый процесс.
0
3 / 3 / 1
Регистрация: 24.08.2021
Сообщений: 9
28.08.2021, 10:11
Nexi99, почитай - Внутреннее устройство Windows, Руссинович Марк, очень много вопросов сразу отпадет.
0
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
28.08.2021, 15:12
Цитата Сообщение от Nexi99 Посмотреть сообщение
можно загрузить процесс в адресное пространство вызывающего процесса
Вы пишете что-то не то. Почитайте матчасть. Нельзя загрузить процесс в другой процесс, кроме техник вида LoadPE, которые явный андок и там другой принцип.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.08.2021, 15:12

Как узнать Handle или PID процесса, зная его имя и класс?
Как узнать Handle или PID процесса, зная его имя и класс?

Получить Handle AppID процесса
Здравствуйте. Есть приложение на delphi, в которой устанавливается Handle, для того, что-бы можно было запустить только одну копию...

Не могу получить handle процесса
Решил написать инжектор по какому-то гайду. Смотрел другие гайды, все равно не работает. Нужен HANDLE процесса, но почему-то не могу его...

Не выходит получить handle процесса
Дебаг привилегии мое приложение получает(проверял в отладчике функции возвращают true), но вот как только пробую получить уже хендл нужного...

Получить имя процесса зная handle
кому-то да понадобиться вот код : private static extern Int32 GetForegroundWindow(); private...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 22.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 22.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 22.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 22.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 22.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 22.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru