Android游戏不断被黑客入侵[关闭]


143

因此,我们已经经历了好几次了,我们发布了一款游戏(以便宜的价格出售),有人入侵了它并将其放在镜子上。我们为所有应用程序设置了Google快讯,因此我们每天都会被告知谁在进行黑客入侵。到目前为止,我们已经按照Google的建议实施了许可服务,每次使用唯一的设备ID发起许可时,我们都会随机生成盐。首次启动应用程序时,我们运行一次检查服务。然后,我们为密钥和存储的值生成一个512个字符的哈希,然后将其与SharedPreferences中的值进行比较。

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

从这里开始,我不想混淆我们的代码,因为我以前看过它已损坏。我想要更坚实的东西,我也想学习如何正确地做到这一点。我现在对学习的兴趣要比赚钱更感兴趣,因为只有2%的人会寻找被黑客入侵的版本。

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

谢谢


27
如果您没有说自己对学习比对赚钱更感兴趣,那么我的回答就是“不值得头疼”。因为您对头痛本身很感兴趣,所以我说继续(但是我没有答案,只会像其他所有人一样关注这个问题)。
Thiago Arrais

4
如果同一个游戏不断遭到黑客入侵,您是否确定自己没有麻烦的工作人员?并不是最好的考虑,但是它可能发生
Phil Lello

3
尽管代码超过2万行,但我自己管理整个过程。
2011年

3
@BajaBob,那么你就是the

Answers:


117

我的想法不是黑客证明,但可能会消除对游戏进行黑客攻击的兴趣。

免费增值模式

1)免费获得前5-10个级别,这样人们无需付费即可学习游戏并获得一些乐趣。更少的人希望入侵第一关,并且免费增值模式将使游戏进一步传播。

共享软件/集群级别包

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

隐形作弊者保护

3)您也可以只数出您在游戏中放置的“小警告标志”。不要在一开始就检查“验证”,也不要在游戏逻辑本身中建立这些标志。不要破坏游戏玩法,因为那样没人会去寻找它。然后,当用户到达关卡怪兽的尽头时,检查是否有任何已记录的警告标志。这些内容不会出现在游戏中,因此具有被黑版的不知情的用户可能玩了几个小时/天,突然意识到他/她无法完成游戏或前进到下一个级别,因为游戏存在“错误”。用户不知道的是,此错误仅发生在被黑的客户端上。

结论

比饼干更聪明。让他们以为工作已经完成了。进行复制保护,并知道更高级的破解程序将可以删除它。但是他们可能不想玩50个关卡来检查破解是否也一直有效。

一旦他们意识到了这个问题,他们可能也会开始解决它。但是,如果您将游戏分成多个等级包,则仍然可以在每次下载包之间进行验证。因此,一旦您收到被入侵的客户端哈希数据,就可以执行一次感知并使游戏在客户端崩溃。糟糕,游戏崩溃了。不要告诉它,因为它被黑了。可能会发生程序错误。:-)

同样,它不是黑客证明。但这可能会使他们烦恼到足以继续进行下一场比赛。最后,您还可以发布游戏的常规更新,并且只有最新版本才能“发布记录”等,因此活动用户将必须进行更新以保持循环。


5
哇,好主意。非常感谢所有这些,甚至从未考虑过制作关卡并将其发布到服务器并针对它们进行验证。Versoning ...好主意。保持每个人的更新,使其不合理地破解。多谢,这会让我忙一阵子!
BajaBob 2011年

12
叹气,太糟糕了,您不能+2回答:)一个评论:您怎么能证明问题出在盗版游戏上?如果该游戏在盗版副本上出现错误/怪异,则人们可能会认为这是错误,并且在论坛上是该游戏的败类。我不认为这在Android上不是一个大问题,因为没有那么多拥有大量受众的论坛,但是我想知道是否有一个免责声明,即“盗版可能无法正常工作”是否有意义。
EboMike 2011年

3
我记得1978年的TRS80上的游戏,如果删除了版权保护,它会随机起作用。只有1次有效性检查,将其删除意味着您可以自由复制游戏,但是在合法的副本上不会发生奇怪的游戏错误,只有在被黑的副本上才会发生。没有人认为这是开发人员的错...我们知道发生了什么。
Fixee 2011年

1
@EboMike我认为复制保护理念的主要内容是“尽可能正常地行动”,甚至不给破解者提供一个有关未来可能出现的有害保护方案的线索。这只会使他们更加好奇地寻求保护。就是图个好玩儿。记住,他们中的许多人不是为了钱而这样做,只是因为他们可以炫耀。所以不要诱惑他们。随便吧。:o)比他们聪明。
BerggreenDK

2
@Fixee和其他人最近的蝙蝠侠Arkham Asylum游戏与此类似:在盗版游戏中,关键的动作会失败,并使您在游戏初期就陷入困境。然后,当有人在论坛上抱怨“错误”时,开发人员可能会假笑说“这不是游戏中的错误,而是道德规范中的错误”。
Nzall 2013年

20

