iPhone 在10年前问世时,并没有第三方应用,连一个游戏都没有,但是 Nicholas Allegra 等越狱开发者将苹果的智能手机推到了极限,因为用户越狱后可以在没有苹果允许的情况下安装第三方应用程序和插件。随着时间的推移,iOS的生态越来越强大,其第三方应用越来越多,涉及的功能五花八门,从一定程度上说,越狱已经死了,但这不意味着,开发人员没有必要越狱手机。拿到一部越了狱的手机,对开发人员来说,就像是开启了上帝模式,你可以进入系统看看各个系统进程是如何配合完成任务的,系统的签名机制的工作原理等等,同时,当你觉得第三方软件很酷时,可以在越狱手机上分析其实现原理,了解竞争对手的安全性措施等等。
本系列介绍如何开发Tweak以增加软件功能,如何开发Daemon保护应用的安全性,如何调试第三方应用,当然这一切都是建立在越狱手机上的。建议在阅读本系列文章之前,先准备一台越狱的手机。至于越狱的方法,可以参考爱思助手越狱教程,PP助手越狱教程,当然还有盘古越狱等等,工具比较多,不一一列举。
越狱简单来说,就是通过系统的漏洞(又叫Bug),拿到系统的最高权限(一般是root用户,对于使用或了解linux或类linux的用户,应该知道root用户意味着什么),然后利用这个最高权限,安装必要的软件到必要的地方,并让这个软件开机就以最高权限启动。需要说明的是,开机就以最高权限权限启动这个机制是系统本身就自带,因为系统也需要这一权限以实现必要的功能,比如安装应用。而越狱程序能开机自启动则是因为他利用系统的漏洞拿到最高权限后,利用这个权限,把自己加到启动列表中。
对于系统来说,防止被越狱总的说来一个是对权限管控,尽量最少使用最高权限,即不滥用最高权限,减少产生漏洞的可能性,同时系统还可以事后弥补,比如重启时发现被越狱了,进行自我保护,不启动或清除掉那些异常的程序。一般来说,我们经常说的不完美越狱就是因为没有搞定系统的“事后弥补”这一过程。一般的现象就是越狱后的设备(iPhone或者是iPad)一旦重启之后,会无法进入系统,直接卡在一颗白色苹果的界面;或者是可以进入系统,但是越狱之后所装的应用都无法使用,打不开。
进行完前面的操作后,手机被称之为成功越狱(完美与不完美都认为是成功越狱)。如我们所知道的,我们可以通过ssh协议远程进入类Unix系统(unix,linux,FreeBSD),然后操作文件,进程等。iOS系统也可以看做是类Unix系统,从而我们能通过ssh进入iOS设备(越狱后是可以以root用户进入的,这意味着什么,大家都懂的)。至此,我们开启了上帝模式。
越狱开发需要与我们常说的应用开发区分开来,但越狱开发本质上也是在开发应用。说区分开来是因为,如果只用应用开发,我们完全没有必要越狱,要知道为了越狱,我们可是费了好大的功夫。一般来说,越狱开发专指Tweak开发,Daemon开发,破解开发。但越狱开发最后的产物,一般来说,还是一个应用或是作用在某一个应用上。毕竟最终用户都是通过应用来进行操作的。在Tweak,Daemon,破解开发中,又以Tweak开发最为常见。本文以Tweak开发来说明越狱开发。
Tweak开发是指开发一个模块(差不多就是像Windows开发的dll,iOS开发的动态Framework,Android开发的.so或是.dex文件),而这个模块被加载入某一个或几个应用中。听上去挺复杂,比如我们如何能被应用加载,我们又如何显示出来(入口),好在被加载到应用这一块不能我们担心,在越狱的时候,会自带一个越狱模块,我们称之为Cydia。当我们提到Cydia时,可以认为他是一个商店,可以收录不被苹果通过的软件(当然被苹果通过的软件也能收录)。也可以认为他是一个注入框架,所有的Tweak向Cydia注册后,他会负责在适当的时候把我们的Tweak注入到指定的应用(进程)中去。至此,我们解决了第一个总是:Tweak被应用加载。
Tweak被加载后,按照常规开发思路,就是要找机会显示(或者工作)了,比如用户有4个Tab,我们试着加入一个Tab,长按的时候,添加一个自己的菜单项,或是强制显示已有的菜单项(比如本来有3个菜单项但软件根据本地条件是否满足只显示2项或1项)。这本就是一个较复杂的开发,需要用到Hook相关的技术,好在我们不用从头开始整理自己的Hook库,Theos这个越狱开发工具包解决了大部分的问题。至于如何安装这个越狱开发工具包,这篇博客iOS逆向工程之Theos已经有很详细的说明。大家可以试着安装,然后按照Helloworld的教程开发第一个Tweak.
至此,2个问题均已解决。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8