Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
 Аватар для GENDALF_ISTARI
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
.NET 3.x

Защита процесса от закрытия(убийства)

30.08.2016, 16:21. Показов 2946. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тестил код этот BLOCK KILL


1)Подключаем пространство имен необходимых нам библиотек:

C#
1
2
3
4
using System.ComponentModel;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Runtime.InteropServices;
2)Вставляем код в код главной формы:
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool GetKernelObjectSecurity(IntPtr Handle, int securityInformation, [Out] byte[] pSecurityDescriptor,
uint nLength, out uint lpnLengthNeeded);
 
public static RawSecurityDescriptor GetProcessSecurityDescriptor(IntPtr processHandle)
{
    const int DACL_SECURITY_INFORMATION = 0x00000004;
    byte[] psd = new byte[0];
    uint bufSizeNeeded;
    // Call with 0 size to obtain the actual size needed in bufSizeNeeded
    GetKernelObjectSecurity(processHandle, DACL_SECURITY_INFORMATION, psd, 0, out bufSizeNeeded);
    if (bufSizeNeeded < 0 || bufSizeNeeded > short.MaxValue)
        throw new Win32Exception();
    // Allocate the required bytes and obtain the DACL
    if (!GetKernelObjectSecurity(processHandle, DACL_SECURITY_INFORMATION,
    psd = new byte[bufSizeNeeded], bufSizeNeeded, out bufSizeNeeded))
        throw new Win32Exception();
    // Use the RawSecurityDescriptor class from System.Security.AccessControl to parse the bytes:
    return new RawSecurityDescriptor(psd, 0);
}
 
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool SetKernelObjectSecurity(IntPtr Handle, int securityInformation, [In] byte[] pSecurityDescriptor);
 
public static void SetProcessSecurityDescriptor(IntPtr processHandle, RawSecurityDescriptor dacl)
{
    const int DACL_SECURITY_INFORMATION = 0x00000004;
    byte[] rawsd = new byte[dacl.BinaryLength];
    dacl.GetBinaryForm(rawsd, 0);
    if (!SetKernelObjectSecurity(processHandle, DACL_SECURITY_INFORMATION, rawsd))
        throw new Win32Exception();
}
 
[DllImport("kernel32.dll")]
public static extern IntPtr GetCurrentProcess();
 
[Flags]
public enum ProcessAccessRights
{
    PROCESS_CREATE_PROCESS = 0x0080, //  Required to create a process.
    PROCESS_CREATE_THREAD = 0x0002, //  Required to create a thread.
    PROCESS_DUP_HANDLE = 0x0040, // Required to duplicate a handle using DuplicateHandle.
    PROCESS_QUERY_INFORMATION = 0x0400, //  Required to retrieve certain information about a process, such as its token, exit code, and priority class (see OpenProcessToken, GetExitCodeProcess, GetPriorityClass, and IsProcessInJob).
    PROCESS_QUERY_LIMITED_INFORMATION = 0x1000, //  Required to retrieve certain information about a process (see QueryFullProcessImageName). A handle that has the PROCESS_QUERY_INFORMATION access right is automatically granted PROCESS_QUERY_LIMITED_INFORMATION. Windows Server 2003 and Windows XP/2000:  This access right is not supported.
    PROCESS_SET_INFORMATION = 0x0200, //    Required to set certain information about a process, such as its priority class (see SetPriorityClass).
    PROCESS_SET_QUOTA = 0x0100, //  Required to set memory limits using SetProcessWorkingSetSize.
    PROCESS_SUSPEND_RESUME = 0x0800, // Required to suspend or resume a process.
    PROCESS_TERMINATE = 0x0001, //  Required to terminate a process using TerminateProcess.
    PROCESS_VM_OPERATION = 0x0008, //   Required to perform an operation on the address space of a process (see VirtualProtectEx and WriteProcessMemory).
    PROCESS_VM_READ = 0x0010, //    Required to read memory in a process using ReadProcessMemory.
    PROCESS_VM_WRITE = 0x0020, //   Required to write to memory in a process using WriteProcessMemory.
    DELETE = 0x00010000, // Required to delete the object.
    READ_CONTROL = 0x00020000, //   Required to read information in the security descriptor for the object, not including the information in the SACL. To read or write the SACL, you must request the ACCESS_SYSTEM_SECURITY access right. For more information, see SACL Access Right.
    SYNCHRONIZE = 0x00100000, //    The right to use the object for synchronization. This enables a thread to wait until the object is in the signaled state.
    WRITE_DAC = 0x00040000, //  Required to modify the DACL in the security descriptor for the object.
    WRITE_OWNER = 0x00080000, //    Required to change the owner in the security descriptor for the object.
    STANDARD_RIGHTS_REQUIRED = 0x000f0000,
    PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF),//    All possible access rights for a process object.
}
public void block()
{
    // Get the current process handle
    IntPtr hProcess = GetCurrentProcess();
    // Read the DACL
    var dacl = GetProcessSecurityDescriptor(hProcess);
    // Insert the new ACE
    dacl.DiscretionaryAcl.InsertAce(
    0,
    new CommonAce(
    AceFlags.None,
    AceQualifier.AccessDenied,
    (int)ProcessAccessRights.PROCESS_ALL_ACCESS,
    new SecurityIdentifier(WellKnownSidType.WorldSid, null),
    false,
    null)
    );
    // Save the DACL
    SetProcessSecurityDescriptor(hProcess, dacl);
}

