Android游戏一直被黑客攻击

所以我们现在经历了好几次,我们发布了一款游戏(价格便宜),而且有人将其破解并放在镜子上。我们为所有应用设置了Google快讯,因此我们每天都会告诉他们正在进行黑客攻击。到目前为止,我们已经实施了Google建议的许可服务,每次使用唯一设备ID启动许可时,我们都会随机生成盐。当应用程序第一次启动时,我们运行一次检查服务。然后,我们为密钥生成一个512字符的哈希值,并在那里从SharedPreferences中比较存储的值。 现在,我知道检查一次可能是应用程序被阻止的地方。我们的字节码很可能是在没有启动检查的行的情况下查看和重新编译的。 从这里开始,我不想混淆我们的代码,因为我之前已经看过它。我想要更加坚实的东西,我也想学习如何正确地做到这一点。我对学习更感兴趣而不是赚钱,因为只有2%的人会寻找黑客版本。 到目前为止,就我自己而言,我已经提出了一个随机数发生器,它位于游戏的几个启动区域。启动时(例如,50次中的1次),将检查许可证。我知道这会使黑客更难攻击,因为破解者必须消除每个案例,编译,消除,编译。然而,这种方法仍然是可以破解的...所以你们有什么建议?同样,我对这个安全过程非常感兴趣,所以请教育,不要把它变成关于混淆或根据时间戳定期检查的讨论。 谢谢     
已邀请:
我的想法不是黑客证明,但可能会删除一些黑客入侵游戏的兴趣。 免费增值模式 1)让前5-10级免费,这样人们就可以学习游戏并享受一些乐趣而无需付费。较少的人想破解第一级游戏,游戏将通过免费增值模式进一步扩展。 共享软件/集群级别包 2)让部分游戏关卡或逻辑保持在线状态。例如。当达到5级或10级或15级时,然后为游戏下载小部件,并且每次从游戏中提交进度日志并根据可能的值+哈希码对其进行验证。这也许可以自动关闭被黑客入侵的账户。 隐形骗子保护 3)你也可以计算你在游戏中放置的“小警告标志”。不要只是在开始时检查“验证”,不要将这些标志构建到游戏逻辑本身。不要让它打破游戏玩法,因为没有人会去寻找它。 然后当用户到达级别怪物的末尾时,检查是否有任何已记录的警告标志。这些不会出现在游戏内部,因此具有被黑客版本的未知用户可能会玩数小时/天并且突然意识到他/她无法完成游戏或进入下一级别,因为游戏有“错误”。用户不知道的是,此错误仅发生在被黑客户端上。 结论 比黑客更聪明。愚弄他们认为工作已经完成。进行copyprotection并知道更先进的破解者将能够删除它。但他们可能不想玩50级来检查裂缝是否也一直有效。 一旦他们意识到这个问题,他们也可能开始破解它。但是如果你将游戏分解为级别包,你仍然可以在每个包下载之间进行验证。因此,一旦您收到被黑客户端哈希数据,那么只需执行一个exeception并在客户端上崩溃游戏。哎呀游戏崩溃了。不要告诉它,因为它被黑了。程序错误可能会发生。 :-) 再次,它不是黑客证明。但它可能会让他们烦恼到下一场比赛。最后,您还可以为游戏定期更新,只有最新版本才能“发布记录”等,以便活跃用户必须更新才能保持循环。     
我已经做了一些apk反编译和黑客攻击一段时间(不是warez,但mods和hacks主要是google应用程序和android框架,总是遵守xda-developers策略)。 一旦你学会读懂smali,它几乎就像读取原始的java代码一样(但是有更多的LOC)。因此,您可以找到并删除或替换为检查密钥而添加的任何代码。你甚至不需要每次都重新编译以消除多个(一些搜索创造奇迹以找到类似的代码片段),即使需要编译/重新编译周期来查找它们,也只需要一两分钟反编译:一切都由apktool自动化,更多由apkmanager自动化。 话虽如此,我给你的建议是实现某种在线评分表或类似表,当用户在线查看评分表时,你可以查看你实现的哈希码并将其与相关的gmail帐户进行比较。这样你就可以向google报告hack并向warez的用户发送讨厌的消息,解释为什么这是非法的。 当然,可以实施一个新的黑客来消除得分表,但这会降低对warez的兴趣。 祝好运。 更新 在研究回答这个问题之后:将代码注入APK(真的关于Amazon DRM机制),我可以稍微分析一下亚马逊如何保护应用程序:它包括在各处检查安装有效性的方法(你可以看一个例子)他们在我对这个问题的回答中如何做到这一点)。这将使任何破解应用程序的尝试都不是很困难,但是非常乏味。我认为这是一个强项:黑客不会花太多时间做这么多重复的任务:它没有挑战性,而且很无聊。我在这种方法中看到的主要缺陷是,可能会破解亚马逊应用程序本身,以便始终返回有效的答案。但是,如果您将当前的哈希检查与在您的方法中分散的某种在线检查混合在一起,我相信它被黑客入侵的可能性可能会大大降低。     
取自我的解决方案,从这篇文章避免apk破解 实施您自己的许可库 我还建议您从Google I / O 2011 YouTube录制中查看: 逃避海盗和阻止吸血鬼 编辑: 逃避海盗和阻止吸血鬼的演讲笔记 一些基本要点 修改LVL 实施LVL防篡改 使用混淆 添加反射     
我知道你并没有真正进行混淆,但我真的需要对此做出反应:   从这里开始,我不想混淆   我看到它的代码坏了   之前。我想要更加坚实的东西,我也想学习如何正确地做到这一点。 ProGuard在我的经验中是非常可靠的,虽然我使用了一些高级功能,如AIDL和一些调用Java方法的本机代码。阅读文档并正确执行操作需要一些工作,但是一旦你是ProGuard非常可靠,并且还可以优化您的应用。 自定义安全/加密技巧是好的,但没有混淆,就像我拙见的那样在水中扔石头。 我已经在生产中使用ProGuard好几个月,它只是完美无缺。 如果您正在学习,请仔细阅读ProGuard手册,进行实验并检查其输出日志。     
机会,那么有更多有才华的程序员然后你(适用于所有程序员),是100%。如果这是真的,你无法修复黑客攻击。但是你可以花很多时间和精力去破产。 如果你想赚一些钱,你需要对你的目标用户群和行为科学做一些研究。你需要让用户玩,带来新的钱,就是这样。 此外,你错了。黑客是您用户群中最活跃的成员,您的行为方式与您不想要的方式相同。 以Facebook上的Zynga游戏为例,你觉得你被黑了吗? - 当然,大约有+100000名玩家只玩,因为你可以使用机器人,自动化一切。 拥有真实用户的庞大活跃用户群僵尸网络,使得归档型游戏玩家想要玩游戏 - 如果你的游戏,它看起来很酷,那么Avarage Joe也想玩。如果Avarage Joe玩,那么他的朋友可能想要玩,而你可能不会关心其他任何东西,然后比他/她的朋友更好,消磨时间或者聊聊聊天。 Avarage Joe的朋友很可能愿意付出比Joe更好的代价,而是愿意投资一些让他们变得更好的东西。 此外,如果真正的价值是免费玩游戏,那么使用免费黑客版本的用户很可能永远不会为此付费。但你的Avarage Joes和他们的朋友就是这样。所以这就像你可以拥有的最便宜的广告。如果您想赚取大量用户群,那么只需对级别和图形进行少量更改即可制作游戏的新版本。     
盗版永远是一个问题。通过大型破解者比开发人员更擅长玩这种安全无害的游戏。     
多么有趣和令人不安的问题。 :-)作为练习,您可以尝试通过亚马逊发布应用程序;他们有自己的DRM机制;我想知道它是否比ProGuard更好用......     
我认为其中一个关键因素是分散代码,因此并非所有代码都在一个地方。如果你有一个名为LicenseChecker.checkLicense()的函数来检索许可并检查它,你可以确定它会被及时禁用。 你所拥有的一个优点是,破解者无法看到你的代码的评论(如果你混淆了,方法/变量名称),所以想出一些奇怪的东西。在一个活动的onCreate()中,您将获得许可证ID。在onResume()中,您将获得另一个值来检查它。也许创建一个线程并在那里做一些检查。然后,其他一些不相关的代码(可能是播放器控件)可能会获取该值并进行比较并将结果存储在某处。然后其他三个不相关的代码片段将独立检查该值,如果不匹配则禁用您的应用程序。 现在我应该提前说这会让你自己头痛 - 显然,杂乱,讨厌的代码更难以调试并容易导致错误。最糟糕的情况是,您在合法购买的应用程序中创建误报。 而且,当然,一切都可以进行逆向工程 - 一旦破解者找到应用程序被禁用的位置,它们就会追溯正在读取的值。然后他们可以追溯它存储的位置,并追溯到那里.....或者,更容易,他们可以禁用最终检查(这就是为什么我推荐3个不同的地方,所有触发延迟)。安全性与最薄弱的环节一样好。 你将无法阻止盗版。你最好的选择是延迟盗版的传播,直到关于你的应用的最初炒作平静下来。     
首先,我不认为自己是SW安全领域的专业人士,但是: 我认为重要的是让应用程序依赖于签名检查的某些部分。不要让它立即生效,但让它设置一些标志或更改一些值。稍后,使用这些标志,检查它们,让它们的缺席/不正确导致某种类型的异常,这将终止应用程序。只要签名检查仅在此刻相关,就很容易绕过它,删除该行,一旦触及代码中的更多区域,您的应用程序就会变得更难(或者更不容易......)来破解。同样在我看来,并非所有检查都应该为制裁调用相同的例程,因为这也可以很容易地找到保护机制并终止它。 当然,非法软件的处理可能会有所不同,您可能希望在非法使用时使应用程序崩溃,但您可能希望保持其运行,并且只发送要求用户购买合法副本的消息申请。 如果这只是你不想听到的,那我很抱歉你的时间:)     
Android用户只会接受持续电话之家的痛苦。唯一安全的Android应用是一款始终连接的Android应用。 这在很大程度上是由于谷歌拒绝像Apple一样锁定安装。在IOS你必须越狱手机。在Android上,您可以在库存,工厂安装上加载任何APK。 保留服务器上的部分/大部分/全部内容;大块递送;验证每次通话的许可证/会话。     
抑制这种类型的行为将是非常困难的。在客户端处理的任何东西都可以使用APK反编译和修改,使用Game Guardian等软件进行内存编辑。 我可以看到它是如何部分绕过它的唯一方法是改为制作在线游戏。或者在线处理某些功能。或者,如果可以在Android / iOS上使用像denuvo这样的防篡改加密。     

要回复问题请先登录注册