也许吧,每每接触某些新东西的时候,都有点犯晕吧,这不是应该要的。

第一次接触ios越狱开发,也是这样吧。这篇主要是从无到有的说一下ios越狱的开发,网上很多的教程大部门都比较旧了吧,放在新设备上总是出现这样那样的问题,使人很是头疼。

从windows转到mac下开发,总有这个那个的不适应。习惯了vs的开发,突然用起了xcode难免有些为难,不是说xcode不好,两者都是非常好用的工具。

当然了,开发越狱程序和日常开发的iOS程序很相似,不过,越狱程序能做更强大的事情。你的设备也必须是要越狱的,你就能够hook到apple提供的几乎所有的类了,厉害吧,这样我们就能够控制iPhone/iPad的功能了。

怎么开发呢,iPhone发展到这个阶段,开发已经非常的成熟了,在做一些事情的时候我们可以依靠现有的工具,这里主要介绍Theos。

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

地址在:https://github.com/DHowett/theos有空自己去膜拜一下呗。

Theos能做到什么程度呢,生成一个框架,编译生成deb,这已经是相当的方便了,相当的逆天。

首先,准备工作要做好,配置Theos的工作环境吧。

1.给xcode安装command line tools

从10.8开始xcode的command line tools就要自己安装了,如果没安装的话,会出现各种问题,比如gcc没有安装,等等各种诡异的问题。新手很是害怕。

自己到官网搜索下载吧:

https://developer.apple.com/downloads/index.action?=Command%20Line%20Tools%20%28OS%20X%20Mountain%20Lion%29

2.还需要MacPorts

那啥是MacPorts呢,Mac下面除了用dmg、pkg来安装软件外,比较方便的还有用MacPorts来帮助你安装其他应用程序,跟BSD中的ports道理一样。MacPorts就像apt-get、yum一样,可以快速安装些软件。经常用linux服务器的人就非常的熟悉了吧,总是用这么些好人,已经替我想好了很多的东西。那为什么需要这个MacPorts,因为我们要打包deb,需要用到dpkg。我们想很快的安装dpkg,就选择了port。

MacPorts的安装

对于新手还是访问官方网站http://www.macports.org/install.php,这里提供有dmg,下载MacPorts-1.9.2-10.6-SnowLeopard.dmg,下一步下一步安装即可。当然MacPorts要根据mac的版本进行下载。这里下载的是SnowLeopard版本的。

好了,大部分需要的环境都已经搞定了。那就继续吧。

Theos的配置

1.设置环境变量

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

export THEOS=/opt/theos

通过在命令行执行 echo $THEOS可以看到这个变量是否正确设置。每次你打开terminal都需要重新设置一下。

2.下载theos

在ternimal中输入:

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

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

这个一下子就能下载完成了。

3.下载ldid

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

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

通过下面的命令下载:

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

4. 安装dkpg

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

sudo port install dpkg.

呵呵,这样Theos的配置就算是ok了,来试一下是不是配置正确呢。

创建新的项目

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中时,显示的关于程序的信息)。

这样就在当前文件夹下面建立了一个firtdemo的文件夹,里面有些代码的框架了。

那就试试身手吧

 

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

 

1. 准备工作

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

下载libsubsrate.dylib

2.iOS 头文件

很可能theos本身就自带了你所需要的头文件,但是,如果你编译程序的时候提示你头文件相关的问题,那你就需要准备相关的头文件了。要么从设备上dump头文件,要么google,建议你先google一下,看其他人有没已经提供了这些头文件。

一旦你有这些头文件,记得把它们放在/opt/theos/include。

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 Choose a Template (required):

这里,需要选择5,demo例子如下:

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.

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 = [[UIAlertViewalloc]  initWithTitle:@"Welcome"  message:@"Welcome to your iPhone Brandon!"   delegate:nilcancelButtonTitle:@"Thanks"   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中加上如下一行:

WelcomeWagon_FRAMEWORKS = UIKit

7 Building, Packaging, Installing.

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

make, make package,

make package以后就生成了一个deb。

自己拷过去安装吧,当然你的iPhone必须越狱的环境和一些必要的插件。把包拷贝到手机里用dpkg命令安装和卸载。

Dpkg–i

dpkg–r

 

这些成功了吧。:)。

