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); } }
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++; } } }
static extern bool GetProcessMitigationPolicy( IntPtr hProcess, PROCESS_MITIGATION_POLICY mitigationPolicy, ref PROCESS_MITIGATION_ASLR_POLICY lpBuffer, int dwLength);