zoukankan      html  css  js  c++  java
  • 防作弊原理

    private int curATK;
    private int curAtkKey;
    public int CurATK {
    get {
    return curATK ^ curAtkKey;
    }(http://www.my516.com)
    set {
    curAtkKey = Random.Range(0, 0xffff);
    curATK = value^curAtkKey;
    }
    }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    分析:^运算是异或运算,需要一点二进制的知识,异或运算是相同为0,不同为1,下面举例:3 ^ 4=7,3对应的二进制是11,4对应的二进制是100,异或运算之后的结果二进制是111对应的十进制就是7,下图程序验证一下:


    分析
    根据上面的程序你是否真真明白是如何防作弊的呢,num是我们输入的值,例如玩家当前的金币数量是4,但我们UI上的显示并不是直接Coin.Text = num.ToString(),这样玩家搜到num的内存就很容易修改了,就作弊了,我们UI上的显示值是hiddenValue^cryptoKey的值。玩家就算搜出num的值并修改了,对我们显示金币真实的数量并没有影响。

    分析插件Anti-Cheat Toolkit
    我们Unity开发估计很多人都会用这个插件,他是如何实现数据加密的呢,我们看下手册就会知道它是将Unity的基本数据类型都封装了一个对应的数据类型,例如:int->ObscuredInt,Float->ObscuredFloat,string->ObscuredString等。拿ObscuredInt举例:

    会发现它封装了一个跟Int对应的结构体,并且有一个混淆因子cryptoKey=444444,我们再看string类型的封装的一个类ObscuredString,它的混淆因子是string cryptoKey=“4441”,如果我们用这个插件啥都不修改,那如果我是黑客,我知道当前某游戏是Unity开发的并且数据做了防外挂处理,那么我如何破解防外挂,我肯定首先就想到的就是这个插件,并且知道这些混淆因子,那么我就相对容易能破解出来,所以如何再进一步防外挂,就必须要对插件的混合因子再做一个混淆或者修改就显得很重要。

  • 相关阅读:
    java算法--循环队列
    java算法--普通队列
    java算法--稀疏数组
    HelloWorld
    css
    自定义事件并且主动触发
    数组字符串操作
    进阶路上有你我-相互相持篇之ES6里箭头函数里的this指向问题
    关于一道面试题
    异步函数回调
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11535781.html
Copyright © 2011-2022 走看看