保护游戏的Java代码

时间:2014-01-11 15:49:40

标签: java security jar obfuscation deobfuscation

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

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

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

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

我考虑过把它放在gamedev上,但我觉得它更适合这里因为它直接关于编程语言 - Java - 以及抽象编程问题。

3 个答案:

答案 0 :(得分:5)

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

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

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

或者,对于商业代码,在法庭上追踪盗版。对于严肃的代码,大多数公司都非常清楚,通过允许盗版复制到他们可以通过盗版来节省更多的东西;我看到员工当场因制作盗版文件而被解雇。

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

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

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

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

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

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

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

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

答案 1 :(得分:0)

  • 可以采取哪些措施来保护其他人阅读代码的client.jar?

    对代码进行模糊处理,这使得阅读代码更加困难,但并非不可能。

  • 即使人们对client.jar源代码拥有完全控制权,可以在单人游戏环境中对游戏本身做出什么伤害呢?

    他们可以控制一切(改变他们喜欢的任何东西),我不知道这对你的游戏有什么影响,商业明智。但是很多游戏都提供了改变游戏环境的方法,这使得玩家更喜欢游戏。

  • 在客户端 - 服务器多人游戏环境中可以做同样的伤害?

    它将使游戏协议的逆向工程更容易,你将开始[BOTs]而不是真正的玩家玩游戏,除了游戏UI施加的任何约束将变得无用。

  • 在个人和/或法律层面上对我/我的业务可能造成的伤害是什么?

    取决于您如何货币化以及您在哪个国家经营(本地低点)。我想你应该咨询这方面的法律专家。

答案 2 :(得分:0)

“如果他们拥有.jar,任何人都可以查看其他人的源代码” - 这不是真的。您可以使用源代码创建特殊jar,但是您没有义务这样做才能运行程序。该程序可能只包含“二进制jar” - 即包含已编译的java代码和/或资源,无源。 更正:,因为二进制代码可以反编译回java代码(例如,使用http://jd.benow.ca/),对编译代码进行模糊处理或加密非常重要(google for JODE,RetroGuard等。)

  • 从其他阅读代码的人那里可以做些什么来保护,例如,client.jar?

您可以创建“瘦客户端”,它不会执行任何操作,但会从指定的服务器下载主代码。当然,您必须保护流量并使用此类密钥身份验证,这样就无法欺骗客户端使用虚假服务器。

  • 即使人们完全控制client.jar源代码
  • ,有什么危害

假设您没有向任何人提供源代码级别控制

  • 在客户端 - 服务器多人游戏环境中可以造成的伤害是什么?

机器人和DOS攻击至少

  • 在个人和/或法律层面上对我/我的业务可能造成的伤害是什么?

这取决于具体的实施和商业模式

  • 如果其他人决定复制游戏怎么可能呢?好吧,我知道如果其他人只是以1:1的方式构建他们自己的游戏镜像,也会发生这种情况。

如果您的客户端程序是逆向工程的,那么几乎不能保护它免受复制。否则你应该实现这样的网络协议,这使得拷贝不可能/无用。