Notifications
Article
旁门左道-破解Android游戏(一)
Published 6 months ago
63
0
破解Android游戏(一)
旁门左道:指非正统的学术流派或宗教派别。泛指不正当的方法、门径。这个系列会专门研究一些和游戏开发无关却又相关的内容。请大家不要用于不好的事情哟!
碎碎念:
破解,外挂,作弊器等等,一直是游戏公司的梦魇。可是对于这些东西了解的人并不多,所以经常会被要求提供silver bullet来一劳永逸的解决问题。本着授人予鱼不如授人以渔的原则,我都是会给大家将一些原理上的东西,然后告诉他们:很遗憾,破解者都是每天在努力钻研新技术的hacker,没有什么东西可以一直防住他们,除非你们也成为他们的一员。然后对方就会失望的走开,并小声嘀咕着“其实你也不懂吧”之类的话。其实破解与反破解一直是魔高一尺,道高一丈的关系。一方在不断提高破解成本,一方在不断降低这个成本。谁更聪明,谁就能赢。所以,为了让更多人了解破解和反破解的攻防战原理,我试着写一些之前工作中的心得,以食读者。才疏学浅,有疏漏之处欢迎用力打脸。

Android的软肋

说到破解,首当其冲的就是Android。糟糕的安全性让各种外挂,作弊,破解横飞。所以攻防策略也是五花八门。

门户-apk攻防战

从用户角度,安全的起点来自于apk的安全。我们先从apk上做一些手脚。
Java破解。
Java端的破解现在简单的不要不要的,随意找到一个工具都可以直接获取到Java的源码,而Kotlin也只是JVM上的一个语法糖。所以在这一层级,最有效的手段就是混淆。
混淆有很多层级。
入门级混淆就是换换函数名、变量名,从而使代码难以阅读。这当然防不住什么,只要把反编译出来的code做一下refactor(是的,几乎所有IDE都有这个菜单项),做一下批量重命名就搞定了。
高级一些的会有过程混淆。比如把switch case结构换成大量的if else甚至for循环,使用大量的goto maze等。这个层级的混淆会有一些挑战,看这种代码,就如同看“Do Not touch these code”的感觉。虽然难懂,但是只要有耐心,还是能还原逻辑的。尤其是破解者往往不需要理解通篇的含义,只需要攻击重点函数就可以,所以难度还是不够大。
在高级也有语义混淆,但是一来不稳定,二来会有性能的损耗。
也有一些高级的保护措施,会劫持jvm,从而使用自定义的java class。但同样有上述问题。
总之,在java层做保护是非常难的。这是语言特性和runtime机制决定的。同样道理也适用于C#。所以更多人把目光投向了C++,是不是C++会安全呢?
只能说,你想多了。
下次我们来破解C++。

GaoChuan
Unity DRM (Great China) - Programmer
2
Comments