问题标签 [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.
unity3d - 游戏中的反作弊/故障
目前,我正在与一个基于 Unity 的游戏的团队合作。游戏仍处于开发阶段和 alpha 版本。
最近,我们发现该游戏存在作弊引擎、speedhack 等漏洞。更新后的更新,作弊现在稳定了。我们还介绍了 Unity 的 ACT 或反作弊工具包。由于游戏是基于 Unity 的,因此很容易在游戏中实现想法。
尽管“黑客”已经稳定,但“故障”却没有。
这是一个开放世界的生存游戏,它由拾取/丢弃物品组成。问题是当两个玩家一起拾取物品时(目前你必须在十字头在物品上方时按 E 才能拾取它)该物品会被复制。我们一直在努力修复它,但没有运气。
我们介绍了当附近有其他玩家时,玩家无法拾取物品。它看起来很奇怪,我们希望游戏流畅。我们还尝试了自动拾取物品。这是我们的计划,但我们还有什么想法可以做吗?
android - 基于 Cocos2dx 的离线游戏如何防止作弊?
最近在做一款基于Cocos2dx-lua的手机离线游戏。
我在 Google Play 上找到了一个名为 GameGuardian 的应用程序,它可以设置时间速度。该应用程序可能会修改gettimeofday()
. libc.so
我尝试了许多 API,例如os.time()
, SystemClock.elapsedRealtime()
,但都失败了。
有人可以给我一种避免应用程序影响的方法吗?
java - 检查玩家是否可以在所述位置放置块
我正在创建一个自定义的反作弊。然而,我已经到了一个让我很困惑的地步。我试图检测玩家是否可以在所述位置放置块,但随着我试图使其对非作弊玩家更可靠,它变得越来越复杂。目前,每当玩家与AxisAllignedBB
块(我相信,问题在于玩家的方向每秒只更新 20 次,而他们的帧速率可能会高得多。这通常会导致(在我的测试中大约每 15 个左右的块位置一次)被错误地取消。PlayerInteractEvent
Block
BlockFace
PlayerInteractEvent
用于查找 Block 的 Raycast 算法
但是,我怀疑这是问题所在。根据我的测试,它工作得很好。因此,我认为我必须依靠替代方法。这里有一些想法,但我不太确定它们是否令人满意。
想法:靠近街区
我考虑过放置的块是否在从光线投射中找到的块的 1 个块半径内(或者如果我正在查看与光线的块的最近距离,则可能更短),但这会带来太多问题。如果玩家将光标从障碍物移到更远的区域,则会触发作弊的误报。另一方面,玩家仍然可以在完全封闭的区域内建造,如果他们有北、东、南、西而不是西北、东北等的柱子。
想法:A* 寻路算法
如果我在 raycast 中将光线上的点设置为 0 G-Cost,G-Cost 会随着与光线的距离而增加,而 H-Cost 是距离目标块最近的距离,我觉得这可以解决这个难题。PlayerInteractEvent
我可以在取消之前设置一个最大 G-Cost 阈值。然而,问题是将 A* 与块的各种 AxisAllignedBB 结合起来似乎很困难。我也许可以创建一个由每个块 100x100x100 个点组成的网格,但我不确定这是否有效,也不是最佳实践。
思路:看看玩家能不能看到方块
这将非常有效,但我不确定它是否现实。为此,每次玩家放置一个块时,我都需要检测哪些块会与玩家交互半径中的其他块完全重叠。取出所有最终的非重叠块,我可以查看交互块是否包含这些。否则,交互将被取消。这似乎可能会对性能造成影响,而且我可以看到作弊也可能存在一些误报。
networking - 以可靠的方式找出延迟
背景:我正在开发一个小游戏,并利用玩家的延迟来做延迟补偿。该游戏是开源的,因此目前对系统进行逆向工程并延迟响应时间以人为增加报告的延迟是一项非常容易的任务,从而可能导致不公平的优势。
我当前的延迟检索策略是:
- 每个固定间隔我都会向玩家发送一条标记为“ping”的消息。(这与ICMP无关)
- 此 ping 消息由一个特殊的“ping”操作码和一个带有序列号的有效负载组成
- 一旦客户端收到所述消息,他就会发回一个带有“pong”操作码和具有相同序列号的有效负载
- 当服务器收到标记为“pong”的消息时,它会计算发送和接收之间经过了多少时间。这是往返时间
- 我们的延迟是 rtt / 2
在伪代码中
服务器:
客户:
正如你所看到的,客户很容易在他的代码中添加一个延迟来夸大他报告的延迟。
有没有更好的方法来让客户延迟以减少他们作弊的空间?
android - 我的应用程序的用户如何删除共享首选项?
我正在开发一个使用 SharePreferences 的应用程序,以避免用户作弊。但是用户如何删除 sharedPreferences 呢?
有更好的方法来保存像 SharePreferences 这样更安全的数据吗?
variables - 内存中的变量能否免受恶意内存编辑的影响?
假设我正在制作一个游戏,玩家的生命值存储在一个变量float player_hp
中。在玩游戏时,用户可以打开像作弊引擎这样的内存编辑器,在内存中进行一些巧妙的搜索,找到变量在内存中的位置。然后他们可以将其编辑为他们想要的任何内容,从而有效地允许他们作弊。
有没有一种奇特的方法来存储我的变量,可以有效地阻止用户恶意编辑它们?我应该在内存中移动它们吗?我应该加密它们还是散列它们?
如果重要的话,我主要使用 C++。
c++ - TruePlay 界面
我尝试从https://msdn.microsoft.com/en-us/library/windows/desktop/mt808781(v=vs.85).aspx运行 TruePlay 教程,但出现错误:
“无法激活 Windows 应用商店应用程序‘AppName’。ProcessName 进程已启动,但激活请求失败并出现错误‘ErrorNumber’(它表示“在系统二进制文件中发现错误,请尝试恢复您的 PC)-翻译自俄语“
我在 Visual Studio 2017 中使用了一个新的 C++ UWP 项目
此外,当我更改我的 Package.appxmanifest(如上面链接中的教程)并构建项目时,会出现此警告:
https://i.stack.imgur.com/2gflN.png
文件清单:
javascript - 保护 WebGL 游戏代码
作为经验丰富的 Web 开发人员,我知道 javascript 代码不安全,而只能是缩小/模糊处理。
然而,许多游戏引擎有足够的信心允许他们的引擎代码和客户的游戏代码被下载并在客户端/浏览器中可见。
-
试图了解 Unity3D 是如何做到这一点的,我遇到了客户端/浏览器下载的文件的以下细分:
一个包含 asm.js 运行时和 JavaScript 插件的 MyProject.asm.framework.unityweb 文件。`
包含播放器的 asm.js 模块的 MyProject.asm.code.unityweb 文件。
一个包含二进制图像的 MyProject.asm.memory.unityweb 文件,用于初始化播放器的堆内存。
包含资产数据和场景的 MyProject.data.unityweb 文件。
来源: https ://docs.unity3d.com/Manual/webgl-building.html
-
然后我看到他们正在使用 emscripten 将他们的 C/C++ 代码编译为 Javascript:
To run in WebGL, all code needs to be JavaScript. We use the emscripten compiler toolchain to cross-compile the Unity runtime code (written in C and C++) into asm.js JavaScript. asm.js is a very optimizable subset of JavaScript which allows JavaScript engines to AOT-compile asm.js code into very efficient native code.
来源: https ://docs.unity3d.com/Manual/webgl-gettingstarted.html
-
问题:
- 是 Emscripten 和/或 asm.js 以某种方式保护 Javascript 代码吗?如何?
- 它甚至安全吗?如果我真的很努力,我可以从这段代码中“窃取”一些东西并为游戏编写一个 hack/cheat:https ://files.unity3d.com/jonas/AngryBots/Release/AngryBots.js
- 如果我已经编写了一个 javascript 游戏,我现在可以做什么来做 Emscripten 为 Unity3D 游戏所做的事情?(假设#2是真的)
security - 知道程序是否已被客户编辑
我有一台服务器可以处理正在使用我的程序的客户端。我如何知道客户端(智能客户端)是否已编辑我的程序而不使用原始程序?(例如他反汇编了我的程序编辑和编译它以作弊)
security - 如何在 JS 游戏中实现反作弊?
我打算制作一个基于网络的游戏(使用three.js 和socket.io),我主要关心的一个问题是防止作弊。
我知道制作安全游戏的基础知识,即:
- 永远不要相信客户端,客户端仅用于渲染和输入捕获
- 将您的游戏逻辑放在服务器端
- 最好的反作弊是人类
知道这一点,我不知道如何保护的漏洞正是那些与客户端有关且服务器无法检查的漏洞。例如,作为攻击者,我可以:
- 修改渲染器或着色器以使墙不可见(wallhack)
- 修改相机的位置,这只是在一个变量中
- 注入将为我输入的代码(aimbot)
在经典游戏(可执行文件)中,有可以检测非法操作的程序。通常,反作弊程序会检查程序集并检查是否没有注入 dll。
也许有一个专门从事这项任务的混淆器(即使这意味着失去性能)?
我还没有完成所有的研究,但我希望你们中的一些人已经面临这个问题,并且可以通过定位我的研究来节省我很多时间。
非常感谢