app加固
FB招聘站
分类阅读
专栏
公开课
FIT 2019
企业服务
用户服务
搜索
投稿
登录
注册
iOS App的加固保护原理 网易易盾加固2017-03-23共457185人围观 ,发现 20 个不明物体 终端安全
苹果系统的封闭性导致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
1l.jpg
比如上面的《神庙逃亡》应用,左边是合法的,右边是山寨的,山寨的APP就把图标的背景色以及局部做了一些修改,看起来和正品是如此的相似。
微信多开
微信破解.png
这类APP在淘宝上都有销售。正常情况,一个手机只能有一个微信账号在线,但是微信分身版让用户可以在同一个手机上同时登录多个微信号,这样可以满足一些用户的不同需求,比如进行公众号营销、用不同的微信号联系不同的人等。同时这些破解后的微信还有一键转发小视频、一键评论、一键点赞等强大的功能。
自动抢红包
下面是一款红包神器的运行页面:
自动抢红包.png
打开这款神器后再登录微信,如果微信群里有人发出红包,它就会第一时间帮你抢到红包了,从此“发家致富,迎娶白富美,走上人生巅峰”,哈哈!
那么,看起来如此高级的东东又是怎么实现的呢?下面我们做简要的介绍,只有在了解了它们的实现原理后,我们才能更好地保护我们的APP不被分析、破解。
二、iOS分析方法
懂得如何攻击才会懂得如何防御,一切都是为了之后的防御作准备。这里总结一下为hack而做的准备工作。
2.1常用的命令和工具
表格.png
(1)otool可查看可执行程序都链接了哪些库。
代码1-2.png
(2)nm可以显示程序符号表。
nm -g DeviceInfo
代码2-1.png
(3)ldid:iPhoneOS.platform提供的签名工具。
我们自己编译的程序需要签上名才能跑在iPhone/iPad上。
2.2 class-dump-z
它通常是和Clutch一起使用的,因为APP Store上的APP都是加密过的,需要先解密。Clutch解密后,就可以得到APP的源码结构,包括资源文件、二进制文件等,下面以XX新闻APP为例:
3-2.png
“class-dump NewsBoard”,就可以得到应用的类信息,包括函数名,下面是该APP的一个登陆页面的头文件:
4-2.png
2.3 IDA等静态分析工具
静态分析iOS APP的工具除了IDA,还有一款强大的工具– Hopper Disassembler,在某些方面,它比IDA更强大。
5-1.png
上图显示,从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()
找到每一个下载控件,这里随便找一个:
6-1.png
通过UITableViewCellContentView这个控件,找它的包含关系。
使用[#0x15baf520nextResponder]往上找,可以得到:TRTableMultipleViewCell。
TRTableMultipleViewCell分为3列,每一列包含一个TRAppListSubCell,而每个TRAppListSubCell对应一个TRAppInfo对象,猜测这个TRAppInfo就是下载后的数据对象,Hook这个类的方法可以看到:
7.png
TRAppInfo对应一个App的相关信息,包括下载地址,为了得知这些信息是怎么初始化的。在-[TRAppInfosetAdsite:]下断点: b-[TRAppInfosetAdsite:],然后查看调用堆栈:
8.png
其中的一个类TRApiServices很像是网络请求的接口。Hook该类的调用输出,点击榜单,并有了以下log输出:
9.png
至此,我们基本确定了我们需要的函数名了。
2.4.2逆向分析
接下来,就是逆向分析getChartsAppListForCountryId和parseGetChartsAppListData这两个函数了。
使用IDA工具打开XX助手APP,定位到getChartsAppListForCountryId这个函数:
10.png
再进一步去分析”writeBodyHeader”方法以及”getBody”等方法,就可以知道网络请求的发送格式了;要想知道网络数据返回的格式,还得去分析” parseGetChartsAppListData:error”这个方法,一切准备妥当后,就可以下载了。
三、iOS加固保护原理
从上面的分析来看,我们可以从以下几个方面来保护我们的APP:
1.字符串混淆
对应用程序中使用到的字符串进行加密,保证源码被逆向后不能看出字符串的直观含义。
2.类名、方法名混淆
对应用程序的方法名和方法体进行混淆,保证源码被逆向后很难明白它的真正功能。
3.程序结构混淆加密
对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低。
4.反调试、反注入等一些主动保护策略
这是一些主动保护策略,增大破解者调试、分析APP的门槛。
3.1字符串加密
字符串会暴露APP的很多关键信息,攻击者可以根据界面显示的字符串,快速找到相关逻辑的处理函数,从而进行分析破解。加密字符串可以增加攻击者阅读代码的难度以及根据字符串静态搜索的难度。
比如一个APP中有如下的一些字符串定义在代码文件中:
12.png
经过加密后,代码文件变成如下的形式:
13.png
里面已经没有明文的字符串了,全是用byte的形式保存的,打包生成APP后,他们也就无法直观的看出实际内容了,这对破解者会造成巨大的难度:
15.png
3.2符号混淆
符号混淆的中心思想是将类名、方法名、变量名替换为无意义符号,提高应用安全性;防止敏感符号被class-dump工具提取,防止IDA Pro等工具反编译后分析业务代码。
比如一款混淆后的APP,用IDA等工具打开,如下图所示:
18.png
“Labels”栏里,显示的这些符号,不管是类名还是方法名,谁也看不出来到底什么意思,这个函数到底是什么功能,就有点丈二和尚摸不着头脑的感觉,这就大大增加了破解者分析APP的难度。
3.3代码逻辑混淆
代码逻辑混淆有以下几个方面的含义:
对方法体进行混淆,保证源码被逆向后该部分的代码有很大的迷惑性,因为有一些垃圾代码的存在;
对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低,这很容易把破解者带到沟里去;
它拥有和原始的代码一样的功能,这是最最关键的。
混淆前后的对比如下(左边是原始结构,右边是混淆后的结构):
16.jpg
下面以iOS APP中的main函数为例:
17.jpg
它就只有一行有效代码,包含两个关键函数,已经算最简单的函数体了,混淆前的汇编代码如下:
18.png
这里主要包含两个API的符号: NSStringFromClass、UIApplicationMain。其余就是一些消息发送以及内存管理的相关符号,但如果进行一定的代码逻辑混淆后,这个结构就会变得大不一样了。
20-1.png
19.png
NSStringFromClass、UIApplicationMain这两个函数,逻辑结构已经变得非常复杂了,如果一个函数中,包含更多的代码的话,那这个结构将更加复杂,对破解者来说将是一个很耗时间、精力的过程,一般早早就会放弃分析了。
3.4URL编码加密
对程序中出现的URL进行编码加密,防止URL被静态分析。
3.5网络传输数据加密
对客户端传输数据提供加密方案,防止通过网络接口的拦截获取数据。
3.6主动保护策略
除了上面的一些被动保护方法,我们还可以加入一些主动的防护机制,比如反调试等。
iOS平台下的Anti-Debug方法一般有以下一些:
检查进程的状态是否为 P_TRACED。
调用ptrace请求来检查进程是否被调试。由于可能被攻击者绕过该方法的调用,在应用的多处增加ptrace函数会提高应用的安全性。
通过sysctl查看信息进程里的标记,判断自己是否正在被调试。sysctl是用以查询内核状态的接口,并允许具备相应权限的进程设置内核状态。
iOS下的这些方法,相对于Linux下的方法要少很多,例如fork一个子进程,ptrace父进程进行检测方式不再奏效。而且,要完全防止程序被调试或者被逆向,理论上是不可能的,但可以增加破解者调试的难度。
总之,添加以上的一些保护措施后,iOS APP的安全性会获得很大的增强,大大提高了破解者破解的难度。对于iOS开发者来说,有必要了解这些措施,特别是针对一些金融、证券类APP的开发,保护方面的需求比较大,比如国内某知名移动支付工具就添加了一些调试检测以及反调试的功能。
*本文作者:网易易盾加固,转载请注明来自Freebuf.com
网易易盾加固
网易易盾加固
3 篇文章
等级: 2级
||
上一篇:2015与2016年度物联网威胁比较研究:全球受攻击的IoT设备呈指数级增长下一篇:采用端点检测和响应(EDR)解决方案前,你需要了解这10个问题
这些评论亮了
你们这么屌丁磊知道吗 回复
说了一大推,然而并没有说怎么加密字符串,怎么混淆,怎么做的花指令。。。果然都是套路
)10(亮了
发表评论已有 20 条评论
andrew 2017-03-23回复 1楼
干货,收集学习了,点赞
亮了(3)
yllen 2017-03-23回复 2楼
这个盾,我差点看成是阿里的
亮了(0)
freebuf 2017-03-23回复 3楼
由于苹果的限制,想做保护也不容易。
亮了(0)
keenny (1级) 2017-03-23回复 4楼
哈哈哈 确定图标颜色换成这个了还相似?
亮了(0)
Ethernet (1级) 网易移动安全,有什么问题,欢迎私信 2017-03-24回复 5楼
做安全的都是满满的套路
亮了(0)
Jay 2017-03-24回复 6楼
与几维安全发布的iOS版的安全编译器类似
亮了(0)
mengxp (1级) 2017-03-24回复 7楼
前排学习。。
亮了(0)
heather (2级) 网易云安全小组dun163.com 2017-03-24回复 8楼
搬板凳学习 :oops:
亮了(0)
Nikos (1级) 2017-03-24回复 9楼
静态分析iOS APP的工具除了IDA,还有一款强大的工具– Hopper Disassembler,在某些方面,它比IDA更强大。 所以是那些方面,没用过hopper,求指导:)
亮了(1)
你们这么屌丁磊知道吗 2017-03-24回复 10楼
说了一大推,然而并没有说怎么加密字符串,怎么混淆,怎么做的花指令。。。果然都是套路
亮了(10)
司空仲平 (1级) 2017-03-30回复 11楼
感谢分享
亮了(0)
hjaycee (1级) 2017-06-25回复 12楼
和这篇文章有点像哦!https://www.owasp.org/index.php/IOS_Application_Security_Testing_Cheat_Sheet
亮了(1)
Ethernet (1级) 网易移动安全,有什么问题,欢迎私信 2017-06-26回复
@ hjaycee 你给的url是讲iOS安全测试的, 你确定看得懂英文? 6.25注册,6.25发个贴。
亮了(0)
hjaycee (1级) 2017-06-26回复
@ Ethernet 没看就来喷?果然水军第一多公司
亮了(0)
Ethernet (1级) 网易移动安全,有什么问题,欢迎私信 2017-06-26回复
这个帐号就是网易的,谢谢。
亮了(1)
Ethernet (1级) 网易移动安全,有什么问题,欢迎私信 2017-06-26回复
@ hjaycee 网易的产品从来不需要水军,是自己公司帐号,就是自己的。
网易的产品从来都是口碑取胜的,谢谢你的关注。
亮了(0)
hjaycee (1级) 2017-06-26回复
@ Ethernet 你巴不得这个网站的评论由你来审核。你们技术硬根本不用担心别人说道,几条评论能影响的了你们什么。好像谁都是你们的竞争对手,一上来就怼,就这态度谁以后敢用你们的东西。(对了国外的产品,已经加密的一点代码都看不到了,这个市场只由技术决定胜负,而不是人工评论保护盾)
亮了(0)
Ethernet (1级) 网易移动安全,有什么问题,欢迎私信 2017-06-26回复
我们一直觉着市场合理竞争是良性的循环,你的几点评论已经能看出来你是谁了,也不需要我们说什么了,产品是否好差,自有市场来评断。
如果不介意,你不妨亮明身份,我们还能进行一些技术交流。
亮了(0)
hjaycee (1级) 2017-06-26回复
@ Ethernet 算了吧,我就是个不懂英文的一介草夫罢了。
亮了(0)
Ethernet (1级) 网易移动安全,有什么问题,欢迎私信 2017-06-26回复
@ hjaycee 那我们就事论事吧,两篇文章讲的根本不是一回事,再说写这篇文章时,作者本人都没看过你给的那篇英文贴。本意不是针对谁,只是一上来就说文章很像(像中透露着抄袭的意味),对于不明真像的群众肯定是有误导作用的,毕竟不是所有人都能仔细看完两篇文章。如果言语中有什么让你不舒服的,请见谅。
亮了(1)
昵称
请输入昵称
必须您当前尚未登录。登陆?注册邮箱
请输入邮箱地址
必须(保密)表情插图
有人回复时邮件通知我
网易易盾加固
网易易盾加固
这家伙太懒,还未填写个人描述!
3
文章数
5
评论数
最近文章
网易招聘Windows安全开发工程师
2017.08.18
网易(杭州)诚招移动端安全人才
2017.04.17
iOS App的加固保护原理
2017.03.23
浏览更多
相关阅读
FIT 2016集锦 | 解锁iOS手势密码的正确姿势Xshell后门事件中用到的DNS Tunneling技术分析XcodeGhost S:变种带来的又一波影响SIM卡安全木马盗用“风行播放器”签名流氓推广
特别推荐
关注我们 分享每日精选文章
活动预告
11月
FreeBuf精品公开课·双11学习狂欢节 | 给努力的你打打气
已结束
10月
【16课时-连载中】挖掘CVE不是梦(系列课程2)
已结束
10月
【首节课仅需1元】挖掘CVE不是梦
已结束
9月
【已结束】自炼神兵之自动化批量刷SRC
已结束
FREEBUF免责声明协议条款关于我们加入我们广告及服务寻求报道广告合作联系我们友情链接关注我们
官方微信
新浪微博腾讯微博Twitter赞助商
Copyright © 2018 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号
css.php 正在加载中...0daybank
文章评论