Android游戏不断被黑客入侵

Baj*_*Bob 142 security android copy-protection google-play

所以我们现在经历了好几次,我们发布了一款游戏(价格便宜),而且有人将其破解并放在镜子上.我们为所有应用设置了Google快讯,因此我们每天都会告诉他们正在进行黑客攻击.到目前为止,我们已经实施了Google建议的许可服务,每次使用唯一设备ID启动许可时,我们都会随机生成盐.当应用程序第一次启动时,我们运行一次检查服务.然后,我们为密钥生成一个512字符的哈希值,并在那里从SharedPreferences中比较存储的值.

现在,我知道检查一次可能是应用程序被阻止的地方.我们的字节码很可能是在没有启动检查的行的情况下查看和重新编译的.

从这里开始,我不想混淆我们的代码,因为我之前已经看过它.我想要更加坚实的东西,我也想学习如何正确地做到这一点.我对学习更感兴趣而不是赚钱,因为只有2%的人会寻找黑客版本.

到目前为止,就我自己而言,我已经提出了一个随机数发生器,它位于游戏的几个启动区域.启动时(例如,50次中的1次),将检查许可证.我知道这会使黑客更难攻击,因为破解者必须消除每个案例,编译,消除,编译.然而,这种方法仍然是可以破解的...所以你们有什么建议?同样,我对这个安全过程非常感兴趣,所以请教育,不要把它变成关于混淆的讨论或根据时间戳定期检查.

谢谢

Ber*_*nDK 116

我的想法不是黑客证明,但可能会删除一些黑客入侵游戏的兴趣.

免费增值模式

1)让前5-10级免费,这样人们就可以学习游戏并享受一些乐趣而无需付费.较少的人想破解第一级游戏,游戏将通过免费增值模式进一步扩展.

共享软件/集群级别包

2)让部分游戏关卡或逻辑保持在线状态.例如.当达到5级或10级或15级时,然后为游戏下载小部件,并且每次从游戏中提交进度日志并根据可能的值+哈希码对其进行验证.这也许可以自动关闭被黑客入侵的账户.

隐形骗子保护

3)你也可以计算你在游戏中放置的"小警告标志".不要只是在开始时检查"验证",不要将这些标志构建到游戏逻辑本身.不要让它打破游戏玩法,因为没有人会去寻找它.然后当用户到达级别怪物的末尾时,检查是否有任何已记录的警告标志.这些不会出现在游戏内部,因此具有被黑客版本的未知用户可能会玩数小时/天并且突然意识到他/她无法完成游戏或进入下一级别,因为游戏有"错误".用户不知道的是,此错误仅发生在被黑客户端上.

结论

比黑客更聪明.愚弄他们认为工作已经完成.进行copyprotection并知道更先进的破解者将能够删除它.但他们可能不想玩50级来检查裂缝是否也一直有效.

一旦他们意识到这个问题,他们也可能开始破解它.但是如果你将游戏分解为级别包,你仍然可以在每个包下载之间进行验证.因此,一旦您收到被黑客户端哈希数据,那么只需执行一个exeception并在客户端上崩溃游戏.哎呀游戏崩溃了.不要告诉它,因为它被黑了.程序错误可能会发生.:-)

再次,它不是黑客证明.但它可能会让他们烦恼到下一场比赛.最后,您还可以为游戏定期更新,只有最新版本才能"发布记录"等,以便活跃用户必须更新才能保持循环.

  • 叹气,太糟糕你不能+2一个答案:)一个评论:你怎么能表明问题在于游戏被盗版?如果游戏在盗版上出现错误/怪异,人们可能会认为这是一个错误并在论坛上讨厌游戏.我不认为这是Android上的一个大问题,因为没有那么多的论坛和大量的观众,但我想知道是否有必要预先制定一份"海盗副本可能无法正常工作"的免责声明. (12认同)
  • 哇,很棒的想法.真的很欣赏所有这一切,甚至从未考虑制作关卡并将它们发布到服务器并验证它们.Versoning ......好主意.让每个人都更新,让它破解是不合理的.非常感谢,这将让我忙碌一段时间! (5认同)
  • 我记得1978年在TRS80上的游戏,如果移除了复制保护,它会随机起作用.只有1次有效性检查,删除它意味着你可以自由地复制游戏,但奇怪的游戏性错误不会发生在合法的副本上,只会发生在被黑客攻击的副本上.没有人认为这是开发人员的错......我们知道发生了什么事. (3认同)
  • @Fixee和其他最近的蝙蝠侠阿卡姆庇护游戏有类似的东西:在盗版上,一个关键的举动会失败并让你在比赛初期陷入困境.然后,当有人抱怨论坛上的"错误"时,开发人员可以假笑并说"这不是游戏中的错误,这是你的道德准则中的一个错误". (2认同)

