2021-06-22

安卓软件加固防护指南第二期:应用保护你所必须知道的

作者:好中文的样子 所属分类 - 安全 - 干货 - 广告

安卓平台由于支持个人用户免企业签名随便安装各种应用,所以不少企业开发的应用都有被第三方修改并且重打包发布的风险。安卓平台的特性决定了安卓平台必须花费不少精力在安全防护上。与iOS平台不同,iOS平台可以举报侵权应用,从而吊销其开发者证书,使得其签名的应用无法安装在未越狱的机型上,大大增加了侵权成本。安卓系统只需要允许未知来源应用,即可随意安装你喜欢的应用软件,大大降低了侵权成本,并且安卓平台除了少数定制产品,别的主流品牌、主流智能手机/平板电脑产品都是允许用户随意安装第三方软件的。

应用保护,你所必须知道的

原包检验不一定有效

安卓平台软件的自我防护,大多数人都想起来签名检验。签名检验不必多介绍,上一期我们的文章已经介绍过这一点。对于软件的自检验,例如签名检验和原包检验,破解者可以通过几个通用的方法轻易破解掉,并且这个方法对于破解者在uid 0的层面是无效的,为了破解企业的软件,很多破解者会编写Xposed插件或者Magisk插件。对于Magisk,检测方法众多,但是反检测方法也众多,如果企业的检测方法失效,可以联系QQ3068083845寻找帮助。

绝地求生挂,大家或多或少都有了解吧

游戏产品当中,比较知名的有绝地求生系列了,这个系列产品由于性能与用户体验的关系,没法做到全服务器检验,那我们需要怎么办呢?

数据、逻辑用户间互检验十分有效

假设我们有一个游戏产品,玩家做了一个穿墙、秒杀、飞天、遁地、锁血的挂,那我们应该怎么检测呢?

是的,我们可以保存此前玩家状态的CRC32或者CRC16数值,并且这一数值不是保存在开挂玩家的设备身上,而是跟此玩家对立的另一玩家设备上。如果这一数据异常,则应该由另一玩家以及其它多个玩家上报服务器,例如玩家被秒杀,如果计算伤害以后发现有问题,则应该立马上报服务器,进行逻辑重判定。穿墙,遁地也应如此,只是目前大多数游戏没有做好这一点,做好这一点不仅降低了服务器检测的负荷,同时也让多人游戏外挂判定更准确。

破解版游戏猖獗

那么对于单机游戏,应该怎么做呢?米哈游的很多单机游戏(崩坏3、原神)虽然安全防护做的很差,但是也有一些值得我们借鉴,例如游戏道具云端保存、游戏伤害云端计算验证、游戏角色位置不定时上传云端保存等等。。。

不能告诉用户,你做了软件不想让你做的事

这句话看来很奇怪,又很有趣,什么是告诉用户“你做了我们不想让你做的事”呢?

简单来说,假如破解者修改了软件、用户安装了第三方软件,很多软件发现后的第一逻辑就是闪退、不让打开。典型的有各种加固后的软件、各种中小开发者制作的软件等等。

除此以外,有的游戏,检测到用户环境异常,会立即让用户下线,并告诉用户“你的设备装了外挂”。

假如我们检测到用户环境异常,不能第一时间告知用户或者采取操作,这样会使得破解者能在你提示的时候断下线程,并且找到提示的来源,直接找到你的软件检验逻辑并修改,让你软件的检验逻辑失效。

我们必须将检验逻辑放在某些重要的触发器入口,例如用户登录、用户查询资料等等的入口,并且检测环境异常以后只上报,不采取立即停止运行的措施,不仅降低了误判几率,提高了用户体验,还使得破解者难以直接发现我们的检测逻辑。

就不告诉你,这个是什么意思

典型的有崴信、扣扣、手淘等等软件,都做了一定的安全防护,其中微信的安全防护虽然不是特别强,但是里面上报环境逻辑值得学习。

检验逻辑不能集中,必须零散

很多软件的自检测逻辑大多集中在入口,这种是不可取的。检验逻辑应该零散分布在各业务逻辑内,而不应该集中在一个地方。集中在一个地方,容易让破解者找到一个检验逻辑,顺带把别的检验逻辑都干掉了。

例如我们软件有启动、登录、查询游戏房间、进入游戏、游戏中某些操作等等的业务逻辑,我们可以用分布式的方法把各检验逻辑均匀分散到这些业务内容当中,使得破解者难以一次性干掉所有检验逻辑。

Simple & Easy

软件安全防护,重要的还是云端

本地安全防护再厉害,也没有将用户大多数据保存到云端实在。

云端保存用户数据是最好的办法,功能都在云端实现,本地只能看见界面,做好数据检验隔离,才是防止业务产品被修改、破解的根本方法。

麦科技原创,转载请说明出处。