如何访问具有反作弊功能的游戏的MainModule?

时间:2019-02-05 12:15:44

标签: c# process anti-cheat

大约一个月前,我为自己编写了一个python脚本,用于自动记录正在运行的程序及其其他相关信息,并使用C#程序获取该信息。

我今天下载了一个游戏,当我运行它时,出现了System.ComponentModel.Win32Exception错误对话框。

我打开Visual Studio进行调试,以获取错误。尝试访问Process.MainModule时收到错误消息。

当编写该程序时出错时,我在互联网上搜索了答案,并将C#程序设置为64位以访问64位进程,并请求管理员特权以访问以admin身份运行的进程。我能找到的有关MainModule错误的所有问题都与这两个问题有关。

游戏正在使用Easy Anti Cheat,我想这可能会阻止我访问该进程。

我还使用WMI尝试至少获取文件路径,以便可以从FileVersionInfo.GetVersionInfo函数中获取一些信息,但wmi也不返回文件路径或命令行。

我在python中使用psutil来获取命令行,因为如果不使用WMI就无法从C#中获取该信息,所以我尝试从那里获取一些信息,但是在尝试执行的任何操作上它都出错,我什至无法获取文件名,而我可以从C#中获取文件名。

C#代码的相关部分是

int pid; //I get this from command line arguments
Process p;
p = Process.GetProcessById(pid);
var filename = p.MainModule.FileName ?? "";

有没有一种方法可以至少获取exe路径,以便可以在不触发反作弊程序的情况下使用FileVersionInfo并有可能使自己被禁止? 甚至Windows 10任务管理器也不显示命令行(但是当我右键单击游戏并选择打开文件路径时,它会打开文件夹)。

1 个答案:

答案 0 :(得分:0)

我找到了a working example in C++并构建了一个可执行文件来获取进程的路径,并使用返回的路径调用FileVersionInfo.GetVersionInfo来获取我想要的信息。