中文站

如何进行iOS应用加固?

一、iOS应用的安全问题

世所公认,iOS系统安全性非常高,很少出现漏洞,几乎不会中毒的情况。然而随着各种iOS安全隐患的频频出现,人们逐渐认识到,iOS跟Android一样也面临严重的安全问题。苹果宣称所有的iPhone都很安全,不会被恶意软件攻击,其实这只不过苹果封闭式的系统管理能够及时处理漏洞罢了。

我们已经习惯,每个新的iOS系统出来没多久,就会有大牛找到越狱的方法。比较有名的越狱团队如iH8Sn0w、Geohot、Comex等,以及国内的盘古团队。就像最新iOS 10.1.1版本,刚出来一个星期,安全研究员Luca Todesco就在推特上晒图自曝越狱成功,iH8Sn0w和盘古团队也取得了不错的进展。只要越狱了,iPhone手机就处于完全裸奔状态,很多平时不能做的事情就可以做了,比如破解分析APP、大范围泄露用户隐私数据等。

其中,跟我们iOS开发者息息相关的问题,主要就是被破解、分析。APP被破解分析进而刷单作弊,或者APP被山寨以次充好等。APP一直以来存在的“山寨”现象,引起越来越多开发者的不满,山寨泛滥的后果将是劣币驱逐良币,打击创新者的积极性,造成恶性循环。

下面举几个例子:

1.山寨APP


比如上面的《神庙逃亡》应用,左边是合法的,右边是山寨的,山寨的APP就把图标的背景色以及局部做了一些修改,看起来和正品是如此的相似。

2.微信多开


这类APP在淘宝上都有销售。正常情况,一个手机只能有一个微信账号在线,但是微信分身版让用户可以在同一个手机上同时登录多个微信号,这样可以满足一些用户的不同需求,比如进行公众号营销、用不同的微信号联系不同的人等。同时这些破解后的微信还有一键转发小视频、一键评论、一键点赞等强大的功能。

3.自动抢红包

下面是一款红包神器的运行页面:


打开这款神器后再登录微信,如果微信群里有人发出红包,它就会第一时间帮你抢到红包了,从此“发家致富,迎娶白富美,走上人生巅峰”,哈哈!

4.游戏外挂

游戏外挂是指通过修改游戏数据,为玩家谋取利益的作弊程序或软件。它利用一定技术针对App进行非原设操作,篡改游戏原本正常的设定和规则,大幅增强游戏角色的技能和超越常规的能力,从而达到轻松获取胜利、奖励和快感的好处。它会严重影响游戏平衡性,损害玩家以及产品的利益。

比如常见的一些游戏辅助:游戏蜂窝、触动精灵、触摸精灵等。


iOS同样也存在云真机,跟Android中一样,可以在云端玩游戏。这时使用外挂、辅助就更方便了。


另外就是一些修改器、加速器,这些危害比较大。比如常见的有八门神器、IGG、GameGem、DLGMemor等修改器;烧饼、Speed Intensifier、xx等加速器。


GameGemiOS直接修改游戏中的数据,比如攻击力、血量等。


Speed Intensifier可以直接选择不同的加速倍速,换来全新的游戏体验。

下面是一个游戏中的一个外挂,功能是:全局全屏攻击,并且攻击力超高,相当于秒杀。


外挂效果如下:满屏都是攻击球,轻松13杀。


二、iOS保护方案

既然iOS应用也有那么多的破解、外挂问题,那么我们如何才能更好地保护我们的应用,确保安全呢?

从逆向分析来看,我们可以从以下几个方面来保护我们的APP:

1.字符串混淆:对应用程序中使用到的字符串进行加密,保证源码被逆向后不能看出字符串的直观含义。

2.类名、方法名混淆:对应用程序的方法名和方法体进行混淆,保证源码被逆向后很难明白它的真正功能。

3.程序结构混淆加密:对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低。

4.完整性校验:防止出现盗版的情形。

5.反调试、反注入等一些主动保护策略:这是一些主动保护策略,增大破解者调试、分析APP的门槛。

下面我们来一一解读:

2.1 字符串加密 

字符串会暴露APP的很多关键信息,攻击者可以根据界面显示的字符串,快速找到相关逻辑的处理函数,从而进行分析破解。加密字符串可以增加攻击者阅读代码的难度以及根据字符串静态搜索的难度。如下:

     

     2.2 符号混淆

     符号混淆的中心思想是将类名、方法名、变量名替换为无意义符号,提高应用安全性;防止敏感符号被class-dump工具提取,防止IDA Pro等工具反编译后分析业务代码。

     比如一款混淆后的APP,用IDA等工具打开,如下图所示:


“Labels”栏里,显示的这些符号,不管是类名还是方法名,谁也看不出来到底什么意思,这个函数到底是什么功能,就有点丈二和尚摸不着头脑的感觉,这就大大增加了破解者分析APP的难度。

2.3 代码逻辑混淆

代码逻辑混淆有以下几个方面的含义:

1、对方法体进行混淆,保证源码被逆向后该部分代码有很大的迷惑性,因为有一些垃圾代码存在;

2、对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低,这很容易把破解者带到沟里去; 

3、它拥有和原始的代码一样的功能,这是最最关键的。

混淆前后的对比如下(左边是原始结构,右边是混淆后的结构):



2.4 URL编码加密

对程序中出现的URL进行编码加密,防止URL被静态分析。

2.5 网络传输数据加密

对客户端传输数据提供加密方案,防止通过网络接口的拦截获取数据。

2.6 完整性校验

对App的完整性做校验,防止盗版应用的泛滥。

2.7 主动保护策略

除了上面的一些被动保护方法,我们还可以加入一些主动的防护机制,比如反调试、反注入、反hook、反tweak等。

2.8 防御外挂

通过技术手段,打击外挂,给大家创建一个和谐的游戏环境。

三、结束语

总之,添加以上的一些保护措施后,iOS应用的安全性会获得很大的增强,大大提高了破解者破解的难度。对于iOS开发者来说,有必要了解这些措施,特别是针对一些金融、证券、游戏类APP的开发,保护方面的需求就更加必要。

相关阅读:

iOS游戏的破解及防护

iOS应用加固是否必要?如何进行iOS加固?

如何提升安卓APP安全性?

如何进行SO加固?SO库加密保护有哪些方法?