Android 游戏不断遭到黑客攻击

所以我们已经经历过好几次了,我们发布了一个游戏(很便宜) ,有人破解了它,把它放在一面镜子上。我们为我们所有的应用程序设置谷歌警报,所以我们每天都被告知是谁在进行黑客攻击。到目前为止,我们已经按照 Google 的建议实现了许可证服务,每次使用唯一的设备 ID 启动许可证时,我们都随机制作了许可证。当应用程序第一次启动时,我们运行检查服务一次。然后,我们为键和存储值生成一个512个字符的散列,从那时开始在 SharedPreferences 中进行比较。

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

从现在开始,我不想再像以前那样让我们的代码变得模糊不清了。我想要一些更实在的东西,我也想学习如何正确地做这件事。在这一点上,我对学习比赚钱更感兴趣,因为只有2% 的人会寻找被黑的版本。

到目前为止,我自己已经想出了一个随机数生成器,放置在游戏的几个启动区域。当启动时(例如,50次中的1次) ,许可证被检查。我知道这会让黑客更难入侵,因为黑客必须消除每个案例,编译,消除,编译。然而,这种方法,仍然是可破解的... 那么你们有什么建议?同样,我真的对这个安全过程很感兴趣,所以请进行教育,不要把它变成一个关于基于时间戳的混淆或定期检查的讨论。

谢谢

12012 次浏览

盗版永远是个问题。通过大饼干比开发者更擅长玩这个 安全性尽管模糊游戏。

我已经做了一段时间的 apk 反编译和黑客攻击(不是 warez,而是 mods 和黑客攻击主要针对谷歌应用程序和 android 框架,总是遵守 xda 开发者政策)。

一旦你学会了如何阅读 smali,它几乎就像是在阅读原始的 Java 代码一样(只不过更多的 LOC)。因此,您添加到检查键的任何代码都可以被找到、删除或替换。你甚至不需要每次重新编译就可以删除不止一段代码(有些搜索可以奇迹般地找到相似的代码片段) ,而且,即使需要编译/重新编译周期才能找到它们,反编译也只需要一两分钟: 所有的代码都由 apktool 自动化,甚至更多的代码由 apkmanager 自动化。

话虽如此,我给你的建议是实现某种在线评分表或类似的东西,当用户在线查看评分表时,你可以检查你实现的哈希代码,并与相关的 gmail 帐户进行比较。这样你就可以向谷歌报告这次黑客攻击,并向 warez 的用户发送一条讨厌的信息,解释为什么这是非法的。

当然,可以实现一种新的黑客技术来消除评分表,但这会降低对 warez 的兴趣。

祝你好运。


更新

通过研究来回答这个问题: 向 APK 注入代码(实际上是关于亚马逊的 DRM 机制) ,我可以告诉一点亚马逊是如何保护应用程序的: 它包括检查安装有效性 无处不在的方法(你可以在我对这个问题的回答中看到他们是如何做到这一点的一个例子)。这使得任何破解应用程序的尝试都不是非常困难,而是非常乏味。我相信这是一个强项: 黑客不会想花这么多时间做这么多重复的任务: 它是 没有挑战性和它的 无聊。当然,我认为这种方法的主要缺陷是有可能破解亚马逊应用程序本身,从而总是返回一个有效的答案。但是,如果你将当前的散列检查和分散在各种方法中的某种在线检查混合在一起,我相信它被黑客攻击的机会可能会大大降低。

首先,我认为自己是西南安全领域的专家,但是:

我认为一件重要的事情是让应用程序在某些方面依赖于签名检查。不要让它立即影响,而是让它设置一些标志或更改一些值。稍后,使用这些标志,检查它们,让它们的缺失/错误导致某种可能终止应用程序的异常。只要签名检查目前只是相关的,就很容易绕过它,删除该行,一旦它触及代码中的更多区域,您的应用程序就变得更难(或更不容易...)被黑客攻击。在我看来,并不是所有的检查都应该调用相同的例行程序进行制裁,因为这样也可以很容易地找到保护机制并终止它。

当然,对于非法 SW 的处罚可能会有所不同,当非法使用时,您可能希望使应用程序崩溃,但您也可能希望保持应用程序运行,并且只发送要求用户购买应用程序合法副本的消息。

如果这只是你不想听到的,那么我为你的时间感到抱歉:)

真是个有趣又烦人的问题。作为练习,你可以尝试通过亚马逊发布一个应用程序; 他们有自己的 DRM 机制; 我想知道它是否比 ProGuard 更好用..。

有机会,有更多的有才华的程序员然后你(申请所有程序员) ,是100% 。如果这是真的,你就无法修复黑客行为。但是你可以花同样多的时间和精力去破产。

如果你想赚大钱,你需要对你的目标用户群和行为科学做一些研究。你需要让玩游戏的用户带来新的收入,就是这样。

而且,你完全搞错了。黑客是你的用户群中最活跃的成员,你只是以一种你并不想让他们这样做的方式行事。

以 Facebook 上的 Zynga 游戏为例,你认为你的游戏会被黑客攻击吗?- 当然,大约 + 100000玩家只玩,因为你可以使用机器人,这一切自动化。

拥有庞大的活跃用户基础僵尸网络的实际人,使存档类型的玩家想要玩游戏-如果你的发挥,它看起来很酷,那么阿瓦拉奇乔也会想要发挥。如果阿瓦拉吉乔玩,那么他的朋友可能想玩,你可能不会在乎其他任何东西,然后比他/她的朋友更好,消磨时间或有东西聊天。普通乔的朋友很可能愿意花钱让自己变得比乔更好,但是你更愿意投资一些能让他们变得更好的东西。

