问题标签 [anti-cheat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
151 浏览

security - 如何识别访问者是唯一的?

我尝试做一个互联网投票服务,但问题是互联网很容易通过创建多个帐户和投票同一件事来作弊。验证码和电子邮件无济于事,因为人类只需 3 秒即可通过。可以通过代理更改IP。如果我们在选民浏览器上放一些 cookie,他下次会清理它。

我创建了这个问题来寻求帮助我们可以使用所有浏览器(javascript等)的基本期货的方法,以防止我们的服务被轻易欺骗。

我自己的第一个想法是,我的网站有可能通过访问我的网站来访问用户浏览器上的所有 cookie 吗?因为当他们通过 CCleaner 为新帐户清理所有内容时,我可以理解浏览器是空的,所以这个人可能是个骗子,因为大多数真实用户来到我的网站时总是至少有几个来自不同网站的 cookie

0 投票
3 回答
6074 浏览

java - 如何保护客户端反作弊

第一的,

我想表明我知道从客户端发送的任何信息都不能被信任,因为它可以被欺骗。我对通过默默无闻的安全方法来阻止 99.9% 的潜在作弊者以及检测确实绕过安全的程序的能力很感兴趣。

我对此的一些想法包括验证它所保护的游戏以及任何潜在的作弊应用程序的文件和内存校验和,方法是允许客户端根据服务器的请求(通过 TCP)进行扫描,以检测内存注入作弊和/或作弊内存占用。因此,绕过黑客必须侦听通过 SSL 发送给它的所有 TCP 信息,然后通过反汇编加密/解密函数来解密消息以了解它想要什么。同样,客户端本身可能会自行更改,并允许它根据需要随机添加/删除功能(但由服务器保留),这样作弊者就很难学会如何绕过它。这可能毫无意义?

我只发现这对于更有经验的人来说难度适中,因此我对其他可能难以绕过的方法持开放态度。

我只对可能的实现感兴趣,而不是如何不可能有客户端反作弊,我只是想让它变得非常困难。

添加了 minecraft 和 java 标签,它适用于 Minecraft,我知道社区足够大,有人可能会击败我的系统,但我希望通过使用不断的更新和更改,我可以通过独创性和毅力击败他们。

编辑:我发现了这篇文章:如何防止我们的(多人)游戏中的作弊行为?我正在添加他的建议,以免重复,因为我正在寻找比显而易见的想法更多的想法(我不确定他是否不可绕过)

1)打开所有其他进程,并hook它们的WriteProcessMemory函数,使它们无法写入您游戏进程中的内存。正确完成这一步将阻止 90% 的所有作弊和作弊引擎。

2)做同样的事情,挂钩各种鼠标和键盘仿真功能。这将阻止许多瞄准机器人和其他类型的自动化机器人。

3) 在您的游戏自己的进程中挂钩 VirtualProtectEx/VirtualAllocEx/etc 函数,并监控哪些模块正在更改保护级别或分配新的内存块。当您的游戏进行大量分配时,您必须巧妙地处理这一点,以防止它过于占用 CPU,但这是可以做到的。

4) 挂钩 LoadLibrary 函数并监视任何动态加载的 DLL,以防止 DLL 注入。

5) 在你的游戏连接上使用一些轻量级的多态编码。

6) 使用一些反调试技术来防止调试器附加到您的进程。谷歌反调试,你应该能找到很多东西。

7) 使用定制的专有 PE 打包程序来防止对您的游戏进行有用的反汇编。

8) 连接到处理透明度和 alpha 混合的 OpenGL 或 Direct3D 函数和方法。

9)如果使用着色器,校验和你的着色器和着色器常数值。

10) 对玩家角色使用额外的遮挡剔除技术,以防止他们在视线被其他几何体阻挡时被渲染。它可能对你的表现也有帮助,也可能没有帮助,但它会防止许多墙黑客。

0 投票
1 回答
697 浏览

actionscript-3 - 如何通过降低 CPU 速度来防止在 Flash 游戏中作弊?

我在 AS3 中开发了一个 Flash 游戏,类似于 Facebook 上的音乐挑战赛,您需要从选择的歌曲中猜测,其中一首是正在播放的歌曲,分数基于您在 30 秒内猜到了多少,这个超时时间是由 Timer 的实例处理。