我一段时间以来一直在进行一些apk反编译和黑客攻击(不是warez,而是主要针对google应用和android框架的mod和hacks,始终遵循xda-developers政策)。

一旦您学会了阅读smali,它几乎就像阅读原始的Java代码一样(但具有更多的LOC)。因此,可以找到并删除或替换您添加的用于检查密钥的任何代码。您甚至不需要每次都重新编译以消除一个以上的代码(某些搜索确实可以发现相似的代码段是奇迹),即使需要编译/重新编译周期来查找它们,也仅需一两分钟的时间反编译:一切由apktool自动化,甚至由apkmanager自动化。

话虽如此,我对您的建议是实施某种在线评分表或类似的评分表,当用户在线查看评分表时,您可以检查所实现的哈希码并将其与关联的gmail帐户进行比较。这样,您可以向Google报告该黑客行为,并向warez用户发送令人讨厌的消息,以解释为什么这是非法的。

当然,可以采用新的技巧来消除得分表,但这会降低对warez的兴趣。

祝好运。


更新资料

研究来回答这个问题后:把代码注入APK(实际上是关于亚马逊的DRM机制),我可以告诉亚马逊是如何保护应用程序一点点:包括方法检查安装的有效性无处不在(你可以看到一个例子在我对这个问题的回答中他们如何做到的)。这将使黑客入侵应用程序的任何尝试都不会非常困难,但会非常乏味。我认为这是一个优势:黑客不想花太多时间去做很多重复的任务:这不是挑战,它很无聊。我在这种方法中看到的主要缺陷是,可能会入侵Amazon应用程序本身,从而始终返回有效答案。但是,如果您将当前的哈希检查与散布在您的方法中的某种在线检查混合使用,我相信可能会大大降低其被黑客入侵的可能性。


3
我应该提到,很多人对应用程序“打电话回家”有疑问。就个人而言,这太愚蠢了-一部Android手机经常以多种方式“打电话回家”,这并不重要,匿名许可验证检查有什么问题?仍然想将其排除在外-有些人对“打电话给家里”大加恶臭,尤其是在未公开的情况下。
EboMike 2011年

3
好吧,可以理解的是,如果该应用程序“打电话回家”并且不通知用户,人们可能会遇到问题。但是基于Web的得分表解决了该问题,因为用户愿意连接
Aleadam

是的,但是一旦您使用了应该“匿名”上传分数并发送gmail帐户哈希的连接,那就是另一个问题了。再说一次:不对我。我认为这是完全合理的,我个人很想在自己的应用程序中实施此方案。抱怨的人将是少数(无论如何,很可能会购买该应用程序)。
EboMike 2011年

为什么要反编译框架,而不下载源代码?
Phil Lello

1
@Phil您无法访问touchwiz的源代码或感知固件,因此,如果您想修改特定的手机,有时最简单的方法是将其反编译并更改smalis。
Aleadam 2011年

20

取自本帖的解决方案避免apk破解

实施自己的许可库

我还请您从Google I / O 2011 YouTube录音中查看以下内容:

逃避海盗和制止吸血鬼

编辑:

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

一些基本要点


上面的链接似乎并不总是指向链接的页面...它似乎有时只能工作,并且在某些程度上取决于操作系统和浏览器。因此,请注意#%3ar.page.15URL 的结尾。如果您没有自动重定向到该页面,请确保查看链接以查看应该在哪里/什么页面。
TryTryAgain 2012年

1
真好!我看到他们也相信Freemium并在游戏中隐藏某些“错误”(仅使用许可技术)。我想要一个跨平台的解决方案,而不是仅Android的许可证服务器。但也很有趣。
BerggreenDK 2013年

顺便说一句 它很有趣,这个答案有15个竖起大拇指,我的答案已经超过90个,还没有考虑正确的答案:-)
BerggreenDK 2014年

8

我知道您不是很迷惑,但是我真的需要对此做出反应:

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

根据我的经验,ProGuard非常可靠,尽管我使用了一些高级功能,例如AIDL和一些调用Java方法的本机代码。。 ProGuard非常可靠,并且可以优化您的应用程序。

自定义安全性/加密技巧是很好的,但是如果不加混淆,就我的愚见而言,这就像在水中扔石头。

我已经在生产中使用ProGuard了许多个月,而且它运行得很好。

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


任何可以读取的内容都可以反编译,这仅取决于CPU的功能和存根。混淆仍然允许代码运行,因此在反编译/反混淆代码时,破解者仍然可以将运行版本与原始版本进行比较。它可能会延迟解密器或停止经验不足的解密器,但它并非完全没有故障。
BerggreenDK 2015年

4

机会比您(适用于所有程序员)更多的才华程序员是100%。如果是这样,您将无法修复黑客。但是您可以花很多时间和精力使其破产。

如果您想赚大钱,则需要对目标用户群和行为科学进行一些研究。您需要让用户在玩中带来新的收益,仅此而已。

此外,您全都错了。黑客是用户群中最活跃的成员,您的举止以您不希望他们这样做的方式进行。

