加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何在Windows中挂钩应用程序和进程启动?

发布时间:2020-12-13 21:29:49 所属栏目:Windows 来源:网络整理
导读:我正在尝试编写一个程序,它将挂钩到应用程序启动并捕获命令行.不知道从哪里开始,因为我在 Windows编程中非常环保. 非常感谢任何帮助 谢谢 你没有提到你喜欢的编程语言,所以我将使用C#作为代码片段. 您可以启动进程并捕获/写入其标准IO流. 以下代码段打开一个
我正在尝试编写一个程序,它将挂钩到应用程序启动并捕获命令行.不知道从哪里开始,因为我在 Windows编程中非常环保.
非常感谢任何帮助
谢谢
你没有提到你喜欢的编程语言,所以我将使用C#作为代码片段.

您可以启动进程并捕获/写入其标准IO流.

以下代码段打开一个进程并捕获其StdOut流:

using (var process = Process.Start(new ProcessStartInfo(FileName = @"yourExecutablePath",UseShellExecute = false,RedirectStandardOutput = true)))
    using (var stdout = process.StandardOutput)
        Console.WriteLine(stdout.ReadToEnd());

编辑1

看起来你想挂钩像CreateProcess这样的Windows API.

一种方法是编写内核驱动程序并使用诸如SSTD修补之类的挂钩技术.但编写内核驱动程序IMO非常麻烦.

在某些情况下,您可以使用用户级挂钩.有一些图书馆可以帮助您,包括:EasyHook,Deviare和MS Detour.

编辑2

您也可以使用WMI作为@David Heffernan建议但它只会在进程启动后通知您(而不是挂钩,这允许您在挂钩函数被调用和/或覆盖函数调用之前运行一些任意代码):

using System.Management;

// Run this in another thread and make sure the event watcher gets disposed before exit

var start = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));    

start.EventArrived += new EventArrivedEventHandler(delegate (object sender,EventArrivedEventArgs e) {
    console.WriteLine("Name: {0},Command Line: {1}",e.NewEvent.Properties["ProcessName"].Value,e.NewEvent.Properties["Commandline"].Value);
});

start.Start()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读