频道栏目
首页 > 安全 > 网络安全 > 正文

iOS App的加固保护原理

2017-03-25 09:19:00           
收藏   我要投稿

iOS App的加固保护原理。苹果系统的封闭性导致iOS APP安全性比较高,但是实际上iOS应用本身被破解的难度并不高,一旦在越狱设备上,ipa被分析就会变得很容易,本文通过讲解iOS APP的破解分析过程来引出我们要如何的保护我们的应用。经过保护,iOS APP的安全性会获得很大的增强,大大提高了破解者破解的难度。对于iOS开发者来说,有必要了解这些措施,特别是针对一些金融、游戏类APP的开发。

一、iOS的安全问题

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

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

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

下面举几个例子:

山寨APP

\

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

微信多开

\

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

自动抢红包

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

\

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

那么,看起来如此高级的东东又是怎么实现的呢?下面我们做简要的介绍,只有在了解了它们的实现原理后,我们才能更好地保护我们的APP不被分析、破解。

二、iOS分析方法

懂得如何攻击才会懂得如何防御,一切都是为了之后的防御作准备。这里总结一下为hack而做的准备工作。

2.1常用的命令和工具

\

(1)otool可查看可执行程序都链接了哪些库。

\

(2)nm可以显示程序符号表。

nm -g DeviceInfo

\

(3)ldid:iPhoneOS.platform提供的签名工具。

我们自己编译的程序需要签上名才能跑在iPhone/iPad上。

2.2 class-dump-z

它通常是和Clutch一起使用的,因为APP Store上的APP都是加密过的,需要先解密。Clutch解密后,就可以得到APP的源码结构,包括资源文件、二进制文件等,下面以XX新闻APP为例:

\

“class-dump NewsBoard”,就可以得到应用的类信息,包括函数名,下面是该APP的一个登陆页面的头文件:

\

2.3 IDA等静态分析工具

静态分析iOS APP的工具除了IDA,还有一款强大的工具– Hopper Disassembler,在某些方面,它比IDA更强大。

\

上图显示,从IDA工具就可以看到该APP使用的一些类名和方法名,进而就可以分析到方法里面的实现逻辑了。

2.4实例

我们在开发一款SDK的时候,想了解下公司外部竞品SDK的使用情况,到底有多少APP在集成他们的SDK。那么,这到底该怎么做呢?

去竞品那里打听?好像不太现实,唯一的办法就是“自动动手,丰衣足食”。我们从XX助手上获取一定数量的APP,一般是拉取榜单的数据,比较有意义,然后分析拉到的APP里包含了哪些SDK。当然这得基于概率统计学的原理,获取足够多的样本,比如一万、十万都是可以的。那么又如何从XX助手服务器拉取这些数据呢?

大家可能都会想到,那就是分析XX助手的网络协议,然后通过代码模拟网络协议,请求数据,获取APP,再分析APP的符号。分析网络协议,最简单的就是网络抓包,但是估计现在很难再有裸奔的网络包了,XX助手确实也没有明文的网络包,所以只有逆向分析了。值得庆幸的是,它的APP没有做加固、保护,分析起来就简单多了。、

2.4.1界面分析

我们首先从界面分析程序的大体逻辑结构。

来到XX助手的榜单页面,使用cycript打印界面布局:

[[UIAppkeyWindow]recursiveDescription].toString()

找到每一个下载控件,这里随便找一个:

\

通过UITableViewCellContentView这个控件,找它的包含关系。

使用[#0x15baf520nextResponder]往上找,可以得到:TRTableMultipleViewCell。

TRTableMultipleViewCell分为3列,每一列包含一个TRAppListSubCell,而每个TRAppListSubCell对应一个TRAppInfo对象,猜测这个TRAppInfo就是下载后的数据对象,Hook这个类的方法可以看到:

\

TRAppInfo对应一个App的相关信息,包括下载地址,为了得知这些信息是怎么初始化的。在-[TRAppInfosetAdsite:]下断点: b-[TRAppInfosetAdsite:],然后查看调用堆栈:

\

其中的一个类TRApiServices很像是网络请求的接口。Hook该类的调用输出,点击榜单,并有了以下log输出:

\

至此,我们基本确定了我们需要的函数名了。

2.4.2逆向分析

接下来,就是逆向分析getChartsAppListForCountryId和parseGetChartsAppListData这两个函数了。

上一篇:网络信息安全之解码SSL:SSL证书如何防止黑客攻击
下一篇:避开Dyzap恶意软件以确保您的帐户安全
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站