以Facebook上的Zynga游戏为例,您认为您被黑客入侵了吗?-当然,只有+100000个玩家在玩,因为您可以使用自动执行一切的机器人。

拥有大量实际用户的活跃用户基础僵尸网络,使存档类型的游戏玩家想玩该游戏-如果您的玩法看起来很酷,那么Avarage Joe也将想玩。如果阿瓦拉格·乔(Avarage Joe)玩,那么他的朋友可能会想玩,而您可能会不在乎其他任何东西,那么会比他/她的朋友更好,打发时间或闲聊。平均而言,乔的朋友很可能愿意为比乔做的更好而付出,但是您更愿意投资使自己变得更好的东西。

此外,如果真正的价值是免费玩游戏,那么使用免费黑版的用户很可能永远不会为此付费。但是您可能是Avarage Joes和他们的朋友。因此,这就像您可以拥有的最便宜的广告。如果您想通过庞大的用户群赚钱,则只需在关卡和图形上进行少量更改即可制作新版本的游戏。



2

多么有趣和令人不安的问题。:-)作为练习,您可以尝试通过Amazon发布应用程序;他们有自己的DRM机制;我想知道它是否比ProGuard更好。


1
到目前为止,Lucky Patcher应用程序还破解了Amazon DRM!除了ProGuard,另一个解决方案可能是DexGuard。但是DexGuard的价格为几百欧元,但是人们甚至不能保证它可以保护您的代码不被盗用……
ChuongPham 2012年

2

我认为关键要素之一是扩展代码,以免将代码全部放在一个地方。如果您具有一个名为LicenseChecker.checkLicense()的函数,该函数可检索许可证并进行检查,则可以确保立即将其禁用。

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

现在,我应该预先说这会给您自己造成头痛-显然,凌乱,令人讨厌的代码更难调试且容易导致错误。最坏的情况是,您在合法购买的应用程序中会产生误报。

而且,当然,所有内容都可以进行反向工程-破解者找到禁用应用程序的位置后,它们便会回溯正在读取的值。然后,他们可以追溯到存储的位置,然后追溯到.....,或者,更简单的是,他们可以禁用最终检查(这就是为什么我建议3个不同的位置,所有这些都延迟触发)。安全仅与最薄弱的环节一样好。

您将无法停止盗版。最好的选择是延迟传播盗版副本,直到对应用程序的最初炒作平静下来。


1

首先,我认为自己在SW安全领域的任何职业,但是:

我认为重要的是让应用程序在某些部分上依赖签名检查。不要让它立即生效,而要让它设置一些标志或更改某些值。稍后,使用这些标志,检查它们,让它们的不存在/不正确导致某种异常,该异常可能会终止应用程序。只要当前仅进行签名检查,就很容易绕过它,删除行,一旦它接触到代码中的更多区域,您的应用程序将变得更难(或更不容易...)被黑客入侵。同样,正如我所看到的,并不是所有的检查都应该调用相同的例程进行制裁,因为这也将使查找保护机制并终止它变得容易。

当然,对非法软件的制裁可能会有所不同,您可能希望在非法使用该应用程序时使其崩溃,但您也可能希望使其保持运行状态,并且仅发送要求用户购买合法副本的消息的应用程序。

如果这只是您不想听到的,那么对于您的时间很抱歉:)


7
当您检测到应用程序被盗版时,使应用程序崩溃可能会适得其反,除非您非常明确地指出这就是崩溃的原因。我记得曾经读过一些游戏开发商,如果他们的反盗版检查失败,他们会在一段随机的时间后使游戏崩溃。当然,很多人都在盗版,但是他们没有意识到崩溃是因为他们运行的是盗版版本。这给开发人员带来了很多负面新闻,并可能损害了他们的销售。
米奇·林格伦

3
@Mitch-我同意。我将其作为一种可能性,但是“最佳”技术策略可能并不是最佳的“业务”策略。
MByD 2011年

0

Android用户将不得不接受不断使用电话回家的痛苦。唯一安全的Android应用是始终连接的Android应用。

这在很大程度上是由于Google像Apple一样拒绝锁定安装。在IOS上,您必须越狱电话。在Android上,您可以将任何APK加载到库存中,并进行出厂安装。

将部分/大部分/全部内容保存在服务器上;分批交付;在每次通话中验证许可证/会话。


澄清:虽然您可以同时使用任一平台,但实际上只有一小部分IOS用户会担心放弃安装。同样,在世界许多地方,很难或不可能为Android应用程序付费,从而加剧了盗版行为。
yetimoner

这实际上是我从2011年的回答中得出的想法之一...为什么要再次发布?
BerggreenDK 2013年

0

抑制这种ov行为将非常困难。客户端处理的任何内容都可以通过APK反编译和修改,使用Game Guardian等软件进行内存编辑来破解。

我能看到的绕过它的唯一方法就是制作一个在线游戏。或者让某些功能在线处理。或者,如果曾经针对Android / iOS使用过像denuvo这样的防篡改加密。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.