我曾经以逆向工程为生,这就是为什么在发行之前应该对游戏进行混淆。

TLDR:只是已经混淆了您的游戏。 这适用于手机游戏,PC游戏和主机游戏,如果您从一开始就这样做,那么稍后您将感激不尽。

在“ Get Wrecked”发布的最后阶段,我一直在准备我们的代码,以确保在不出现太多问题的情况下安全地推广到整个世界。 我来自Java背景,尤其是我曾经对Java客户端进行逆向工程谋生。 令我惊讶的是,我得出的结论是,Unity社区并不非常喜欢混淆。 在几乎每个帖子中,我都会找到有关混淆为何毫无意义的原因,以及为什么您应该担心竞争而不是海盗的评论。 我认为这是完全错误和危险的。 这将是一篇很长的文章,但是为了您的生意,如果您正在考虑是否对代码进行混淆处理,请阅读它。

尤其是,这个标记为“正确”的答案让我大吃一惊。 请不要把这看作是对原始海报的攻击-他是一个非常聪明的家伙,肯定会做对一些事情。 但重要的是要警告人们相信您在网上阅读的所有内容的风险。 此答复只是将大多数误解汇总为一个,因此我将其用作示例。

请阅读此回复,让它沉迷一分钟。

我提到我对客户进行反向工程为生。 我可以告诉您,仅逆向工程Runescape客户的市场每年约为500万美元,它是由12至25岁的年轻人推动的,他们围绕消除混淆并发布自己的RS版本建立了整个社区,因为他们可以钱掉了。 您能想象CSGO改装市场有多大,WoW改装市场可能有多大? 您明白了—有很多人靠您的工作为生,他们可以很好地保护自己,以至于您几乎无法取舍他们的内容。

迄今为止,Runescape专用服务器承载着RS自身在线播放器中的20%。 服务器足够复杂,甚至可以“假装”其在线播放器数量,以使其看起来比市场还小(我发明了这种技巧,虽然不一定为此感到骄傲,但现在已经成为一种规范)。

1)其他人的游戏的自托管版本/克隆(和私有服务器)

尽管向客户提供比盗版更好的服务是一种真理,但总是会有作弊者,他们更愿意在私有服务器/克隆上获得更快的体验,并且比使用优质的服务器/克隆更快地访问相同的项目。长期磨。

这里的风险是这些作弊者足够精巧,可以通过针对性的活动来针对您的玩家。 尤其是当他们通过工作获利时。 对于他们来说,这只是一项正常的业务,但慢慢地,当然您会看到他们的市场在增长,而您自己的筹码将消失。

混淆不会阻止入侵者访问您的游戏。 如果他们受到如此强烈的推动,那么他们绝对可以对您的客户进行混淆处理,然后将其发布给全世界,或者以此为基础创建自己的业务。 如果不进行混淆,则只需几分钟即可完成;如果进行混淆,则可能需要数周(甚至数月,甚至数年)才能对客户端的1个简单版本进行反混淆。

这很重要,因为到完成时,您已经领先了10步。 混淆并不能为您提供安全保障,它可以为您提供时间,让您保持领先于作弊者的时间,并为社区提供他们所需的优质服务,以防止他们作弊。 这样,作弊者将永远无法在游戏中添加您必须拥有的功能并跟上您的步伐。 他们总是会落后几个月/几年,这通常会阻止人们从头开始。

为了有效地做到这一点,请确保您的混淆经常变化,例如,不要每次都通过完全相同的哈希值来抛出方法。 只要每隔几周/几个月更改一次,就可以为几个版本保留相同的哈希值,这没有问题。

为了有效地做到这一点,请确保每次混淆时您的标识符都会更改。 例如,不要每次都使用完全相同的哈希值来抛出方法。 只要每隔几周/几个月更改一次,就可以为几个版本保留相同的哈希值,这没有问题。 大多数混淆器提供混淆日志,您仍然可以使用它们来读取从客户端收到的错误代码。 编写开发人员可以使用的快速“将混淆后的堆栈跟踪转换为人类可读的”程序,只需花费不到5分钟的时间。 日志看起来像这样(去掉黑色条纹,它就在那里,所以人们无法弄清楚我们使用了哪种混淆器并对种子进行反向工程)

为了让您大致了解一下这种威胁的严重性,这是我16岁那年的私人服务器,现在想象一下,如果所有这些人都只邀请了一位朋友,或者我是否可以将其持续更长的时间。

这个孩子可以通过Youtube教程在大约10分钟内反编译您的游戏。

2)发布商谈判和直接克隆

其次,重要的是要始终保持竞争优势。 就我们而言,我们正在与中国的一些发行商就发行我们的游戏进行谈判。 如果您真的认为它们不够成熟,无法对游戏进行模糊处理,则可以更改一些资产并在签署之前将其释放,然后再考虑一下。 或者,如果他们的一名开发人员决定离开出版公司,但仍然在您的设备上拥有您的构建,并且做同样的事情,但完全无法追踪,该怎么办? 如果您的游戏真的很不错,那么您不希望将未混淆的内部版本发送给您自己的开发人员,以进行调试。 风险实在太高了,特别是如果无法与特定组织/人员进行谈判并且他们已经看到了潜在的风险。

3)作弊客户

我们未必涉及的一件事是在您的游戏中使用作弊客户端(或机器人)。 如果进行混淆,则会大大降低这些作弊的创建者的速度,甚至可以花时间编写代码以在作弊之前就对其进行检测。 实际上,完成这些操作后,您可能已经更改了代码库,以至于他们的作弊甚至无法在普通人已安装的当前版本上起作用,或者您的混淆已更改,并且他们正在调用的方法不再存在。相同的形式。 对于某些游戏,这可能是生与死之间的差异。

4)我不是在说什么

我并不是说您应该在客户端上运行敏感的逻辑。 混淆不会帮助您。 如果作弊有风险,请务必在服务器上运行敏感的逻辑。 不要将东西发送给您,如果您确实希望用户不希望他们最终进行修改,则不要向他们发送东西。

如果有任何我没有提及的原因,请告诉我。 哦,并与您的游戏开发者朋友分享。

5)您应该混淆的内容:

  1. 至少要对方法名称,类名称和参数进行混淆,然后通过混淆器添加伪代码。 弄清楚您只花了一个小时重命名一次性方法,没有什么比使人更疯狂的事了。
  2. 如果您使用统一性,还可以使用字段,属性和事件。
  3. 不要忘记每隔几周/几个月更改一次混淆算法(这就像向哈希中添加新种子一样简单)
  4. 请记住,如果您使用序列化和反序列化。 您可能将无法混淆模型类字段。 这不是理想的方法,但是如果您有足够的伪造代码,那应该没问题。

皮姆