Ale*_*dam 20

我已经做了一些apk反编译和黑客攻击一段时间(不是warez,但mods和hacks主要是google应用程序和android框架,总是遵守xda-developers策略).

一旦你学会读懂smali,它几乎就像读取原始的java代码一样(但是有更多的LOC).因此,您可以找到并删除或替换为检查密钥而添加的任何代码.你甚至不需要每次重新编译以消除多个(一些搜索创造奇迹以找到类似的代码片段),即使需要编译/重新编译周期来查找它们,也只需要一两分钟反编译:一切都由apktool自动化,更多由apkmanager自动化.

话虽如此,我给你的建议是实现某种在线评分表或类似表,当用户在线查看评分表时,你可以查看你实现的哈希码并将其与相关的gmail帐户进行比较.这样你就可以向google报告hack并向warez的用户发送讨厌的消息,解释为什么这是非法的.

当然,可以实施一个新的黑客来消除得分表,但这会降低对warez的兴趣.

祝好运.


更新

在研究回答这个问题之后:将代码注入APK(真正关于Amazon DRM机制),我可以稍微分析一下亚马逊如何保护应用程序:它包括在各处检查安装有效性的方法(你可以看一个例子)他们在我对这个问题的回答中如何做到这一点).这将使任何破解应用程序的尝试都不是很困难,但是非常乏味.我相信这是一个强项:黑客不会花太多时间做这么多重复的任务:它没有挑战性,而且很无聊.我在这种方法中看到的主要缺陷是,可能会破解亚马逊应用程序本身,以便始终返回有效的答案.但是,如果您将当前的哈希检查与在您的方法中分散的某种在线检查混合在一起,我相信它被黑客入侵的可能性可能会大大降低.

  • 我应该提一下,很多人都有应用程序"打电话回家"的问题.就个人而言,这是愚蠢的 - 一个Android手机'通常会以很多方式回家',它并不重要,匿名许可验证检查的问题是什么?仍然想把它扔出去 - 有些人对"打电话回家"大肆宣扬,特别是当它没有透露时. (3认同)
  • 好吧,如果应用程序"打电话回家"并且不让用户知道,那么人们可能会遇到问题是可以理解的.但是基于网络的分数表解决了自愿连接的用户 (3认同)

Try*_*ain 20

取自我的解决方案,从这篇文章避免apk破解

实施您自己的许可库

我还建议您从Google I/O 2011 YouTube录制中查看:

逃避海盗和阻止吸血鬼

编辑:

该演讲稿,从规避海盗和停止吸血鬼

一些基本要点


oli*_*erg 8

我知道你并没有真正进行混淆,但我真的需要对此做出反应:

从这里开始,我不想混淆我们的代码,因为我之前已经看过它.我想要更加坚实的东西,我也想学习如何正确地做到这一点.

ProGuard在我的经验中非常可靠,虽然我使用了一些高级功能,例如AIDL和一些调用Java方法的本机代码.阅读文档并正确执行操作需要一些工作,但是一旦你有了ProGuard非常可靠,并且还可以优化您的应用.

自定义安全/加密技巧是好的,但没有混淆,就像我拙见的那样在水中扔石头.

我已经在生产中使用ProGuard好几个月,它只是完美无缺.

如果您正在学习,请仔细阅读ProGuard手册,进行实验并检查其输出日志.