出于安全考虑,也为了让每个App运行在自己的独立空间,iOS引入了名为沙箱(sandbox)
的安全体系。沙箱会自动拦截文件访问,网络套接字、Bootstrap服务,以及对子进程的spawn。
越狱操作对沙箱做出了适量修改,使所有进程都能够加载CydiaSubstrate, 但为了用户的隐私安全,大多数沙箱限制仍保留原样。
在每一个iOS版本中,苹果公司都会增强沙箱的作用,当我们的tweak需要跨进程访问数据或向磁盘写数据时,沙箱会给我们的操作带来限制。
绕过这些限制的方案之一是视tweak运行在哪些进程中而定。选择一个这些进程都能访问的路径或文件,达到共享数据的目的。这是一种常规的操作方法,但一旦苹果公司再次收紧沙箱的限制,这种方法就可能失效,比如iOS8中已经不存在一个所有进程皆可读写的路径了。
另一种更好的方案是把类似操作放在权限高的进程,比如SpringBoard、backboardd,甚至是我们自己编写的守护进程里去完成,我们的tweak所在的进程只需要把受限制的操作丢给这些高权限的进程,然后坐等结果就可以了。这么做的好处是,即使沙箱的限制越来越严,只要tweak所在的进程能够与高权限进程通信,tweak就能正常运行。
奇怪的是,在iOS8里,苹果公司甚至限制了AppStore App所能访问的服务(即能够通信的进程),导致几乎所有AppStore App的进程间通信都失效了。RocketBootstrap应用而生,它既破除了上面提到的访问限制,又较好的保留了沙箱的防护,向RocketBootstrap注册的服务可以被全系统进程访问,包括那些沙箱限制非常严格的进程;RocketBootstrap是一个单独的程序
网友评论