unity做帧同步的动作游戏,如何防外挂?

2020-04-09 10:50发布

4条回答
男孩无衣
1楼 · 2020-04-10 11:34.采纳回答

你都强调了"帧同步",我猜你是想从"重发、篡改同步消息"方面进行防御.


1、对这类外挂的防御,主要还是从用户和服务器间通信的数据传输机制方面下功夫。因为用户与服务器的包体,外挂是可以拿到的(这个无法避免),所以全部重点放在包体协议被破解,可以通过规则制定、加密算法、知识产权保护等手段,防止被别人猜到,不让外挂知道数据包的二进制都是什么含义,这样他就没法伪装。

2、但是一旦被猜到,外挂就可以“假装”玩家向服务器发送大量的假包,篡改服务器端数据。

3、所以服务器端要对数据进行验证,包括边界验证、逻辑验证、数值验证、历史验证等等,这些验证策略有的是经验的积累,有的是在于外挂不断斗智斗勇过程中的“升级补丁”。


综上,从包体加密,到服务器验证两个方面防止吧。

其它的我想到再回来补充。


回答: 2020-04-10 11:34


我给你转一个CSDN的帖子, 这个帖子从理论上简单介绍了外挂的预防, 希望帮你从概念上理解一下。 

https://blog.csdn.net/z9061/article/details/22156941 (转载CSDN)

 

Ross
2楼 · 2020-04-27 10:25

腾讯的王者荣耀是通过给代码加密进行防外挂的,一般的一个外挂从开发到应用也得个几天吧,王者荣耀的代码加密,一个周变一次,你刚把外挂写好,过不了两天就又不能用了,得不偿失。另外警告大家不要想着靠外挂赚钱,如果真的能写好牛的外挂,有那技术都成编程大牛了,好好的工作比啥都强啊。

Mantra
3楼 · 2020-04-09 10:57

把所有重要的数据和运算全部放在服务器端计算,客户端只需要同步服务器计算的数据。

小狮子
4楼 · 2020-06-16 09:31

当客户端需要和服务器交换数据的时候,我们才会谈起同步概念。同步又分为状态同步和帧同步。

如果需要服务器来跑战斗逻辑,告诉客户端结果,那就是状态同步。帧同步的计算是完全放在本地的,所以才会出现外挂修改数据的现象。

对于帧同步而言,我们谈论更多的是如何检测和解决不同步。因为一旦不同步发生,那么不同的玩家就进入的完全不同的平行世界里去了。而不同步则来自于两个方面,1是自身逻辑产生的BUG,1是外挂。

拿著名的《王者荣耀》来说,一局游戏5V5共10个玩家,检测思路就是,每个玩家每段时间将自己端的数据上报,由服务器比对各个玩家数据的一致性,如果谁数据和其他人不一致了,则表示此人发生了不同步。此时程序是无法分辨出究竟是自己的代码出了问题,还是有人用外挂修改了数据。必须通过后台的人工追查才能定位问题。所以,王者其实是有一个允许的不同步值(大约在万分之五)。

回到黑魂的联机来说,也只是在极其有限的条件下,比如boss战才会开启联机。这个时候,对于游戏执行层面来说,增加一个玩家就好比是增加了一个AI一样。只是AI的逻辑和数据是来自于客户端预置,还是由服务器转发的其他玩家的行为。

它和暗黑3的房间模式有本质差别,暗黑3完全是由服务器控制的逻辑。

所以,综合结论,黑魂是没有办法防止别人外挂对你的影响,因为服务器不负责判定数据的真实与合法性,只是做数据和逻辑的转发。

但是,它可以从逻辑本身入手,进行外挂防治。

第一,加密客户端配置和资源。让玩家无法轻易的修改本地攻防数据。

第二,加密内存数据,不能让外挂轻易的找到存储攻击力、防御值等核心数据的存储地址,从而修改内存数据。

第三、混淆代码,不要让外挂轻易找到相关的函数地址,不然它只要把扣血的函数返回值改为0,那么就是无伤挂。


