教你动手做一个iOS越狱app

demo

前言

俗话说得好, 万事开头难. 仅仅是上图一个如此简单地不能再简单的小app, 其实都不算是app, 只是注入了一段代码进系统中, 等到特定的函数方法调用的时候就会被我们hook掉, 执行我们写的代码, 仅此而已.

哈哈, 就是这样一个小功能, 搞得我焦头烂额了一个晚上, 所以大家不用害怕, 连我这样的菜鸟都能实现, 大家只要认真看我的总结, 就一定可以自己也动手在自己越狱iPhone, iPad上嗨起来!

ps : 为了纪念这神圣的一刻, 就算是这么简单的程序我也把它放到了我的Github上, 也算是一个里程碑吧. 还有就是万一哪天我自己忘了的时候能回头看看就能把这些知识捡回来. GitHub入口 -> 第一个越狱程序代码

废话不多说, 我们直入正题!


准备动作

你需要准备的是 :

  • 一台Mac
  • 一部已经越狱的iPhone or iPad
  • Theos
  • Xcode
  • Xcode Command Line Tools
  • dpkg

Mac

这个..就不说了吧. 再不行虚拟机也可以顶着上啊

越狱iPhone

越狱的方法网上已经有很多成熟的方法了, 我的4s用PP助手真的就接近一键越狱了. 当然这台越狱iPhone还需要配置.

安装OpenSSH

由于接着要在电脑上用命令行直接连接到手机给手机安装, 所以这里必须配置好. 方法也很简单, Cydia的主界面拉下去就有OpenSSH的配置方法了, 这里不再赘述.

ps : 友情提示以下, 配置好之后是有一个原始的root密码的, 必须修改掉, 否则容易让不安好心的人连接到你的手机.

    方法如下 : 
    进入命令行工具
    ssh root@你的手机的IP地址
    passwd 
    修改好之后输入logout就能断开连接了
    由于每次用ssh链接手机都需要输入密码比较麻烦, 有一种一劳永逸的方法, 大家可以自行Google~

安装apt与ldid

直接在Cydia搜索apt和ldid, 安装即可.

Xcode

相信做iOS开发的都有吧..这里就不再说了, 只是如果你Mac上有多个Xcode的话, 需要用以下指令指定一个Theos默认使用的Xcode

sudo xcode-select -s /Application/Xcode.app/Contents/Developer 大家根据自己实际Xcode的位置来定.

Xcode Command Line Tools

在命令行下执行xcode-select --install即可

dpkg

首先安装MacPort, 在官网下载安装就行了. 安装好之后可以通过在命令行中输入port version来查看是否安装成功.

然后输入sudo port install dpkg就能安装dpkg了, dpkg是用来把我们写的Tweak代码打包成deb的工具

ps : 越狱app安装包后缀为.deb, 而没越狱的为.ipa.

Theos

我们的主角终于上场了. 我们的代码就是用这个软件来编写.

下载Theos

export THEOS=/opt/theos 配置环境变量, 以后THEOS就相当于theos的绝对路径, 即/opt/theos

sudo git clone git://github.com/DHowett/theos.git $THEOS 从GitHub上下载Theos

配置ldid

这里下载ldid, 把他放到/opt/theos/bin/下, 并用以下命令赋予它可执行权限

sudo chmod 777 /opt/theos/bin/ldid

解决Theos的bug

首先在Cydia中搜索安装CydiaSubstrate, 然后用iFunBox或scp等方式, 将iOS上的/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate拷贝到Mac上, 重命名为libsubstrate.dylib之后放到/opt/theos/lib/下, 替换掉无效的文件即可. (我这部Mac上lib文件夹是空文件夹).

ok, 大功告成, 我们终于可以用Theos大展拳脚啦!!!

创建Theos工程

依然是使用命令行进行创建Theos项目

/opt/theos/bin/nic.pl : 自动NIC(New Instance Creator).

然后这里会有许多个模板, 就跟Xcode我们创建项目的时候也有许多模板给我们选择, 是Command Line Tool or Single View Application .... 这里也是. 我们选择iphone/tweak这个.

Project Name : 项目名称

Package Name : 打包成deb包的名称(类似于bundle identifier)

Author/Maintainer Name : 作者名

MobileSubstrate Bundle filter : 该工程作用的对象的bundle identifier, 想hook哪个app, 就输入哪个app的bundle identifier. 例如微信有可能是com.tencent.wechat

List of application to terminate upon installation : 该tweak安装完成后需要重启的应用, 一般重启SpringBoard. (相当于重启桌面). 不用的话就输入 -

ok, 工程创建完成啦

Theos基本知识

创建完后一般会有4个文件

    Makefile
    Tweak.xm
    control
    xxx.plist

Makefile

该文件指定工程用到的文件, 框架,库等信息. 例如你的Tweak.xm文件用到了UIKit, Foundation等其他什么框架, 都在这里描述. 里面具体可以写些什么大家可以自行Google啦.

这里需要注意的是, 如果要把程序通过ssh的方式安装在手机上, 就必须在里面加一段
THEOS_DEVICE_IP = 手机的IP地址

Tweak.xm

我们写代码的文件, 后缀中的x代表这个文件支持Logos语法. m代表支持C++. 如果只有一个单独的x代表支持Logos和C, xm则支持Logos和C/C++. 跟我们的.m和.mm一个意思.

这个文件默认内容就是一个注释, 简易的指导书. 这里介绍一些我们用到的概念

%hook

%hook ClassName : 代表要hook这个类.

    %hook SpringBoard
    /* 这里则为你要hook的函数, 方法 */
    %end
%orig

用在钩住(hook)的函数内部, 代表调用被钩住的函数的原始代码

%log

用在钩住(hook)的函数内部, 用来打印函数的类名, 参数等信息, 还可自己追加想要打印的信息.

%new

用在%hook的内部, 用于给一个现有的类添加新函数.

ps : 还有一些例如%group, %ctor, %init, %c等大家可自行Google其用法, 这里不再赘述

control

该文件记录了deb包管理系统所需的基本信息, 会被打包进deb包中.

xxx.plist

跟我们应用中的info.plist作用类似.

开始编码

由于我们的app非常小, 只是在iPhone启动SpringBoard.app完成的时候显示一个alertView而已, 所以我们的代码非常精简

    %hook SpringBoard

    - (void)applicationDidFinishLaunching:(id)application
    {
        %orig; // 调用原来的代码

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome to iPhone 4s!" message:nil delegate:self cancelButtonTitle:@"Goddamn!" otherButtonTitles:nil];

        [alert show]; // 显示弹窗

    }

    %end

编译 + 打包 + 安装

在项目文件夹下使用make命令, 就可以编译Theos工程了. 编译完成当前目录下会多一个obj文件夹

make package命令, 打包程序. 打包成功后当前目录下会多一个package文件夹, 你的deb文件就在里边

make package install : 编译+打包+安装一条龙服务, 直接将程序编译打包后通过ssh连接的方式安装在你的手机上. 当然你也可以把deb文件先放到手机上再利用iFile或其他应用安装.

Done! coffee time.

ps : 配置文件和代码都能在我的GitHub上找到, 有什么不懂的可以Google或者在这里留个言, 我都会尽可能快地回复, 相互学习, 共同进步! Good luck!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容