C# Anti-Cheat 优化

简介

unity 有个很出名的插件 AntiCheatToolKit,几乎做游戏的都会考虑用这个插件防止数据篡改;但是公共的插件必然有公共的破解方法,面对游戏一直被破解的情况;我们考虑换一下这个加密方式
防破解,防外挂的路太长了,在非CS模型下,目前我们也只能遇矛加盾,被动的防御

原版

  • 加密:很直接的异或混淆处理
  • 取值:都用混淆后的值解出真实值给外部用
  • 检查:数据修改时先检查原值解开后是否和内存里备份的原值相同,不相同的话认为被篡改并抛出回调;然后继续用内部的值

本身的思路很清楚,只是加密的方式过于简单了,想要获取加密用的秘钥,只需用0值传入传出一下就好了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/// <summary>
/// Encrypts passed value using passed key.
/// </summary>
/// Key can be generated automatically using GenerateKey().
/// \sa Decrypt(), GenerateKey()
public static int Encrypt(int value, int key)
{
return value ^ key;
}

/// <summary>
/// Decrypts passed value you got from Encrypt() using same key.
/// </summary>
/// \sa Encrypt()
public static int Decrypt(int value, int key)
{
return value ^ key;
}

修改

  • 只考虑加密算法上的修改,一样基于异或,但是做更多的步奏避免从算法层面上直接获取到解密用的秘钥
  • 核心思路是: 更多层的异或混淆,每次混淆用的key也(看似)没有规则的变更一下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
private static int left_rotate(uint src, int bits)
{
return (int)((src << bits) | (src >> (32 - bits)));
}
private static int right_rotate(uint src, int bits)
{
return (int)((src >> bits) | (src << (32 - bits)));
}

/// <summary>
/// Encrypts passed value using passed key.
/// </summary>
/// Key can be generated automatically using GenerateKey().
/// \sa Decrypt(), GenerateKey()
public static int Encrypt(int value, int key)
{
value = value ^ key;
value = right_rotate((uint)value, key % 10); // offset 1
value = value ^ key;
value = right_rotate((uint)value, key % 100000 / 10000); // offset 5
value = value ^ key;
return value;
//return value ^ key;
}

/// <summary>
/// Decrypts passed value you got from Encrypt() using same key.
/// </summary>
/// \sa Encrypt()
public static int Decrypt(int value, int key)
{
value = value ^ key;
value = left_rotate((uint)value, key % 100000 / 10000);
value = value ^ key;
value = left_rotate((uint)value, key % 10);
value = value ^ key;
return value;
//return value ^ key;
}
------ 本文结束 ------
------ 版权声明:转载请注明出处 ------