越狱开发环境配置(2017.2)
自从iOS9之后,越狱的用户越来越少,相应的从事iOS越狱开发的人员也越来越少,曾经的比较流行的教程也有过时的现象产生.
因为公司业务要求,最近开始牵涉到一些iOS越狱开发领域,就整理了一些坑点,方便以后自己再掉进去.
以下内容采用了不少该网址的内容,在此表示感谢!
https://github.com/yohunl/FlexInjected/tree/14137c231e94e881c603c83d91fe4fb20700292b
Theos 安装
Thoes介绍
TheOS被设计为一个在基于Unix平台开发IOS程序的集成开发环境,它给我们准备好了一些代码模板、预置一些基本的Makefile脚本,这样我们开发一个tweak就会变得方便的多,这里我们不说简单的多,是因为其配置还是稍显繁琐的,并且,也不能像我们通常开发xcode工程那样方便的调试.
Thoes的安装
1.可以使用git命令将Theos环境下载下来(如果没有权限,前面加上sudo),Theos是放在gitHub上的,使用git命令clone下来很方便,这里注意一点虽然可以放在任意目录下面,但是官方建议大家放在/opt/下.可以打开"终端"输入 export THEOS=/opt/theos #这个是建立一个环境变量方便后面的操作(引用这个环境变量是用$THEOS),
这种建立环境变量的方式,只是在当前终端中起作用了,关闭终端后又得重新设置,为了避免每次都建立这个环境变量,我们可以建立一个永久的环境变量
编辑~/.profile文件,在其中添加export THEOS=/opt/theos/,这个环境变量就是永久的了. ps:怎么查看定义了哪些环境变量呢? 终端中输入命令env!
git clone --recursive https://github.com/theos/theos.git $THEOS
坑点从这里开始,之前老的教程比如《iOS应用逆向工程》一书中需要我们配置CydiaSubstrate.framework,书中需要我们运行bootstrap.sh脚本并且需要我们从手机上拷贝等方式获得该文件.而最新版的已经没有这个bootstrap.sh脚本文件了,并且已经集成了最新的cydia Substrate,在目录Vendor/lib下 这里的cydia使用的是framework模式了。
2.配置用来签名的ldid,用来在越狱的iOS中取代Xcode自带的codeSign。
brew install ldid
3.配置dpkg-deb 新版的Theos,并没有内置 dpkg-deb,需要用brew来安装dpkg
brew install dpkg
注意这里隐藏了两个坑,待会讲解。
Thoes的使用
首先创建一个简单的demo来实(cai)验(keng)下
$THEOS/bin/nic.pl
会出现以下界面
NIC 2.0 - New Instance Creator
------------------------------
[1.] iphone/activator_event
[2.] iphone/application_modern
[3.] iphone/cydget
[4.] iphone/flipswitch_switch
[5.] iphone/framework
[6.] iphone/ios7_notification_center_widget
[7.] iphone/library
[8.] iphone/notification_center_widget
[9.] iphone/preference_bundle_modern
[10.] iphone/tool
[11.] iphone/tweak
[12.] iphone/xpc_service
Choose a Template (required):
只要出现了以上界面那么说明目前都是正常的(还没到坑)
之后是一些和以前教程里面一样的一些信息的填写以及四个文件内容的操作,我这里不再赘述,主要讲坑。坑主要出现在现在Theos不再内置dpkg-deb,两个大坑都在这。
在我们使用一下命令打包文件并安装的时候
make package install
第一次会报以下错误
> Making all for tweak testOne…
make[2]: Nothing to be done for `internal-library-compile'.
> Making stage for tweak testOne…
dpkg-deb: error: obsolete compression type 'lzma'; use xz instead
Type dpkg-deb --help for help about manipulating *.deb files;
Type dpkg --help for help about installing and deinstalling packages.
make: *** [internal-package] Error 2
我查找了一些资料后发现,这个错误是dpkg的锅,随着版本的升级,打包格式发生了变化
dpkg-deb: error: obsolete compression type 'lzma'; use xz instead
解决方案是按以下路径找到该文件修改其内容
/opt/theos/makefiles/package/deb.mk
找到第六行
_THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= lzma
将其改为
_THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= xz
好了接下来我们继续打包安装,和刚才一样输入:
make package install
在输入一次root密码之后出现以下内容:
(Reading database ... 4630 files and directories currently installed.)
Preparing to replace firsttest 0.0.1-23+debug (using /tmp/_theos_install.deb) ...
Unpacking replacement firsttest ...
dpkg-deb: file `/tmp/_theos_install.deb' contains ununderstood data member data.tar.xz , giving up
dpkg: error processing /tmp/_theos_install.deb (--install):
subprocess dpkg-deb --fsys-tarfile returned error exit status 2
Errors were encountered while processing:
/tmp/_theos_install.deb
make: *** [internal-install] Error 1
重点在这一句:
dpkg-deb: file `/tmp/_theos_install.deb' contains ununderstood data member data.tar.xz , giving up
看到了吧,又是dpkg的锅,我拿梯子出去查了查说是因为dpkg升级后的压缩格式问题,原网址在这:
http://stackoverflow.com/questions/21013325/dpkg-error-contains-ununderstood-data-member
上面要求的替换内容是
$(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)
那么问题来了,你会发现你没有找到之前的你只有这个:
$(ECHO_NOTHING)COPYFILE_DISABLE=1 $(FAKEROOT) -r $(_THEOS_PLATFORM_DPKG_DEB) -Z$(_THEOS_PLATFORM_DPKG_DEB_COMPRESSION) -b "$(THEOS_STAGING_DIR)" "$(_THEOS_DEB_PACKAGE_FILENAME)"$(ECHO_END)
解决方案是,恩,管它呢长得像也一样干掉,我的做法就是把上面的替换成中间的哪一行。
然后再使用
make package install
接下来你就会发现一切运转正常了!
附带一张我写的demo成功的图片:
本人也是刚接触越狱开发不久,各位如果对越狱开发感兴趣可以联系我大家一起交流!