一切正常,但有人指出,通过降低 cpu 性能,计时器变慢,允许用户播放更长时间,猜测更多歌曲并最终获得更高的分数,然后我做了一些研究,并阅读以防止这种情况,我需要使用系统时间,问题是,我不知道该怎么做。

很感谢任何形式的帮助。

0 投票
0 回答
849 浏览

android - 安卓板式联网多人游戏防作弊

TL;博士

  • 安卓,棋盘类游戏。
  • 延迟不重要。
  • 通过 LAN/Global 的客户端-服务器,潜在的高分 => 不信任。
  • 未来潜在的蓝牙层 => 完全信任。
  • 移动意味着昂贵的流量,上游比下游更昂贵。
  • PRNG用的很多,一定是确定性的。
  • 用于序列化 + 传输的 kryonet

我和几个朋友正在为 Android 构建我们的棋盘游戏“端口”/“风味”(具有许多不同的事件类型和各种排列),并为其添加联网的多人游戏方面。我们不是加密或网络专家 =)

游戏的默认多人游戏层将基于客户端-服务器(服务器要么是专用主机,要么在安卓设备上运行[以防你和你的朋友在树林里而你没有网络])。这可能是一个全局服务器或 LAN——这并不重要。但是可能会有一个潜在的高分需要一些反作弊机制因为它是一个回合制的棋盘类游戏,延迟不是问题。

将来,如果我们有时间 - 我们可能会添加一个基于蓝牙的层,但在这种情况下,作弊不是问题,因为假设人们彼此很了解。

由于我们正在处理(很可能)上游比下游更昂贵的移动网络,因此从服务器下载比从客户端发送模型更便宜。

我们可能会使用 kryonet 进行数据的序列化和传输。

游戏会经常使用PRNG,因此需要有一些良好的反作弊和验证逻辑,所以在gamedev&stackoverflow大量搜索和阅读后,我设计了以下逻辑。我需要一些关于该计划的合理性的意见。非常感谢所有提示和建议。

假设/考虑:

  • PRNG 的行为具有确定性(考虑使用 Mersenne Twister)。
  • 正常的游戏玩法不应因反作弊措施而受到惩罚。

方案/计划:

  1. 在“握手”/自“onResume()”之后的第一个连接上 - 从服务器获取 PRNG 种子并存储它。每个玩家在服务器中都有自己的种子。

    1. 还要在同一请求中将游戏状态的哈希发送到服务器,如果不同步,则同步游戏状态。
  2. 在操作/用户输入时,获取下一个随机数 -> 保存到“随机数桶” (因此称为桶 - 桶是您可以添加但永远不会删除的“陷阱列表”)。还将输入 ID/Type/Enum 保存到列表中。

  3. 累积更改直到其他玩家必须知道(即下一个玩家轮到)/ PNR(不归路点)

  4. PNR 已达到

    1. 发送模型的更改 ID/类型/枚举(约 64 位)+ 桶 + 哈希(更改后)。桶 + 哈希是否应该加密,也许是 AES 256(其他更合适的加密技术?)。

    2. 根据 N = size( bucket ) 的 N 个连续随机数检查 bucket。如果不匹配,转到 6,然后转到 7。

    3. 临时更改模型(不承诺完整的游戏模型)。

    4. 计算哈希并检查客户端提供的哈希。如果无效转到 6。

    5. 有效:提交到服务器上的游戏模型。

    6. 无效:要求客户端恢复到服务器发回的状态。

    7. 作弊:禁止(不是 IP [动态 IP...],而是 MAC 地址或 UID)/从游戏中删除几个作弊。


编辑:另外 - 关于反作弊的另一个问题......对于类似棋盘游戏的 2 个农业高分的机器人团队的反措施有什么好的想法吗?

EDIT2:这是我所做的问题前研究的链接:

调查:

5) 在你的游戏连接上使用一些轻量级的多态编码。

6) 使用一些反调试技术来防止调试器附加到您的进程。谷歌反调试,你应该能找到很多东西。

7) 使用定制的专有 PE 打包程序来防止对您的游戏进行有用的反汇编。