相关问题推荐

  • 回答 5

    第一种方法:通过点击场景文件打开Unity游戏工程找到Unity游戏工程所在的目录,我这里的工程放在在E盘根路径的Unity_workspace文件夹中。注意:unity软件不支持中文路径,所以不要把工程放在中文文件夹下。我们在这里就打开New Unity Project 4工程,进入到Ne...

  • 回答 13
    已采纳

    如果是学习研究的话,当然是体验官方的最新版本。要是项目开发的话,还是要选择长期稳定版本,也就是大版本的LTS。比如2017.4或者是2018.4都是LTS版本,至于后面的小版本可以去看下更新的内容来做选择吧!...

  • 回答 9

    unity3D是实时3D互动内容创作和运营平台。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。Unity平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC...

  • 回答 11

    1、Unity3D:如果你需要开发大型游戏,或需要开发3D游戏的,请选这个。2、Cocos2D-x:如果你开发的是中小型游戏,对安装包大小比较在意的,请选这个。3、Andengine、Cocos2D-iPhone:如果你只为开发单平台游戏,又非常在意速度和安装包大小,请选这个。最后。...

  • 回答 11

    首先在场景中调整好你要观看的视角选择摄像机,按下Ctrl+Shift+F或者菜单栏->GameObject->Align with view在不行的话,可以调整摄像机的Position 和 Rotation

  • 回答 5

    将MeshRender组件移除即可:

  • 回答 9

    1.在Asset store里选择一个skybox。 2.从素材库中选择一个人物角色,也可以自己建模或者在其他软件中做好再导进来。 3.想好角色如何运动,然后用自己比较熟悉的语言编写来作展示,这段代码可以实现当你按下键盘上的A/D/S/W的按键时,角色会向前后左右四个方向的...

  • 回答 17

    还是要学好编程基础呀如果你觉得编程很苦难 不一定要从c#开始学  学学js flash as等等  有个梯度就好多了如果要用好unity  不会编程那是不行的  学习的过程中都有个头疼的过程  记住  头越痛  代表你要接受的东西越多  坚持 你的大脑在和知识兼容中:D...

  • 回答 4

    xcel 表的操作少不了要引入第三方库,首先我们需要引入 Excel.dll 和 ICSharpCode.SharpZipLib.dll,这两个类库在网上都能找到;然后我们还需要引入 System.Data.dll,这个类库在 Unity3D 的安装路径下的 Editor\Data\Mono\lib\mono\unity 文件夹下能找到...

  • 回答 1

    需要添加如下引用: System.Configuration System.Data System.EnterpriseServices System.Security System.XML using UnityEngine; using System.Collections; using System;  using  System.Data;  using System.Data...

  • 物理引擎问题2021-06-15 17:35
    回答 4

    物理引擎则使用动量、扭矩等用高等数学手段来模拟真实物体,这将得到更真实的效果且使我们的编码更加容易。

  • 回答 1

    不能这样表述,三维通常是立体的空间,二维则是平面的。数学中通常是Oxyz表示空间直角坐标系,Oxy表示表示的是平面直角坐标系,你可以说空间直角坐标系中去掉Z轴可以转换为二维,因为去掉X或Y轴都能转换为二维。...

  • 回答 2

    GameObject.renderer.enabled//是控制一个物体是否在屏幕上渲染或显示 而物体实际还是存在的 只是想当于隐身 而物体本身的碰撞体还依然存在的GameObject.Destroy()//表示移除物体或物体上的组件 代表销毁该物体 实际上该物体的内存并没有立即释放,而是等到这...

  • Canvas三种渲染模式2021-04-29 19:50
    回答 10

    一:Overlay—覆盖模式类似于手机贴膜,所有UI都会显示在场景中2D,3D物体的上层在同一个Canvas下可以调整Canvas子物体的先后顺序,层级面板中越靠上则先被渲染多个Canvas下可以调整Canvas组件的Sort Order属性调整渲染顺序,数值越小的画布越先被渲染:Camer...

  • Unity引擎2021-04-29 19:47
    回答 4

    不得不说,Unity3d是个解放生产力的游戏引擎,自带了各种编辑器,可以进行一系列的可视化操作。需要注意的是,unity3d适合FPS游戏,物理游戏等中小型的游戏,并不太适合MMO开发。unity3d难学吗?如何学习unity3d呢?在学习之前又应该了解哪些内容呢?代码写不...

  • 回答 3

    不是人工检查的,如果你的问题里面有敏感关键字,是发不出去的,现在国内所有的网站在发布文章时都要进行检查的,所以你在发之前先检查一下看问题里面是否有违禁词语。

没有解决我的问题,去提问