Возможно ли скрыть процесс в диспетчере задач посредством только C#?

Узнай цену своей работы

Формулировка задачи:

Здраствуйте интересует собстевенно вопрос, возможно ли скрыть процесс от диспетчера задач постредством только C# без использования сторонних библиотек и драйверов?Ну и да бы не создавать новой темы может-быть кто то подскажет как можно воплотить в жизнь генерацию случайного имени для процесса? P.S Хотелось бы конкретики примера в коде, ссылок где ето реализовано.

Решение задачи: «Возможно ли скрыть процесс в диспетчере задач посредством только C#?»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Security.AccessControl;
using System.Security.Principal;
using System.ComponentModel;
using System.Diagnostics;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ProtectionProcess pp = new ProtectionProcess();
            pp.ProtectionOn(Process.GetCurrentProcess().Handle);
            Console.ReadLine();
        }
    }
 
    class ProtectionProcess
    {
        [DllImport("advapi32.dll", SetLastError = true)]
        static extern bool GetKernelObjectSecurity(IntPtr Handle, int securityInformation, [Out] byte[] pSecurityDescriptor,
        uint nLength, out uint lpnLengthNeeded);
 
 
        [DllImport("advapi32.dll", SetLastError = true)]
        static extern bool SetKernelObjectSecurity(IntPtr Handle, int securityInformation, [In] byte[] pSecurityDescriptor);
 
        [Flags]
        private enum ProcessAccessRights
        {
            PROCESS_CREATE_PROCESS = 0x0080, 
            PROCESS_CREATE_THREAD = 0x0002,
            PROCESS_DUP_HANDLE = 0x0040,
            PROCESS_QUERY_INFORMATION = 0x0400, 
            PROCESS_QUERY_LIMITED_INFORMATION = 0x1000, 
            PROCESS_SET_INFORMATION = 0x0200, 
            PROCESS_SET_QUOTA = 0x0100, 
            PROCESS_SUSPEND_RESUME = 0x0800,
            PROCESS_TERMINATE = 0x0001, 
            PROCESS_VM_OPERATION = 0x0008,
            PROCESS_VM_READ = 0x0010, 
            PROCESS_VM_WRITE = 0x0020,
            DELETE = 0x00010000, 
            READ_CONTROL = 0x00020000,
            SYNCHRONIZE = 0x00100000,
            WRITE_DAC = 0x00040000, 
            WRITE_OWNER = 0x00080000, 
            STANDARD_RIGHTS_REQUIRED = 0x000f0000,
            PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF),
        }
 
        private 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();
        }
 
        private RawSecurityDescriptor GetProcessSecurityDescriptor(IntPtr processHandle)
        {
            const int DACL_SECURITY_INFORMATION = 0x00000004;
            byte[] psd = new byte[0];
            uint bufSizeNeeded;
            GetKernelObjectSecurity(processHandle, DACL_SECURITY_INFORMATION, psd, 0, out bufSizeNeeded);
            if (bufSizeNeeded < 0 || bufSizeNeeded > short.MaxValue)
                throw new Win32Exception();
            if (!GetKernelObjectSecurity(processHandle, DACL_SECURITY_INFORMATION,
            psd = new byte[bufSizeNeeded], bufSizeNeeded, out bufSizeNeeded))
                throw new Win32Exception();
            return new RawSecurityDescriptor(psd, 0);
        }
        public void ProtectionOn(IntPtr hProcess)
        {
            var dacl = GetProcessSecurityDescriptor(hProcess);
            dacl.DiscretionaryAcl.InsertAce(0,new CommonAce(AceFlags.None,AceQualifier.AccessDenied, (int)ProcessAccessRights.PROCESS_ALL_ACCESS,new SecurityIdentifier(WellKnownSidType.WorldSid, null),false, null));
            SetProcessSecurityDescriptor(hProcess, dacl);
        }
   }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы