【发布时间】:2021-12-25 04:52:19
【问题描述】:
我正在开发一个应用程序来监控新运行进程在主线程开始运行之前。问题是当进程中的所有线程都被加载并且进程正在执行它的工作时,会执行下面的代码。我想做类似 C# 中 C++ 的 "sCreateProcessNotifyRoutineEx" 函数。 请帮忙
我尝试过的:
[DllImport("kernel32")]
public extern static int OpenProcess(int access, bool inherit, int pid);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool ReadProcessMemory(IntPtr hProcess, UIntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, IntPtr lpNumberOfBytesRead);
ManagementEventWatcher processStartEvent = new ManagementEventWatcher("SELECT * FROM Win32_ProcessStartTrace");
public Service1()
{
InitializeComponent();
processStartEvent.EventArrived += new EventArrivedEventHandler(processStartEvent_EventArrived);
processStartEvent.Start();
}
public async void processStartEvent_EventArrived(object sender, EventArrivedEventArgs e)
{
try
{
string processName = e.NewEvent.Properties["ProcessName"].Value.ToString();
string processID = Convert.ToInt32(e.NewEvent.Properties["ProcessID"].Value).ToString();
int pid = Convert.ToInt32(e.NewEvent.Properties["ProcessID"].Value);
Process p = Process.GetProcessById(pid);
string wholeFileName = p.MainModule.FileName;
await AnalyzeStartup(wholeFileName, p);
}
catch { }
}
【问题讨论】:
-
听起来像是 dll 注入的工作,或者最好从内核模式执行此操作,您实际上想要实现什么?
-
我正在为防病毒引擎开发一个组件,但我不一定想为此使用 C++,而是尝试使用 C#。执行前的初步流程分析是为了确保安全。
-
通常你会这样做,是dll注入创建进程和加载win32 api调用,代理调用以查看用户模式应用程序正在启动以及何时加载模块等,而且您通常会从内核执行此操作,因此它是可靠的,是的,这将是非托管代码而不是 C#。从来没有用 C# 编写过任何重要的防病毒软件,它只是不能做很多可能需要的事情,或者如果可以的话,无论如何它都是错误的工具