关于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没有安装,等等各种诡异的问题。新手很是害怕。
自己到官网搜索下载吧:
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 应用程序的例子:
简单的命令,就创建了一个基本的越狱程序firtdemo,它除了常规的文件外,还包含了Makefile,以及control文件(当在Cydia中时,显示的关于程序的信息)。
这样就在当前文件夹下面建立了一个firtdemo的文件夹,里面有些代码的框架了。
那就试试身手吧
在这个demo中,我们将要hook Springboard的init方法,然后在iphone启动时显示一个UIAlertView。这个demo不是最酷的,但是这里所使用的方法和模式,可以用来给任何class的任何method打补丁。如图:
1. 准备工作
你首先还需要下载Saurik的libsubstrate.dylib,然后copy到/opt/theos/lib
2.iOS 头文件
很可能theos本身就自带了你所需要的头文件,但是,如果你编译程序的时候提示你头文件相关的问题,那你就需要准备相关的头文件了。要么从设备上dump头文件,要么google,建议你先google一下,看其他人有没已经提供了这些头文件。
一旦你有这些头文件,记得把它们放在/opt/theos/include。
3. 创建项目
执行 $THEOS/bin/nic.pl
这里,需要选择5,demo例子如下:
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.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越狱开发的那些事的更多相关文章
- iOS越狱开发(一)
做越狱开发也有一些时间了,有很多东西想总结一下,希望给他人一些借鉴,也是自己对过去开发经历的一些总结.个人不推荐使用盗版,这里主要以技术介绍为主. 这个系列里面主要介绍怎样进行越狱开发,涉及到以下几个 ...
- 【iOS越狱开发】如何将应用打包成.ipa文件
在项目开发中,我们常常需要将工程文件打包成.ipa文件,提供给越狱的iphone安装. 下面是一种方法: 1.首先应该给工程安装好配置文件(这里不再敖述),在ios device的状态下,运行成功. ...
- theos初探:ios越狱开发教程
开发环境搭建回顾 现在已经在windows上安装好了theos了.在上一篇中都已经讲了,开发环境主要部件就是: 1.theos,主要包含了使用make时的makefile模板文件.包含了各种库和框架的 ...
- ios越狱开发第一次尝试记录
1.THEOS的makefile文件中的THEOS_DEVICE_IP要写在第一行 2.如果make package install报错 dpkg status database is locked ...
- IOS越狱开发之——进程通讯
Mac OS下的IPC方式种类很多,大约有下面几种. 1. Mach API 2. CFMessagePort 3. Distributed Objects (DO) 4. Apple events ...
- iOS越狱开发手记 - iOS9.3 dyld_decache不能提取arm64的dyld的解决方法
参考以下文章 http://iosre.com/t/when-dyld-decache-fails-on-dyld-shared-cache-arm64-dsc-extractor-saves-our ...
- IOS越狱开发错误解决
Questions: haseScriptExecution Run\ Script /Users/jun/Library/Developer/Xcode/DerivedData/ButtonMa ...
- IOS越狱开发环境搭建
1:安装 mac ports 2:安装DPKG, 在终端输入sudo port -f install dpkg即可安装 3:安装theos Theos是一个基于Make的编译环境,我们正是用它来编译生 ...
- ios越狱开发
theos/Logos常用命令 %hook 用的最多,意思是钩住一个类. %hook SpringBoard %end %new (v@:) 新建方法 v是返回值@代表参数名 %new(v@:@i) ...
随机推荐
- BZOJ 2661: [BeiJing wc2012]连连看 费用流
2661: [BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭 ...
- 控制台console输出信息原理理解
Eclipse控制台输出信息的控制 标签: Eclipse控制台输出信息 2015-01-02 14:11 22454人阅读 评论(1) 收藏 举报 分类: Some Tips(15) 版权声明: ...
- 在telnet下操作memcache详解(操作命令详解)
这篇文章主要介绍了在telnet下操作memcache详解,telnet下的memcache操作命令详解,需要的朋友可以参考下 在定位问题.测试等时候经常需要对memcache的数据进行一些操作,但是 ...
- iOS开发--沙盒路径与操作文件
获取应用沙盒根路径: -(void)dirHome{ NSString *dirHome=NSHomeDirectory(); NSLog(@"app_home: %@",dirH ...
- vmware通过vmnet8共享本地网络
转载于:http://zhaolongchn.blog.163.com/blog/static/19065850420122595117886/ 1,首先将真实电脑的虚拟网卡VMnet8启用 2,然后 ...
- sql server UI怎么设置自增加id?
设置表结构的时候,设置标识列就可以了啊 来自为知笔记(Wiz)
- Gravitational Teleport 是一个先进的 SSH 服务器,基于 Golang SSH 构建,完全兼容 OpenSSH
Gravitational Teleport 是一个先进的 SSH 服务器,可通过 SSH 或者 HTTPS 远程访问 Linux 服务器.其目的是为了替代 sshd.Teleport 可以轻松让团队 ...
- 我们为什么需要DTO(数据传输对象)
原文:http://www.cnblogs.com/Gyoung/archive/2013/03/23/2977233.html DTO即数据传输对象(Data Transfer Object).之前 ...
- 【总结】杂谈Java异常处理
软件开发中一个古老的说法是:80%的工作使用20%的时间.80%是指检查和处理错误所付出的努力.在许多语言中,编写检查和处理错误的程序代码很乏味,并使应用程序代码变得冗长.原因之一就是它们的错误处理方 ...
- wait、waitpid 僵尸进程 孤儿进程
man wait: NAME wait, waitpid, waitid - wait for process to change state SYNOPSIS #include <sys/ty ...