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

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

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

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

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

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Runtime.InteropServices;
  5. using System.Security.AccessControl;
  6. using System.Security.Principal;
  7. using System.ComponentModel;
  8. using System.Diagnostics;
  9.  
  10. namespace ConsoleApplication1
  11. {
  12.     class Program
  13.     {
  14.         static void Main(string[] args)
  15.         {
  16.             ProtectionProcess pp = new ProtectionProcess();
  17.             pp.ProtectionOn(Process.GetCurrentProcess().Handle);
  18.             Console.ReadLine();
  19.         }
  20.     }
  21.  
  22.     class ProtectionProcess
  23.     {
  24.         [DllImport("advapi32.dll", SetLastError = true)]
  25.         static extern bool GetKernelObjectSecurity(IntPtr Handle, int securityInformation, [Out] byte[] pSecurityDescriptor,
  26.         uint nLength, out uint lpnLengthNeeded);
  27.  
  28.  
  29.         [DllImport("advapi32.dll", SetLastError = true)]
  30.         static extern bool SetKernelObjectSecurity(IntPtr Handle, int securityInformation, [In] byte[] pSecurityDescriptor);
  31.  
  32.         [Flags]
  33.         private enum ProcessAccessRights
  34.         {
  35.             PROCESS_CREATE_PROCESS = 0x0080,
  36.             PROCESS_CREATE_THREAD = 0x0002,
  37.             PROCESS_DUP_HANDLE = 0x0040,
  38.             PROCESS_QUERY_INFORMATION = 0x0400,
  39.             PROCESS_QUERY_LIMITED_INFORMATION = 0x1000,
  40.             PROCESS_SET_INFORMATION = 0x0200,
  41.             PROCESS_SET_QUOTA = 0x0100,
  42.             PROCESS_SUSPEND_RESUME = 0x0800,
  43.             PROCESS_TERMINATE = 0x0001,
  44.             PROCESS_VM_OPERATION = 0x0008,
  45.             PROCESS_VM_READ = 0x0010,
  46.             PROCESS_VM_WRITE = 0x0020,
  47.             DELETE = 0x00010000,
  48.             READ_CONTROL = 0x00020000,
  49.             SYNCHRONIZE = 0x00100000,
  50.             WRITE_DAC = 0x00040000,
  51.             WRITE_OWNER = 0x00080000,
  52.             STANDARD_RIGHTS_REQUIRED = 0x000f0000,
  53.             PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF),
  54.         }
  55.  
  56.         private void SetProcessSecurityDescriptor(IntPtr processHandle, RawSecurityDescriptor dacl)
  57.         {
  58.             const int DACL_SECURITY_INFORMATION = 0x00000004;
  59.             byte[] rawsd = new byte[dacl.BinaryLength];
  60.             dacl.GetBinaryForm(rawsd, 0);
  61.             if (!SetKernelObjectSecurity(processHandle, DACL_SECURITY_INFORMATION, rawsd))
  62.                 throw new Win32Exception();
  63.         }
  64.  
  65.         private RawSecurityDescriptor GetProcessSecurityDescriptor(IntPtr processHandle)
  66.         {
  67.             const int DACL_SECURITY_INFORMATION = 0x00000004;
  68.             byte[] psd = new byte[0];
  69.             uint bufSizeNeeded;
  70.             GetKernelObjectSecurity(processHandle, DACL_SECURITY_INFORMATION, psd, 0, out bufSizeNeeded);
  71.             if (bufSizeNeeded < 0 || bufSizeNeeded > short.MaxValue)
  72.                 throw new Win32Exception();
  73.             if (!GetKernelObjectSecurity(processHandle, DACL_SECURITY_INFORMATION,
  74.             psd = new byte[bufSizeNeeded], bufSizeNeeded, out bufSizeNeeded))
  75.                 throw new Win32Exception();
  76.             return new RawSecurityDescriptor(psd, 0);
  77.         }
  78.         public void ProtectionOn(IntPtr hProcess)
  79.         {
  80.             var dacl = GetProcessSecurityDescriptor(hProcess);
  81.             dacl.DiscretionaryAcl.InsertAce(0,new CommonAce(AceFlags.None,AceQualifier.AccessDenied, (int)ProcessAccessRights.PROCESS_ALL_ACCESS,new SecurityIdentifier(WellKnownSidType.WorldSid, null),false, null));
  82.             SetProcessSecurityDescriptor(hProcess, dacl);
  83.         }
  84.    }
  85. }

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


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

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

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы