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