开发越狱程序和日常开发的iOS程序很相似,不过,越狱程序能做更强大的事情。你的设备越狱之后,你就能够hook进Apple提供的几乎所有的class,来控制iPhone/iPad的功能。

@DHowett的Theos大幅简化了编写越狱程序的流程。DHowett介绍了如何再Mac和Linux上开发iOS越狱程序,本文将只介绍如何在Mac上开发。

本文将一步步介绍写越狱程序需要的工具,在这个过程中介绍Theos的用法和功能。

越狱程序开发需要安装的工具

第1步 安装iOS SDK

从http://developer.apple.com/devcenter/ios/index.action去下载安装最新的Xcode,里面自带有最新的iOS SDK。

第2步 设置环境变量

建议把theos安装在/opt/theos, 打开命令行然后输入

export THEOS=/opt/theos

通过在命令行执行 echo $THEOS可以看到这个变量是否正确设置。如果是这样设置,每次你打开命令行都需要重新设置一下,你也可以编辑/etc/profile文件,把上面那一行添加进去,这样不用每次打开命令行都重新设置一次。

第3步 安装Theos

在命令行中输入:

svn co http://svn.howett.net/svn/theos/trunk $THEOS

会把theos下载到Step2所设置的目录中,会提示你输入admin的密码。

第4步:下载ldid

ldid的作用是模拟给iPhone签名的流程,使得你能够在真实的设备上安装越狱的apps/hacks。

你可以在很多地方都找得到这个tool,不过DHowett在他的dropbox中给大家存了一份。

通过下面的命令下载:

curl -s http://dl.dropbox.com/u/3157793/ldid > ~/Desktop/ldid
chmod +x ~/Desktop/ldid
mv ~/Desktop/ldid $THEOS/bin/ldid

先是下载到桌面,然后改执行权限,然后移动到指定目录。

你可以尝试下看看直接下载是否ok:

curl -s http://dl.dropbox.com/u/3157793/ldid > $THEOS/bin/ldid; chmod +x $THEOS/bin/ldid

由于伟大的墙,下载这个你需要自备梯子。

注:我把这个工具下载下来放到了http://pan.baidu.com/s/1kTHoIGZ,也可以从这里下载,然后给它添加执行权限(chmod +x ldid)并移动到$THEOS/bin/这个目录下。

第5步:安装dkpg

dpkg能够把你的app打包成Debian Package,可以分发的Cydia的存储目录中。

在命令行下执行

brew install dpkg.

也可以用另一个工具Cakebrew来安装dpkg。

第6步:创建新项目

theos使用一个叫做nic(new instance tool)的工具来创建新的工程。执行下面的命令:

$THEOS/bin/nic.pl

就可以开始创建。下面是一个创建jailbroken 应用程序的例子:

author$ $THEOS/bin/nic.pl
NIC 1.0 - New Instance Creator
——————————[1.] iphone/application[2.] iphone/library[3.] iphone/preference_bundle[4.] iphone/tool[5.] iphone/tweak
Choose a Template (required): 1
Project Name (required): firstdemo
Package Name [com.yourcompany.firstdemo]:
Author/Maintainer Name [Author Name]:
Instantiating iphone/application in firstdemo/…
Done.

简单这样的命令,就创建了一个基本的越狱程序firtdemo,它除了常规的文件外,还包含了Makefile,以及control文件(当在Cydia中时,显示的关于程序的信息)。

构建和部署

下面将介绍如何创建一个jailbroken app/tweak/hack的工具,然后编译和上传到设备的方法。

下面是一个创建jailbroken 应用程序的例子:

author$ $THEOS/bin/nic.pl
NIC 1.0 - New Instance Creator
——————————[1.] iphone/application[2.] iphone/library[3.] iphone/preference_bundle[4.] iphone/tool[5.] iphone/tweak
Choose a Template (required): 1
Project Name (required): firstdemo
Package Name [com.yourcompany.firstdemo]:
Author/Maintainer Name [Author Name]:
Instantiating iphone/application in firstdemo/…
Done.

