当用户启动另一个exe文件/程序时,在c#winforms程序中检测

时间:2014-03-22 19:28:53

标签: c#

我正在开发一个与我的游戏服务器通信的反热c#程序。启动时程序需要检查启动的程序并扫描不良程序。此外,它还需要连续扫描已启动的程序,因为用户可以运行exe应用程序来欺骗游戏。

问题是可以重写程序(aimbot.exe到something.exe),因此检测不能通过名称完成。 我怎么能检测到正在运行的程序?从开放程序中找到exe文件,然后从这些exe文件中获取MD5哈希并将它们与已知作弊程序列表进行比较也是可行的吗?有可能,还是有更好的解决方案?

编辑: 主要问题是AimBot - 它是一个旨在自动瞄准玩家的应用程序,你只需要按下鼠标左键进行拍摄,每次击中都是100%准确。我的程序适用于mod Gta San Andreas多人游戏,所以有没有办法检测某些应用程序是否附加到游戏中?

1 个答案:

答案 0 :(得分:0)

您可以使用Process.GetProcesses()方法获取当前正在运行的流程列表:

try
{           
    var processes = Process.GetProcesses();
    foreach (var process in processes)
    {
        Console.WriteLine(String.Format("{0} - {1}", process.Id, process.ProcessName));
        Console.WriteLine(process.MainModule.FileName);
    }
}
catch (Exception exception)
{
    Console.WriteLine(exception.Message);
}

使用Process对象,您可以检索完整文件名,类型,开始时间等信息,以便根据文件大小计算校验和。

您可以使用MD5 hash方法计算流程名称的MD5 ComputeHash(),例如:

try
{           
    var md5 = MD5.Create();
    var processes = Process.GetProcesses();
    foreach (var process in processes)
    {
        var md5Hash = md5.ComputeHash(Encoding.ASCII.GetBytes(process.ProcessName));
        var md5HashAsBase64 = Convert.ToBase64String(md5Hash);
        Console.WriteLine(String.Format("{0} - {1} - {2}", process.Id, process.ProcessName, md5HashAsBase64));
    }
}
catch (Exception exception)
{
    Console.WriteLine(exception.Message);
}

您可以使用上面的代码不断提取正在运行的进程列表,或者您可以使用Windows钩子拦截创建/启动新进程。问题是,第二种选择并不容易。您可以找到有关挂钩的更多信息:here - Hooks in Visual Studio with C#Windows hooks和此处Windows Hooks with .NET Framework