【问题标题】:How to detect if current process is suspended?如何检测当前进程是否已挂起?
【发布时间】:2016-08-08 04:45:47
【问题描述】:

您好,我正在为游戏制作启动器/反作弊程序,昨天我发现用户可以简单地使用 Process Explorer 挂起反作弊线程并注入 hack,然后清理使用过的 dll,然后取消挂起并进行 hack。 我试图找到任何方法来检测它,但只发现如何暂停进程,而没有发现如何检测它我还查看了应用程序和进程事件,但没有发现任何可用的.. 现在我在反作弊线程中添加了一个“计时器”,如果 3 秒内没有进程/模块扫描,它将关闭游戏,但是当游戏加载时,它会在一段时间内占用几乎 100% 的 cpu,对于我来说它大约2 秒,但在一些较旧的处理器上可能长达 10 秒没有扫描,所以它根本不是一个选项..

那么这个事件是否记录在任何地方?或者我该怎么做?我知道我可以找到进程或线程状态,但当我的所有线程都挂起时却找不到

【问题讨论】:

  • 什么意思?挂起的进程或线程就是这样:挂起。您的代码没有执行。它如何“知道”它已被暂停?如果没有一个很好的minimal reproducible example 可以清楚地显示您正在尝试做什么,那么您的问题充其量就太宽泛了。有太多可能的场景与您的描述相匹配,并且有太多的答案无法与之相匹配。但实际上,你似乎在你的追求中选择了一条弄巧成拙的路线。
  • 您可以随时尝试 RobinHood/FriarTuck 策略(请参阅 catb.org/jargon/html/meaning-of-hack.html) - 让两个进程相互监控可疑行为 :-)
  • 彼得我的问题应该是是否有任何进程状态日志,或者我可以在进程被取消暂停时引发事件?我也在考虑让两个应用程序相互检查,但如果可能的话,我想避免这种情况..

标签: c# multithreading process suspend


【解决方案1】:

没有什么好的选择……但有 3 种可能可行

  1. 创建 2 个进程

    • 首先是包含所有代码和 将扫描第二个进程
    • 第二个进程将扫描 Main 过程(就像@paxdiablo 所说)

    如何绕过它?一次选择两个进程并挂起它们。

    有些用户会尝试一次选择 2 个进程。

  2. 搜索打开的进程,如果 Process Explorer 正在运行,则终止它

    如何绕过?使用另一个带有挂起选项的任务管理器

    缺点?您的 AntiCheat-Launcher 可以被 Anti-Virus 检测到。

  3. 将您的代码嵌入到游戏代码中(例如修改)。

    我认为这是最好的选择……但如果这个游戏不是用 C# 编写的(例如 Minecraft),那么你必须学习一门新语言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2019-07-09
    相关资源
    最近更新 更多