这将会创建一个新的目录firstdemo,并且有以下文件。

  1. control: 包含applicaton/tweak的信息,当你从Cydia安装时,你可以看到这些信息,包括名字,作者,版本,等等。
  2. main.m,这个不用多说。
  3. [applicationName]Application.mm:appdelegate文件。
  4. Makefile:包含必要的编译命令
  5. Resources:包含info.plist文件等
  6. RootViewController.h/mm

Makefile

这里重点介绍下:

include theos/makefiles/common.mk
APPLICATION_NAME = firstdemo
[applicationName]_FILES = main.m firstdemoApplication.mm RootViewController.mm
[applicationName]_FRAMEWORKS = UIKit Foundation QuartzCore AudioToolbox CoreGraphics

设置环境变量

打开命令行然后输入

export THEOS=/opt/theos/
export SDKVERSION=7.1
export THEOS_DEVICE_IP=xxx.xxx.xxx.xxx

第二行定义你当前的SDK版本,我本机装的是7.1,最后一行定义你的设备的ip地址。

构建工程

第一个命令:make

$ make
Making all for application firstdemo…Compiling main.m…Compiling firstdemoApplication.mm…Compiling RootViewController.mm…Linking application firstdemo…Stripping firstdemo…Signing firstdemo…

注意,如果出现如下的错误:

libsubstrate.dylib, missing required architecture armv7 in file /Users/mcmillen/test/theos/lib/libsubstrate.dylib (2 slices)

解决方法:

下载libsubstrate.dylib,然后copy到/opt/theos/lib

第二个命令:make package

make package
Making all for application firstdemo…
make[2]: Nothing to be done for ‘internal-application-compile’.
Making stage for application firstdemo…Copying resource directories into the application wrapper…
dpkg-deb: building package ‘com.yourcompany.firstdemo’ in ‘/Users/author/Desktop/firstdemo/com.yourcompany.firstdemo_0.0.1-1_iphoneos-arm.deb’.

第三个命令:make install

