关于ios越狱开发的那些事

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

第一次接触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

 

这些成功了吧。:)。

时间: 2024-10-05 16:40:11

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

iOS越狱开发(一)

做越狱开发也有一些时间了,有很多东西想总结一下,希望给他人一些借鉴,也是自己对过去开发经历的一些总结.个人不推荐使用盗版,这里主要以技术介绍为主. 这个系列里面主要介绍怎样进行越狱开发,涉及到以下几个方面: (1)主要涉及到越狱市场的建立,在App内部实现ipa的安装和卸载以及更新.参照的对象就是91助手,25pp,同步推那样的应用.建立一个盗版的App Store.当然了,如果通过299刀的企业证书的话,是不需要通过Cydia的,直接通过网页链接就可以实现app的推广,有一定的风险.这里面涉及

[iOS越狱开发 之九]使用Theos开发SpringBoard的Tweat

个人原创,转帖请注明来源:cnblogs.com/jailbreaker 前面讲到使用 [iOS越狱开发 之七]使用iOSOpenDev开发SpringBoard的Tweat,非常易用,但必须知道实质还是依靠Theos来创建,所以必须学会用Theos直接创建Tweat. 首先,通过theos/bin/nic.pl生成一个Tweat项目,步骤如下: 1.设置环境变量    export THEOS=/opt/theos 2.终端cd进入打算保存项目的文件夹 3.创建工程,终端输入 $THEOS/b

[iOS越狱开发 之十]dump自己的app

个人原创,转帖请注明来源:cnblogs.com/jailbreaker 之前在[iOS越狱开发 之六]使用class-dump导出Frameworks头文件,通过一个perl脚本来dump出Frameworks的所有头文件,这片帖子主要讲dump一个app的实战,创建一个singleView的app,名称myApp,添加了个MyClass类,立马包含2个方法,一个是在Interface里公开的,另外个方法是非公开的,直接看下图. main.m 里调用公开的showInfo方法(不修改main.

[iOS越狱开发]用theos和iOSOpenDev搭建开发环境

个人原创,转帖请注明来源:cnblogs.com/jailbreaker 越狱开发方法很多,很多比较繁琐,TheOS的出现,可以说是逆天了. TheOS被设计为一个在基于Unix平台(Mac OS X.IOS…)和大多数的Linux平台下开发IOS程序的集成开发环境.说是集成开发环境,其实就是给我们准备好了一些代码模板.预置一些基本的Makefile脚本,我们还是要在Terminal中完成一些关键操作 而iOSOpenDev则集成到xcode里,基于TheOS的开发,编译更方便,不用自己写Mak

ios越狱开发随感

这两天需要看一下某app的view结构,所以需要一些越狱知识,下面对今天的实践做些总结. 越狱开发必须安装,cydia 和iFile,Terminal. Cydia安装越狱插件必备,越狱中的AppStore,iFile文件管理利器,和Mac互传文件,目录管理等.Terminal 就是终端,不过好多命令都没有,今天刚学习越狱第一天没发现什么特别用处,直接用iFile就好了. 附上一篇链接 如何 使用reveal 看其他app view 结构  http://c.blog.sina.com.cn/p

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

在项目开发中,我们常常需要将工程文件打包成.ipa文件,提供给越狱的iphone安装. 下面是一种方法: 1.首先应该给工程安装好配置文件(这里不再敖述),在ios device的状态下,运行成功. 2.选择Product->archive,如下图3.点击Distribute按钮,弹出新窗口,选择Export as Xcode Archive,如下: 4.弹出是否保存,点击save.5.选择生成的文件,xxx 13-5-10 下午4.00.xcarchive,右键点击,选择Show Packag

【iOS越狱开发】怎样将应用打包成.ipa文件

在项目开发中.我们经常须要将project文件打包成.ipa文件.提供给越狱的iphone安装. 以下是一种方法: 1.首先应该给project安装好配置文件(这里不再敖述),在ios device的状态下.执行成功. 2.选择Product->archive,例如以下图 3.点击Distributebutton,弹出新窗体,选择Export as Xcode Archive,例如以下: 4.弹出是否保存,点击save. 5.选择生成的文件,xxx 13-5-10 下午4.00.xcarchiv

[iOS越狱开发 之七]使用iOSOpenDev开发SpringBoard的Tweat

个人原创,转帖请注明来源:cnblogs.com/jailbreaker Tweat可以理解为“外 挂”程序,可以做一些hook,给iOS打补丁的功能,这里我们用iOSOpenDev提供的Logos Tweak模版开发. 这篇blog我们hook的是SpringBoard,简称SB,其是iOS中的桌面管理器,之前的帖子在安装完deb之后,我说重启下设备,实际上指的就是重启SB,头文件:https://github.com/thomasfinch/iOS-7-SpringBoard-Headers

[iOS越狱开发 之八]Thoes的Logos简介

个人原创,转帖请注明来源:cnblogs.com/jailbreaker 上一篇帖子,讲到使用iOSOpenDev开发基于Theos的Tweak,功能Hook了SpringBoard的 -(void)applicationDidFinishLaunching:(id)application. 先简单讲一下Hook,Hook中文翻译为“钩子”,非常形象,以之上一篇帖子为例子,我们借助Substrate来Hook的,iOS设备运行到applicationDidFinishLaunching方法时候,