保护游戏的Java代码

ski*_*iwi -1 java security obfuscation jar deobfuscation

让我们假设经过几年的工作,我将准备一个3D游戏,可以被全球数百万人下载,它将是一个运行在客户端 - 服务器模型上的游戏.

据我所知,如果他们拥有.jar(在这种情况下是客户端),任何人都可以查看其他人的源代码.拥有客户的其他人有什么风险.jar?

检查部分(反作弊)无论如何都将在服务器端完成,所以我怀疑这里会有很大的风险,但我只是希望能够很好地了解可能发生的事情,所以更准确一点问以下问题:

  • 从其他阅读代码的人那里可以做些什么来保护,例如,client.jar?
  • 即使人们完全控制client.jar源代码,可以在单人游戏环境中对游戏本身进行什么伤害呢?
  • 在客户端 - 服务器多人游戏环境中可以做同样的伤害是什么?
  • 在个人和/或法律层面上对我/我的业务可能造成的伤害是什么?
  • 如果其他人决定复制游戏怎么可能呢,好吧我知道如果其他人只是以1:1的方式构建他们自己的游戏镜像我的游戏也会发生这种情况.

我想过把它放在gamedev上,但我认为它更适合这里,因为它直接关于编程语言 - Java - 和抽象编程问题.

kes*_*lam 5

在这一点上,我应该强调所有意见都是我自己的,并不一定反映我的雇主的意见.

不,如果他们有罐子,他们就看不到你的源代码.他们可以将它反编译成等效的源代码,这将非常难以阅读,但可以理解......正如他们可以解组目标代码(无可否认,这有点难以弄清楚).代码混淆确实会减慢它们的速度,但那些愿意这样做的人也习惯于处理它.Java的比其他一些语言被反向工程更加脆弱.

复制保护通常只是为了让诚实的人诚实.幸运的是,大多数人至少是中等诚实的.不诚实将其视为产品附带的免费拼图.你可以放慢速度.但实际上,除非你使用特定类型的硬件辅助安全性(基本上,在一个单独的封装机器内运行程序的关键部分),否则你无法阻止它们 - 这往往会导致成本增加和/或惹恼人们他们避免你的产品.大多数公司转而采用一种模式,要求注册代码以获得升级,支持,在线服务或任何其他......并且要么假设某些盗版将要发生,或定价足够低,要么定价盗版它是不值得的.

或者,对于商业代码,在法庭上追踪盗版.对于严肃的代码,大多数公司都非常清楚,通过允许盗版复制到他们可以通过盗版保存的方式,他们还有更多的损失; 我看到员工当场因制作盗版文件而被解雇.

事实上,一些公司已将"盗版"作为其商业模式的一部分."如果你从朋友那里得到这个程序,并且你喜欢它,请考虑向我们发送资金以支持开发人员和/或购买升级到当前版本." 令人惊讶的是,对于好产品,很多人都非常愿意自愿付款.不是每个人,但它有帮助.

解决有关更改代码的问题:

我不是律师,你应该为这个问题咨询一下,但我最了解的是你没有新的责任.如果他们弄乱了代码,那就是他们的错,他们的问题.

在单人游戏环境中,他们所能做的就是搞乱他们自己的副本.如果他们打破了,那就是他们的问题.如果他们作弊,他们只是在为自己付出的游戏体验而欺骗自己.

多人游戏是一个更大的问题; 如果他们对游戏进行逆向工程,他们就会弄乱你的数据库和其他玩家的游戏体验.据我所知,解决这个问题的唯一方法是将服务器设计为(a)仅允许客户端执行不会造成太大损害的事情,以及(b)观察玩家行为以尝试检测滥用行为将球员滥用出系统.这很烦人,但这是现实.如果你能证明你已经做出了合理的努力来做到这一点,它应该保护你免受这个级别的任何可能的责任....但是,我不是一个律师,程序员的免费法律建议就像免费编程律师的建议......

建立自己的游戏镜像你的:如果你能检测到他们正在访问你的服务器,这是合法的可操作性.如果你有像俄罗斯方块或Minehunter这样简单的东西那么你就会得到仿制品,除非你愿意在法庭上追求它们,否则除了提供升级之外你无能为力.注册球员认为淘汰赛不会得到.如果你写了一些复杂的东西,那么为了复制你的东西,他们可以创建自己的东西,所以这不像纯粹的盗版那样是一个问题.

而就远东地区的工业级盗版而言......再次,确实没有一个好的答案.

如果您找到实际有效的解决方案,那应该是您的产品; 世界将打败通往你家门的道路.但从长远来看,我真的不认为这是可能的; 你所能做的只是放慢速度并使用版权和许可协议,并建立一个忠诚的粉丝基础,他们宁愿与你合作而不是与你合作.