$ make package install
Making all for application firstdemo…
make[2]: Nothing to be done for `internal-application-compile’.
Making stage for application firstdemo…Copying resource directories into the application wrapper…
dpkg-deb: building package ‘com.yourcompany.firstdemo’ in ‘/Users/author/Desktop/firstdemo/com.yourcompany.firstdemo_0.0.1-1_iphoneos-arm.deb’.
...
root@ip’s password:
...

这个过程会提示你输入几次iphone或者ipad的密码。默认是:alpine.

make install报错解决方法

如果执行make install提示错误:

   make: *** [internal-install] Error 1

找到文件$THEOS/makefiles/package/deb.mk,把其中的

$(ECHO_NOTHING)COPYFILE_DISABLE=1 $(FAKEROOT) -r dpkg-deb -b "$(THEOS_STAGING_DIR)" "$(_THEOS_DEB_PACKAGE_FILENAME)" $(STDERR_NULL_REDIRECT)$(ECHO_END)

替换为:

$(ECHO_NOTHING)COPYFILE_DISABLE=1 $(FAKEROOT) -r dpkg-deb -Zgzip -b "$(THEOS_STAGING_DIR)" "$(_THEOS_DEB_PACKAGE_FILENAME)" $(STDERR_NULL_REDIRECT)$(ECHO_END)

然后再次执行make install就可以正常安装了。

你的第一个Tweak程序

这一节将介绍如何给任意的Apple提供的方法打补丁。在这个demo中,我们将要hook Springboard的init方法,然后在iphone启动时显示一个UIAlertView。这个demo不是最酷的,但是这里所使用的方法和模式,可以用来给任何class的任何method打补丁。

1 准备工作

你首先还需要下载libsubstrate.dylib,然后copy到/opt/theos/lib

下载libsubsrate.dylib

2 iOS 头文件

很可能theos本身就自带了你所需要的头文件,但是,如果你编译程序的时候提示你头文件相关的问题,那你就需要准备相关的头文件了。

下载iphoneheader到/opt/theos/include:

git clone https://github.com/rpetrich/iphoneheaders.git
mv iphoneheaders/* theos/include/

上述操作之后截图如下:

从OSX library中拷贝IOSurfaceAPI.h到theos/include/IOSurface目录下:

  cp /System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceAPI.h theos/include/IOSurface

给IOSurfaceAPI.h打补丁,注释掉IOSurfaceCreateXPCObject 和IOSurfaceLookupFromXPCObject。

注释后的结果是:

/* This call lets you get an xpc_object_t that holds a reference to the IOSurface.Note: Any live XPC objects created from an IOSurfaceRef implicity increase the IOSurface's global usecount by one until the object is destroyed. *//*xpc_object_t IOSurfaceCreateXPCObject(IOSurfaceRef aSurface) XPC_RETURNS_RETAINEDIOSFC_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);*//* This call lets you take an xpc_object_t created via IOSurfaceCreatePort() and recreate an IOSurfaceRef from it. *//*IOSurfaceRef IOSurfaceLookupFromXPCObject(xpc_object_t xobj) CF_RETURNS_RETAINEDIOSFC_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
*/

3 创建项目

执行 $THEOS/bin/nic.pl

author$ $THEOS/bin/nic.pl
NIC 1.0 - New Instance Creator
——————————[1.] iphone/application[2.] iphone/library[3.] iphone/preference_bundle[4.] iphone/tool[5.] iphone/tweak

这里,需要选择5,如下:

NIC 1.0 - New Instance Creator
——————————[1.] iphone/application[2.] iphone/library[3.] iphone/preference_bundle[4.] iphone/tool[5.] iphone/tweak
Choose a Template (required): 5
Project Name (required): iossecurity
Package Name [com.yourcompany.iossecurity]:
Author/Maintainer Name [Ted]:
MobileSubstrate Bundle filter [com.apple.springboard]:
Instantiating iphone/tweak in iossecurity/…
Done.

4 The Tweak File

一旦你创建了项目,你会发现Theos生成了一个叫做Tweak.xm的文件,这是个特殊的文件,hook的相关代码就将写在这个文件。

默认的所有代码都是被注释起来的。

%hook 和 %end

%hook Springboard
// overwrite methods here
%end

%hook后面跟的是你要hook的类名称,以一个%end结尾。上面的代码说明我们会hook Springboard类里面的method。

%orig

当在一个method内部的时候,%orig会调用原来的方法(original method)。

你甚至可以给原来的method传递参数,例如:%orig(arg1,arg2)。如果你不调用%orig,原来的方法就绝对不会被调用。

所以,如果你hook了SpringBoard的init方法,但是没有调用%orig。那么你的iphone就将不可用,除非你通过ssh删除你的app。

5 Hooking into Springboard

打开Tweak.xm,然后加上代码:

#import <SpringBoard/SpringBoard.h>%hook SpringBoard-(void)applicationDidFinishLaunching:(id)application {
%orig;UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome"
message:@"Welcome to your iOS Device Ted!"
delegate:nil
cancelButtonTitle:@"security.ios-wiki.com" otherButtonTitles:nil];[alert show];
[alert release];}%end

首先,import头文件 Springboard.h,这可以让我们可以访问springboard。然后,我们告诉预处理器hook Springboard class。

这里覆盖的method是applicationDidFinishLaunching:方法,当Springboard启动时,就会被执行。注意我们调用了%orig。

最后,显示一个UIAlertView。

6 添加Framework

如果你直接编译,,会得到如下的提示信息:

Tweak.xm: In function ‘objc_object* $_ungrouped$SpringBoard$init(SpringBoard*, objc_selector*)’:
Tweak.xm:6: error: declaration of ‘objc_object* self’ shadows a parameter

那是因为我们依靠UIKit framework来显示alert,所以需要在Makefile中加上如下一行:

iossecurity_FRAMEWORKS = UIKit

如下图:

7 Building, Packaging, Installing.

在前面的系列中介绍了如何编译,打包和安装,依次执行下面的命令即可。

make, make package, make install

安装之后,你将看到这个:

小结

本节我们简要介绍了Theos的安装与Tweak程序的开发以及安装流程,并给出了一个小例子,后面会对Tweak程序运行的原理进行详细的介绍。

原文地址:http://security.ios-wiki.com/issue-3-6/

iOS越狱程序开发框架相关推荐

  1. 向iOS越狱彻底说再见!

    老牌第三方软件商店 Cydia 关闭在即,iPhone 越狱时代又见落日归途? 作者 | 仲培艺 出品 | CSDN Cydia 线上商店是针对完成越狱的 iOS 设备的一种破解软件,在越狱过程中被装 ...

  2. Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序

    Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序 C#原本是用来编写Windows以及Windows Phone的应用程序.自从Xamarin问世后,C#的作用就发生了很大的变化. ...

  3. mpvue 微信小程序api_第三方框架与原生微信小程序开发框架性能之比较 | Q荐读...

    作者 | 崔红保编辑 | 王莹 自 2017年1月9日微信小程序诞生以来,历经 2 年多的迭代升级,已有数百万小程序上线,成为继 Web.iOS.Android 之后,第四大主流开发技术. 与之相随, ...

  4. 执行ios命令_MEDUZA:一款针对iOS应用程序的通用SSL解绑工具

    MEDUZA MEDUZA是一款针对iOS应用程序的通用SSL解绑工具,该工具基于Frida开发,可以当作SSLKillSwitch工具的替代品.本来我是想自己开发自己用的,而且原本并不打算开源出来. ...

  5. IOS应用程序发布到苹果APP STORE完整流程使用教程

    参考: http://blog.csdn.net/mad1989/article/details/8167529(xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)) htt ...

  6. 教你动手做一个 iOS 越狱 app

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

  7. 阿里开源 iOS 协程开发框架 coobjc源码分析

    背景 昨天朋友圈被一篇文章(以下简称"coobjc介绍文章")刷屏了:刚刚,阿里开源 iOS 协程开发框架 coobjc!.可能大部分iOS开发者都直接懵逼了: 什么是协程? 协程 ...

  8. 17 岁成为 iOS 越狱之父,25 岁造出无人车,黑客传奇!

    转 17 岁成为 iOS 越狱之父,25 岁造出无人车,黑客传奇! 2019年07月25日 14:46:50 CSDN资讯 阅读数 5762 原文链接:https://data.newrank.cn/ ...

  9. 笔记3 小程序开发框架

    [目录] 小程序开发框架 1 基本构成 (1)WXML-页面 (2)WXSS-样式 (3)WXS-对XML增强的脚本语言 (4)JavaScript-交互逻辑 2 详细介绍 (1)WXML (2)WX ...

最新文章

  1. python punctuation_经验拾忆(纯手工)=gt; Python基本数据类型_Python - UCloud云社区...
  2. Java设计模式(一):策略设计模式
  3. 131. 直方图中最大的矩形【单调栈】
  4. 100 个网络基础知识普及,看完成半个网络高手! 【厦门微思网络】
  5. JavaWeb学习之路——SSM框架之SpringMVC(九)
  6. Flex4_HttpService组件
  7. 淘宝直播在智能互动领域的探索及落地
  8. Docker快速安装ZooKeeper开源分布式协调服务器
  9. 联发科发布天玑9000移动平台 4nm制程 Armv9架构
  10. 万圣节主题海报设计,少不了的素材
  11. 想学python买什么书好-学习 Python 用哪本书好?
  12. 小型电商Web架构!小而美!值得学习!
  13. 用梯度下降求解最小二乘线性回归python实现
  14. 关于域名的那些“彩蛋”
  15. 层次分析法详细讲解(小白必看电脑查看)
  16. python模拟登陆豆瓣_模拟登陆豆瓣并爬取个人主页(爬虫项目三)
  17. 工控--常用编程软件
  18. bose qc30 安静的城市是什么样子
  19. mac mini 蓝牙_Mac Mini
  20. 流体力学发展史(转)

热门文章

  1. 平方面积怎么测量?教你快速学会这个方法
  2. vant 绑定银行卡页面+验证所属银行+身份证号码+所属银行选择器
  3. java闪光灯_手电筒项目开发一闪光灯
  4. 基于Python的多功能IP搜索平台设计与实现
  5. 引起网络广播风暴的原因
  6. requests wrong version number
  7. YII2使用时出现The file or directory to be published does not exist
  8. 米聊显示服务器开小差请稍候再试,系统开小差请稍后再试什么意思啊
  9. 梦想还是要有的,即使被摧残着!
  10. 华为荣耀10作为安卓手机程序开发真机