--------------- 前言 ---------------
Theos是什么?
Theos是国外大神DHowett发明的开发 iOS 越狱插件的工具,DHowett的 Theos 大幅简化了编写越狱程序的流程。DHowett介绍了如何在Mac和Linux上开发iOS越狱程序,本文将只介绍如何在Mac上开发。
本文内容:hook springBoard 。每次springBoard重启都会执行hook 。
本文大部分搬运自以下书籍和帖子 :
【iOS应用逆向工程:分析与实战】沙梓社 吴航 著
【iOS应用逆向工程(第2版)】沙梓社 吴航 著
帖子:
Theos:iOS越狱程序开发框架
ios插件开发-theos环境搭建
--------------- 正文 ---------------
一、越狱程序开发需要安装的工具(Mac端)
1. 安装 Xcode
- 已经安装了就不用下载了,没有安装或者需要更新的看下面链接。
https://developer.apple.com/download/
2. 安装 command line tools
- 从10.8开始xcode的command line tools就要自己安装了,如果没安装的话,会出现各种问题,比如gcc没有安装,等等各种诡异的问题。新手很是害怕。
https://developer.apple.com/downloads/?=Command%20Line%20Tools%20
3. 安装 MacPorts
- 那啥是MacPorts呢,Mac下面除了用dmg、pkg来安装软件外,比较方便的还有用MacPorts来帮助你安装其他应用程序,跟BSD中的ports道理一样。MacPorts就像apt-get、yum一样,可以快速安装些软件。经常用linux服务器的人就非常的熟悉了吧,总是用这么些好人,已经替我想好了很多的东西。那为什么需要这个MacPorts,因为我们要打包deb,需要用到dpkg。我们想很快的安装dpkg,就选择了port。
https://www.macports.org/install.php
4. 设置配置
export THEOS=/opt/theos
- 类似于起别名,THOES 代表 此目录
- 每次打开终端都要重新设置一次,或者可以编辑/etc/profile文件,把上面那一行添加进去,这样不用每次打开命令行都重新设置一次。【我没找到etc文件夹】
5. 下载theos
sudo git clone --recursive git://github.com/DHowett/theos.git $THEOS
- 会把theos下载到 Step 4 所设置的目录中,会提示你输入mac的密码。--recursive 表示包括下载子目录文件,这与参考书籍与帖子中不同,也是导致我参考书籍帖子没能成功的主要原因。
6. 下载ldid - 用于模拟证书
-
ldid的作用是模拟给iPhone签名的流程,使得你能够在真实的设备上安装越狱的apps/hacks。
curl -s http://dl.dropbox.com/u/3157793/ldid > ~/Desktop/ldid chmod +x ~/Desktop/ldid sudo mv ~/Desktop/ldid $THEOS/bin/ldid
先是下载到桌面,然后改执行权限,然后移动到指定目录。
由于伟大的墙,下载这个你需要自备梯子。
注:我把这个工具下载下来放到了http://pan.baidu.com/s/1kTHoIGZ,也可以从这里下载,然后给它添加执行权限(chmod +x ldid)并移动到opt/theos/bin/这个目录下。
7. 安装dpkg
-
dpkg能够把你的app打包成Debian Package,可以分发的Cydia的存储目录中。
先安装homebrew,再执行下面命令brew install dpkg
-
也可以用另一个工具Cakebrew来安装或者查看dpkg,前提也是要安装homebrew。
二、构建 Tweak 程序
1. 准备工作
从手机中拷2个文件出来,可以用同步助手。
- 动态库文件MobileSubstrate.dylib 改名 libsubstrate.dylib 拷贝到 /opt/theos/lib
- 头文件CydiaSubstrate 改名 substrate.h 拷贝到/opt/theos/include
2. 下载iOS 头文件
-
很可能theos本身就自带了你所需要的头文件,但是,如果你编译程序的时候提示你头文件相关的问题,那你就需要准备相关的头文件了。
-
下面命令会在当前目录新建header文件夹并下载文件
git clone https://github.com/rpetrich/iphoneheaders.git header
- 然后拷贝header文件到/opt/theos/ 目录下 ,改名include 【合并】原来的include文件夹,因为如果mac权限问题,用命令行移动会丢失一些隐藏文件,所以直接拷贝。拷贝后注意文件大小。
3. 创建项目
export THEOS=/opt/theos
$THEOS/bin/nic.pl
- 选择 tweak
- 填信息
- 创建工程成功之后,mac用户目录下会生成对应工程名的文件夹
4. Tweak File
- 一旦你创建了项目,工程目录下生成了一个叫做Tweak.xm的文件,这是个特殊的文件,hook的相关代码就将写在这个文件。
-
Tweak.xm中默认所有代码都是被注释起来的,你需要把注释拿掉。
%hook 和 %end%hook Springboard // overwrite methods here %end
-
%hook后面跟的是你要hook的类名称,以一个%end结尾。上面的代码说明我们会hook Springboard类里面的method。
当在一个method内部的时候,%orig会调用原来的方法(original method)。 -
你甚至可以给原来的method传递参数,例如:%orig(arg1,arg2)。如果你不调用%orig,原来的方法就绝对不会被调用。
所以,如果你hook了SpringBoard的init方法,但是没有调用%orig。那么你的iphone就将不可用,除非你通过ssh删除你的app。
5. 添加hook代码
- 打开Tweak.xm,然后加上代码:
#import <SpringBoard/SpringBoard.h>
%hook SpringBoard
-(void)applicationDidFinishLaunching:(id)application {
%orig;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"你好" message:@"欢迎使用" delegate:nil cancelButtonTitle:@"hook成功了" otherButtonTitles:nil];
[alert show];
}
%end
6. 添加 framework
-
把环境变量、IP写入,后面可以不写
export THEOS = /opt/theos export THEOS_DEVICE_IP = 192.168.1.146【设备IP】
-
因为我们依靠UIKit framework来显示alert,所以需要在Makefile中加上如下一行:
demo_FRAMEWORKS = UIKit
三、安装到手机上
1.编译 make
首先需要转到 tweak 工程目录 demo 下,然后执行命令:
make
2.打包 make package
make package
demo目录下packages文件夹会产生相应 .deb文件
3.安装 make install
安装前需要指定手机IP,最好手机电脑连接同一个wifi ,手机上查看IP,点开连接上的wifi右边 Ф 图标。
export THEOS_DEVICE_IP=192.168.1.146【你的设备IP】
后面root@IP 的密码是 alpine
4.完成
每次重启springboard 都会弹出alerView
IMG_0006.PNG
网友评论