数据包协议安全目的的循环引用?替代解决方案?

时间:2014-03-12 19:48:27

标签: c# c++ security networking code-access-security

我正在使用C#编写的自定义网络代码(不使用内置的Unity网络框架)在Unity框架中开发多人游戏。由于游戏规模大(难以适应许多玩家)和竞争性(不希望人们拥有不公平的优势),因此在客户端进行数据包协议和处理这些数据包非常重要。尽可能地保护那些想要利用这些信息创建机器人/黑客等的人...... Ultima Online是一个很好的例子,它已经被“完全弄清楚”了 - 并且有很多程序可以用来在那里,人们已经开发出可以欺骗真正的客户端和机器人游戏玩法。如果可能的话,这就是我想要避免的事情。

据我所知,这是一个极其困难的问题(也许没有一个很好的解决方案)。显然这些数据包是公开可见的,但我相信有一些相当简单的技巧可以使它们对盲人观察者来说难以理解并且在性质上不断变化......

我主要担心的是反编译器。当C#代码被简单地反编译时,几乎肯定会发现我必须隐藏数据包内容/协议的任何技巧。我可能过度思考了这一点,你可能正在考虑“只使用混淆器”。我承认我对混淆器没有任何经验 - 它是否会真正阻止一个精明的个体能够发现数据包是如何“解密”/处理和“加密”并由客户端发送的?我想我已经开始讨论主题 - 这并不是关于混淆器的问题,尽管我想我会欢迎一个简单的答案,比如“只需用C#编写代码并使用混淆器。”

我的问题是: 因为C#代码很容易用反编译器发现,用C ++实现的程序通过反编译很难获得很多东西,是否有可能利用C#程序之间的循环引用(加载外部C ++库并用它执行函数)在发送之前操纵数据)和C ++库(它反过来加载C#库并用它执行函数 - 可能修改或不修改对网络协议重要的特定数据但没有任何可见上下文的函数,因为它是外部调用的) ?在我看来,以这种方式(如果它甚至可能),数据在发送之前的真正“按摩”总是两个库之间的一些相互作用,因此任何潜在的“探险家”都可能非常容易被误导因为只有一半的相互作用甚至是远程可见的。我毫不犹豫地完全依赖C ++库(没有与C#代码进行复杂的“对话”),因为如果程序员知道它的C#端,它似乎很容易利用该接口......或者也许我不知道我在说什么。

是否可以在两个这样的库之间创建这样的交互?

如果有可能,这甚至是一个好主意 - 为什么或为什么不呢?

是否有其他更好的解决方案可用于保护您的数据包协议,并使某人无法发现数据包数据的含义以及如何在客户端处理它们?

提前感谢您提供的任何见解!

0 个答案:

没有答案