此外,如果真正的价值是免费玩游戏,那么使用免费黑客版本的用户,很可能永远不会为此付费。但你们是特种部队和他们的朋友。所以这是最便宜的广告了。如果你想从你庞大的用户群中赚钱,那么只需要在级别和图形上做一些小小的改变就可以制作出新的游戏版本。

在我看来,关键因素之一是将代码分散开来,这样它就不会全部放在一个地方。如果您有一个名为 LicseChecker.checkLicense ()的函数,它检索许可证并对其进行检查,那么您可以确保它将被及时禁用。

你的一个优势是破解者不能看到你代码的注释(如果你混淆了,还有方法/变量名) ,所以想出一些奇怪的东西。在一个活动的 onCreate ()中,您将获得许可证 ID。在 onResume ()中,您将获得另一个值来对其进行检查。也许创建一个线程,在那里做一些检查。然后,其他一些不相关的代码片段(也许是播放器控件)可能会获取值并进行比较,然后将结果存储在某个地方。然后,其他三段不相关的代码都将独立检查该值,如果不匹配,则禁用您的应用程序。

现在我应该提前说明,这可能会给你自己带来麻烦——显然,混乱、讨厌的代码更难调试,而且容易导致错误。最坏的情况是,你在合法购买的应用程序中造成假阳性。

当然,所有的东西都可以被逆向工程——一旦黑客找到应用程序被禁用的地方,他们就会追踪到从中读取的值。然后他们可以追踪到它被存放的地方,并追踪到... ..。或者,更简单,他们可以只禁用最后检查(这就是为什么我推荐3个不同的地方,所有触发延迟)。安全性取决于最薄弱的环节。

你将无法阻止盗版。你最好的办法就是推迟盗版的传播,直到最初关于你的应用程序的炒作平息下来。

我的想法不是黑客证明,但可能会消除一些兴趣黑客的游戏。

免费增值模式

1)让前5-10关免费,这样人们就可以学习游戏并且不用付费就能玩得开心。更少的人会想要破解第一关,游戏将通过免费增值模式进一步传播。

共享软件/集群级别包

2)让部分游戏关卡或逻辑保持在线状态。例如,当达到5级或10级或15级时,然后下载游戏的小部分,每次提交游戏的进度日志,并根据可能的值 + 散列码验证这一点。这可能使得自动关闭被黑客攻击的账户成为可能。

秘密作弊者保护计划

3)你也可以数一数你在游戏中放置的“小警告旗”。不要一开始就检查“验证”,不要在游戏逻辑本身中构建这些标志。不要让它破坏游戏规则,因为那样就没有人会去找它了。 然后,当用户达到级别怪物的结束,检查是否有任何记录的警告标志。这些不会在游戏中显示出来,所以不知情的用户可能会在游戏中玩上几个小时/几天,然后突然意识到他/她无法完成游戏或进入下一关,因为游戏有一个“ bug”。用户不知道的是,这个 bug 只发生在被黑客攻击的客户机上。

结论

要比饼干聪明。骗他们以为任务完成了。做一个版权保护,并知道更先进的破解将能够删除它。但他们可能不想玩50关,以检查是否裂纹也工作的所有方式。

一旦他们意识到这个问题,他们可能也会开始解决它。但是如果你把游戏分成等级包,你仍然可以验证每个包之间的下载。所以一旦你接收到被黑客攻击的客户端散列数据,就执行一个执行并在客户端上使游戏崩溃。游戏崩溃了。不要告诉它,因为它被黑了。可能会发生程序错误。:-)

再说一次,这不是黑客的证据。但这可能会让他们恼火到转向下一场比赛。最后,你也可以定期更新游戏,只有最新的版本应该能够“张贴记录”等,这样活跃的用户将不得不更新,以保持循环。

我知道你不太喜欢迷惑,但我真的需要做出反应:

从现在开始,我不想混淆视听 我们的准则被破坏了 我想要一些更实在的东西,我也想学习如何正确地做这件事。

根据我的经验,ProGuard 是非常可靠的,尽管我使用了一些高级特性,比如 AIDL 和一些调用 Java 方法的本机代码。.阅读文档和正确地做事情需要一点工作,但是一旦你在那里 ProGuard 是非常可靠的,也优化你的应用程序。

自定义安全/加密技巧是不错的,但是如果不加以混淆,在我看来就像是在水中扔石头。

我已经在生产中使用 ProGuard 好几个月了,它的工作完美无缺。

如果你喜欢学习,那么仔细阅读 ProGuard 手册,对它进行实验,并检查它的输出日志。

摘自我的解决方案从这个后 避免 APK 破裂

实现您自己的许可证库

我还建议你看看 Google I/O 2011 YouTube 上的视频:

躲避海盗,阻止吸血鬼

编辑:

《躲避海盗及阻止吸血鬼》简报

一些基本要点

Android 用户只能接受持续不断的电话之家带来的痛苦。唯一安全的 Android 应用程序是一个始终连接的 Android 应用程序。

这在很大程度上是由于谷歌拒绝像苹果那样锁定安装。在 IOS 上,你必须越狱手机。在 Android 上,你可以在股票、工厂安装上加载任何 APK。

将部分/大部分/所有内容保存在服务器上; 分块交付; 验证每次调用的许可/会话。

很难抑制这种行为。任何在客户端处理的东西都可以通过 APK 反编译和修改、使用诸如 游戏守护者等软件进行内存编辑来进行黑客攻击。

我能想到的唯一解决办法,就是制作一个在线游戏。或者在线处理某些功能。或者像 Denuvo 这样的反篡改加密是否可用于 Android/iOS。