8) 使用哈希作为承诺,然后在满足其他玩家行为的条件时揭示哈希承诺的含义。它很复杂,并且会对性能产生影响,但其中一些想法可能很有用,尤其是对点对点游戏。

9)我认为让破解者更难解决问题的一个好方法是在你的服务器中拥有游戏状态的唯一权威副本,只向客户端发送和接收更新,这样你就可以嵌入通信协议本身客户端验证(它没有被破解,因此检测规则仍然存在)。那,并积极监控发现的新奇怪行为可能会让你更接近你想去的地方。

与实时 FPS 相关,与我们的相关性较低:

差不多就这些了,希望大家给点建议!

0 投票
1 回答
516 浏览

macos - 防止访问进程内存

我做了一个例子,使用 task_for_pid() 和 mach_vm_write() 写入进程内存。

有没有办法阻止从另一个进程(如 OS X 上的作弊引擎)访问特定进程的内存。

如何防止另一个进程调用 task_for_pid?

除了钩子之外,没有多少其他人浮现在脑海中。

0 投票
2 回答
132 浏览

c# - 如何查看是否有任何程序正在模拟键

我制作了一款游戏,任务是按空格键 100 次,这是多人游戏,人们开始使用简单的应用程序,这些应用程序会向“空格”键发送垃圾邮件,我想知道是否有办法只听用户输入或检测模拟关键事件的程序。

我没有测试过这些程序之一,但我的程序会监听 KeyUp 事件。

刚刚测试:他们可以模拟按键

0 投票
1 回答
248 浏览

dll - 使用代理 dll 开发反作弊搜索

有一个通用的游戏作弊程序。

我可以制作一个代理 directx dll 并在其中注入我想要的任何代码。我应该扫描进程列表然后尝试查找足迹吗?

有人指出我适合启发式的方向吗?

0 投票
3 回答
76023 浏览

low-level - CheatEngine 的速度破解如何工作?

作弊引擎带有一个名为 speed hack 的功能,它基本上可以减慢或提高游戏速度。实际上,不仅是游戏,如果有一个时钟滴答作响的软件,它也可以加快速度。这是如何运作的?我可能会想象有一些内部时钟在运行这些事情,但不确定这些事情是如何在低级别发生的。

虽然这个功能在我尝试的大多数游戏上都有效,但在许多游戏上也失败了,例如 NFS Most Wanted。为什么?这些游戏运行时是否有任何不同的机制,或者只是一些反作弊?

0 投票
2 回答
373 浏览

c++ - 如何在开源客户端-服务器项目中禁止修改的客户端?

假设我有一个开源客户端和服务器软件,它们都是完全开源的。

如何确保修改后的客户端无法连接到未修改的服务器?或者检测修改过的客户端?比如防止开源海量多人网游作弊?

我找不到关于这个主题的任何东西,除了空的谷歌搜索我不知道从哪里开始寻找关于这个主题的信息,所以我想也许这里有人可以回答这个问题,甚至可以为我指出正确的方向以获得答案。

0 投票
1 回答
1404 浏览

javascript - 防止在定时在线测验中作弊

我的公司定期在互联网上举办比赛。这些包括简单的多项选择测验,最快完成测验的人将赢得奖品。

最近我们遇到了作弊者的大问题(很多不到一秒的条目,手动完成是不可能的)。时间是服务器端计算的,所以作弊者不能直接操纵时间。唯一可行的作弊方法是编写一个脚本来自动填写和提交测验。

我们已经实施了以下措施来尝试解决这个问题:

  • 将用户限制为一个条目(通过检查 IP 并询问电子邮件地址)
  • 从题库中随机抽取问题(不幸的是,每个测验都必须翻译,因此由于我们的翻译资源有限,实际题库大小非常小)
  • 随机化问答顺序
  • 随机化测验元素类名称和 id

即使采用上述所有技术,我们仍然会遇到设法作弊的人。

作为最后的手段,我们正在考虑用图像替换测验文本,并随机化图像名称,但这对于可访问性来说将是一场噩梦,并且仍然可以通过使用图像比较来欺骗。因此,我们真的希望尽可能避免这种情况。

所以我想知道这里是否有人对如何解决这个问题有任何想法?