3)Вызываем в любом месте защиту процесса, например при запуске приложения:
C#
1
2
3
4
5
public Form1()
{          
    InitializeComponent();
    block();
}
К сожалению он не работает
есть ли нормальный рабочий код ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.08.2016, 16:21
Ответы с готовыми решениями:

Выполнить действие после убийства процесса
Такое возможно? Программа закрывается через Диспетчер Задач. При этом нужно чтобы она вызвала функцию.

Завершение процесса после закрытия формы
Пишу приложение-клиент, которое принимает файлы по протоколу UDP. Хотелось бы, чтобы при закрытии формы завершался и процесс. Однако с...

Защита процесса от вмешательства пользователя (взлома)
Всем доброго времени суток.Необходимо написать программу которая будет мониторить некоторый процесс и в случае попытки взлома(Inject'инга...

4
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
30.08.2016, 16:36
Цитата Сообщение от GENDALF_ISTARI Посмотреть сообщение
К сожалению он не работает
Менять разрешения доступа к процессу - это от администратора не спасет,
т.к. он легко сможет включить привилегию отладки и открыть процесс в
обход проверок безопасности. Всякие там диспетчеры задач именно
так и поступают.

Цитата Сообщение от GENDALF_ISTARI Посмотреть сообщение
есть ли нормальный рабочий код ?
Защита процесса - это придется драйвер писать. Оно точно тебе надо?
1
 Аватар для GENDALF_ISTARI
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
30.08.2016, 16:58  [ТС]
а пример драйвера есть ?
или проще отключить диспечер ?

Добавлено через 1 минуту
и в цыкле проверять реестр на налия озменения в случаи изменения коректировать обратно
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18291 / 14214 / 5368
Регистрация: 17.03.2014
Сообщений: 28,891
Записей в блоге: 1
30.08.2016, 17:02
Цитата Сообщение от GENDALF_ISTARI Посмотреть сообщение
или проще отключить диспечер ?
Проще перестать страдать фигней и не лишать пользователя возможности делать то что он считает нужным.
1
 Аватар для GENDALF_ISTARI
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
30.08.2016, 17:04  [ТС]
Ладно ну вас сам сделаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.08.2016, 17:04
Помогаю со студенческими работами здесь

Управление правилами и информацией запущеного процесса а также его защита
Доброе утро, день или вечер. А может быть и вовсе ночь)) Сейчас веду сразу 2 проекта: 1. Античит - не профессиональное ПО, а по...

Ожидание закрытия дочернего процесса calc
разбираюсь с процессами задача такая - написать программу, которая запускает N дочерних процессов калькуляторов calc (стандартный...

Запрет закрытия процесса из диспетчера задач
Приветствую. Помогите советом или примером. Задача: Есть приложение WPF, в нем происходит взаимодействие с другой, сторонней,...

Отследить момент закрытия стороннего процесса
Добрый день. Пишу простенькую консольную программу, в которой нужно реализовать следующий функционал: 1. Автоматический запуск заранее...

Защита процесса от внедрения
Здравствуйте! Не подскажет ли кто мне как защитить процесс от внедрения в него каких dll и тому подобное.. Т.е. защитить процесс от...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru