Ejemplo n.º 1
0
        public static void GetProccesses()
        {
            ListOfProcesses.Clear();
            var  p = Process.GetProcesses();
            bool success;

            foreach (var pl in p)
            {
                processinfo proc = new processinfo();
                var         dep  = new PROCESS_MITIGATION_DEP_POLICY();
                var         aslr = new PROCESS_MITIGATION_ASLR_POLICY();
                try
                {
                    proc.ProcName    = pl.ProcessName;
                    proc.PID         = pl.Id;
                    proc.Description = pl.MainModule.FileVersionInfo.FileDescription;
                    proc.Path        = pl.MainModule.FileName;
                    proc.ParPID      = GetParentProcces(pl.Id);
                    proc.ParName     = Process.GetProcessById(proc.ParPID).ProcessName;
                    proc.Owner       = GetProcessOwner(pl);
                    proc.SID         = GetOwnerSID(pl);
                    proc.Arch        = GetArchitecture(pl);
                    proc.Module      = pl.Modules;
                    success          = GetProcessMitigationPolicy(pl.Handle, 0, ref dep, Marshal.SizeOf(dep));
                    success          = GetProcessMitigationPolicy(pl.Handle, 1, ref aslr, Marshal.SizeOf(aslr));
                    proc.DEP         = dep.Enable;
                    proc.ASLR        = aslr.Enable;
                    //var DEP
                    //var ASLR
                }
                catch (Exception)
                {
                    proc.ProcName    = pl.ProcessName;
                    proc.PID         = pl.Id;
                    proc.Description = "Access Denied";
                    proc.Path        = "Access Denied";
                    proc.ParPID      = 0;
                    proc.ParName     = "System";
                    proc.Owner       = "System";
                    proc.Arch        = "x64";
                    proc.DEP         = true;
                    proc.ASLR        = true;
                    continue;
                }
                ListOfProcesses.Add(proc);
            }
        }
Ejemplo n.º 2
0
        public void Refresh_button_Click(object sender, EventArgs e)
        {
            Process[] process_list = Process.GetProcesses();
            Table.Rows.Clear();

            #region Объявление переменных, в которые будут записываться получаемые данные
            int    count               = 1;
            string Exec_file           = ND_MESSAGE;        // Исполняемый файл
            string capacity            = ND_MESSAGE;        // Разрядность
            string Parent_process_name = ND_MESSAGE;        // Имя родительского процесса
            string Parent_process_ID   = ND_MESSAGE;        // ID родительского процесса
            string User_name           = ND_MESSAGE;        // Имя владельца процесса
            string SID        = ND_MESSAGE;                 // SID владельца процесса
            string Using_DEP  = ND_MESSAGE;                 // Использование DEP
            string Using_ASLR = ND_MESSAGE;                 // Использование ASLR
            string IL         = ND_MESSAGE;                 // Уровень целостности процесса
            string priority   = "4";                        // Приоритет процесса
            #endregion

            foreach (Process current_process in process_list)
            {
                #region Обнуление получаемых параметров
                Exec_file           = ND_MESSAGE;
                capacity            = ND_MESSAGE;
                Parent_process_name = ND_MESSAGE;
                Parent_process_ID   = ND_MESSAGE;
                User_name           = ND_MESSAGE;
                SID        = ND_MESSAGE;
                Using_DEP  = ND_MESSAGE;
                Using_ASLR = ND_MESSAGE;
                IL         = ND_MESSAGE;
                #endregion

                try
                {
                    #region Определение параметров родительского процесса
                    //Parent_process_name = FindIndexedProcessName(current_process.Id);
                    Process Parent_process = FindPidFromIndexedProcessName(FindIndexedProcessName(current_process.Id));
                    Parent_process_ID   = Parent_process.Id.ToString();
                    Parent_process_name = Process.GetProcessById(Int32.Parse(Parent_process_ID)).ProcessName;
                    #endregion

                    #region Определение владельца процесса
                    User_name = GetUserName(current_process);
                    if (User_name == "")
                    {
                        User_name = ND_MESSAGE;
                    }
                    else
                    {
                        var account        = new NTAccount(User_name);
                        var SID_not_string = (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
                        SID = SID_not_string.ToString();
                    }
                    #endregion

                    #region Определение разрядности (типа) процесса
                    bool ans;
                    if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) ||
                        Environment.OSVersion.Version.Major >= 6)
                    {
                        bool retVal;
                        if (!IsWow64Process(current_process.Handle, out retVal))
                        {
                            ans = false;
                        }
                        else
                        {
                            ans = retVal;
                        }
                    }
                    else
                    {
                        ans = false;
                    }

                    if (ans == false)
                    {
                        capacity = "64-bit";
                    }
                    else
                    {
                        capacity = "32-bit";
                    }
                    #endregion

                    #region Определение использования технологии DEP процессом
                    bool flag = false, permanent = false;
                    if (capacity == "64-bit")
                    {
                        Using_DEP = "DEP включен (постоянный)";
                    }
                    else
                    {
                        int DEP = GetProcessDEPPolicy(current_process.Handle, out flag, out permanent);
                        if (flag == true && permanent == true)
                        {
                            Using_DEP = "DEP включен (постоянный)";
                        }
                        else
                        {
                            Using_DEP = "DEP отключен";
                        }
                    }
                    #endregion

                    #region Определение использования технологии ASLR процессом
                    IntPtr hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_WM_READ, false, current_process.Id);
                    PROCESS_MITIGATION_ASLR_POLICY PMAP = new PROCESS_MITIGATION_ASLR_POLICY();
                    bool ASLR = GetProcessMitigationPolicy(hProc, PROCESS_MITIGATION_POLICY.ProcessASLRPolicy, ref PMAP, Marshal.SizeOf(PMAP));
                    if (PMAP.DisallowStrippedImages == false &&
                        PMAP.EnableBottomUpRandomization == true &&
                        PMAP.EnableForceRelocateImages == false &&
                        PMAP.EnableHighEntropy == false)
                    {
                        Using_ASLR = "ASLR включен";
                    }
                    else
                    {
                        Using_ASLR = "ASLR отключен";
                    }
                    #endregion

                    #region Определение уровня целостности процесса
                    IL = ShowProcessIntegrityLevel(current_process.Id);
                    #endregion

                    #region Определение исполняемого файла
                    Exec_file = current_process.MainModule.FileName;
                    #endregion

                    priority = current_process.BasePriority.ToString();

                    #region Заполнение таблицы полученными данными
                    Table.Rows.Add(count,                                // Порядковый номер
                                   current_process.ProcessName,          // Имя процесса
                                   current_process.Id,                   // PID процесса
                                   Exec_file,                            // Исполняемый файл
                                   Parent_process_name,                  // Имя родительского процесса
                                   Parent_process_ID,                    // ID родительского процесса
                                   User_name,                            // Имя пользователя-владельца
                                   SID,                                  // SID пользователя-владельца
                                   capacity,                             // Тип процесса
                                   Using_DEP,                            // Использование DEP процессом
                                   Using_ASLR,                           // Использование ASLR процессом
                                   IL,                                   // Уровень целостности процесса
                                   priority,                             // Приоритет процесса
                                   "Нет");
                    #endregion
                    count++;
                }
                catch (Exception err)
                {
                    #region Запись в файл "Exeptions_LOG.txt" исключений, возникающих в ходе работы программы
                    string error_message = "№ " + count + Environment.NewLine +
                                           "Имя процесса: " + current_process.ProcessName + Environment.NewLine +
                                           "Исключение: " + err.Message.ToString() + Environment.NewLine + Environment.NewLine;

                    StreamWriter Log_file = new StreamWriter("Exceptions_LOG.txt", false);
                    Log_file.WriteLine(error_message);
                    Log_file.Close();
                    #endregion

                    #region Заполнение таблицы полученными данными
                    Table.Rows.Add(count,
                                   current_process.ProcessName,
                                   current_process.Id,
                                   Exec_file,
                                   Parent_process_name,
                                   Parent_process_ID,
                                   User_name,
                                   SID,
                                   capacity,
                                   Using_DEP,
                                   Using_ASLR,
                                   IL,
                                   priority,
                                   "Да: " + err.Message);
                    #endregion

                    count++;
                }
            }
        }
Ejemplo n.º 3
0
 static extern bool GetProcessMitigationPolicy(
     IntPtr hProcess,
     PROCESS_MITIGATION_POLICY mitigationPolicy,
     ref PROCESS_MITIGATION_ASLR_POLICY lpBuffer,
     int dwLength);