关于ios越狱开发的那些事的更多相关文章

  1. iOS越狱开发(一)

    做越狱开发也有一些时间了,有很多东西想总结一下,希望给他人一些借鉴,也是自己对过去开发经历的一些总结.个人不推荐使用盗版,这里主要以技术介绍为主. 这个系列里面主要介绍怎样进行越狱开发,涉及到以下几个 ...

  2. 【iOS越狱开发】如何将应用打包成.ipa文件

    在项目开发中,我们常常需要将工程文件打包成.ipa文件,提供给越狱的iphone安装. 下面是一种方法: 1.首先应该给工程安装好配置文件(这里不再敖述),在ios device的状态下,运行成功. ...

  3. theos初探:ios越狱开发教程

    开发环境搭建回顾 现在已经在windows上安装好了theos了.在上一篇中都已经讲了,开发环境主要部件就是: 1.theos,主要包含了使用make时的makefile模板文件.包含了各种库和框架的 ...

  4. ios越狱开发第一次尝试记录

    1.THEOS的makefile文件中的THEOS_DEVICE_IP要写在第一行 2.如果make package install报错 dpkg status database is locked ...

  5. IOS越狱开发之——进程通讯

    Mac OS下的IPC方式种类很多,大约有下面几种. 1. Mach API 2. CFMessagePort 3. Distributed Objects (DO) 4. Apple events  ...

  6. iOS越狱开发手记 - iOS9.3 dyld_decache不能提取arm64的dyld的解决方法

    参考以下文章 http://iosre.com/t/when-dyld-decache-fails-on-dyld-shared-cache-arm64-dsc-extractor-saves-our ...

  7. IOS越狱开发错误解决

      Questions: haseScriptExecution Run\ Script /Users/jun/Library/Developer/Xcode/DerivedData/ButtonMa ...

  8. IOS越狱开发环境搭建

    1:安装 mac ports 2:安装DPKG, 在终端输入sudo port -f install dpkg即可安装 3:安装theos Theos是一个基于Make的编译环境,我们正是用它来编译生 ...

  9. ios越狱开发

    theos/Logos常用命令 %hook 用的最多,意思是钩住一个类. %hook SpringBoard %end %new (v@:) 新建方法 v是返回值@代表参数名 %new(v@:@i) ...

随机推荐

  1. BZOJ 2661: [BeiJing wc2012]连连看 费用流

    2661: [BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭 ...

  2. 控制台console输出信息原理理解

    Eclipse控制台输出信息的控制 标签: Eclipse控制台输出信息 2015-01-02 14:11 22454人阅读 评论(1) 收藏 举报  分类: Some Tips(15)  版权声明: ...

  3. 在telnet下操作memcache详解(操作命令详解)

    这篇文章主要介绍了在telnet下操作memcache详解,telnet下的memcache操作命令详解,需要的朋友可以参考下 在定位问题.测试等时候经常需要对memcache的数据进行一些操作,但是 ...

  4. iOS开发--沙盒路径与操作文件

    获取应用沙盒根路径: -(void)dirHome{ NSString *dirHome=NSHomeDirectory(); NSLog(@"app_home: %@",dirH ...

  5. vmware通过vmnet8共享本地网络

    转载于:http://zhaolongchn.blog.163.com/blog/static/19065850420122595117886/ 1,首先将真实电脑的虚拟网卡VMnet8启用 2,然后 ...

  6. sql server UI怎么设置自增加id?

    设置表结构的时候,设置标识列就可以了啊 来自为知笔记(Wiz)

  7. Gravitational Teleport 是一个先进的 SSH 服务器,基于 Golang SSH 构建,完全兼容 OpenSSH

    Gravitational Teleport 是一个先进的 SSH 服务器,可通过 SSH 或者 HTTPS 远程访问 Linux 服务器.其目的是为了替代 sshd.Teleport 可以轻松让团队 ...

  8. 我们为什么需要DTO(数据传输对象)

    原文:http://www.cnblogs.com/Gyoung/archive/2013/03/23/2977233.html DTO即数据传输对象(Data Transfer Object).之前 ...

  9. 【总结】杂谈Java异常处理

    软件开发中一个古老的说法是:80%的工作使用20%的时间.80%是指检查和处理错误所付出的努力.在许多语言中,编写检查和处理错误的程序代码很乏味,并使应用程序代码变得冗长.原因之一就是它们的错误处理方 ...

  10. wait、waitpid 僵尸进程 孤儿进程

    man wait: NAME wait, waitpid, waitid - wait for process to change state SYNOPSIS #include <sys/ty ...