开篇 关于iOS越狱开发

越狱与开发

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个问题均已解决。

html <table>表数据转 Json 格式

对一个小Table做个转换,需要先将HTML表格数据转成Json以便重新组合输出。于是搜索:HTML-&gt;Json,基本上都是找到以下代码: var keysArr = new Array(&quot;key0&quot;, &quot;key1&quot;,&quot;key2&quot;...

发布于:1年以前  |  1636次阅读  |  详细内容 »

telnet命令判断远程端口是否可以连接

关于telnet telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要...

发布于:1年以前  |  1419次阅读  |  详细内容 »

Ubuntu默认防火墙安装使用

iptables是基于linux系统的真正的唯一防火墙,其管理了所有的网络规则的数据库。但由于其本身的复杂性,ubuntu开发了命令行工具ufw,ufw是一个命令行的主机端的iptables类防...

发布于:1年以前  |  1651次阅读  |  详细内容 »

Shell语法快速入门

一、基本语法 1.1、shell文件开头 shell文件必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例...

发布于:1年以前  |  1399次阅读  |  详细内容 »

使用git快速切换到某一次提交

如我们都知道的,使用git时,每一次提交都会产到一个ID,我们称之为commit id。那如何快速定位到某一个提交点呢?其实很简单,git checkout commitid就可以。 比如,想到回...

发布于:1年以前  |  1272次阅读  |  详细内容 »

python下如何安装.whl包

Wheel是新一代的python模块的发布工具与方案。.whl就是Whell的文件格式,使用whl格式的文件安装需要先安装whell: python install wheel 成功之后,再直接使用python安装就...

发布于:1年以前  |  1458次阅读  |  详细内容 »

最多阅读

快速配置 Sign In with Apple 9月以前  |  2157次阅读
给数组NSMutableArray排序 1年以前  |  2012次阅读
UITableViewCell高亮效果实现 1年以前  |  1856次阅读
开篇 关于iOS越狱开发 1年以前  |  1810次阅读
在越狱的iPhone设置上使用lldb调试 1年以前  |  1807次阅读
APP适配iOS11 1年以前  |  1704次阅读
关于Xcode不能打印崩溃日志 1年以前  |  1522次阅读
App Store 审核指南[2017年最新版本] 1年以前  |  1498次阅读
所有iPhone设备尺寸汇总 1年以前  |  1487次阅读
使用ssh访问越狱iPhone的两种方式 1年以前  |  1408次阅读
使用ssh 访问越狱iPhone的两种方式 1年以前  |  1398次阅读
UIDevice的简单使用 1年以前  |  1373次阅读
使用 GPUImage 实现一个简单相机 11月以前  |  1347次阅读
为对象添加一个释放时触发的block 1年以前  |  1294次阅读
使用最高权限操作iPhone手机 1年以前  |  1207次阅读