昨天开始安装theos,网上资料好多,不知是好还是不好,开始根据【ios应用逆向工程的书】安装,发现已经过时。。然后各种百度,遇到很多坑,都不知从何说起~
先将参考链接附到下面供参考:
http://blog.csdn.net/woaizijiheni/article/details/49332851
http://www.cnblogs.com/ludashi/p/5714095.html
https://my.oschina.net/iq19900204/blog/618713
一、下面分享下环境搭建过程:
1、给xcode安装 command line tools
https://developer.apple.com/downloads/?=Command%20Line%20Tools%20
2、安装dpkg、ldid
sudo brew install dpkg ldid
有些推荐用macports安装dpkg,我安装了macports,发现安装过程比较复杂,坑比较多,不是很推荐。
3、下载libsubstrate.dylib 拷贝到 /opt/theos/lib
https://github.com/kokoabim/iOSOpenDev/blob/master/lib/libsubstrate.dylib
4、Theos安装
git clone --recursive https://github.com/theos/theos.git
下载好Theos后,要修改一下文件的权限,如下命令
sudo chown $(id -u):$(id -g) theos
至此,Theos安装完毕,就可以开启你的Theos之旅了。(希望你也如此)
二、使用Theos创建、编译、安装使用工具
上面我们搭建好Theos的环境后,接下来就开始使用我们的Theos来做些事情了。接下来我们将要使用Theos来创建一个使用工具,并进行编译,编译后安装到我们的越狱手机上。接下来来看一下这一系列的步骤
1.配置$THEOS
export THEOS=theos文件所在路径
例如:
export THEOS=/opt/theos
2.新建工程
用终端cd到你工程文件夹下,
$THEOS/bin/nic.pl
有12个模版,我们直接建tweak,选11,之后按照提示填写就好,⚠️尽量不要用字母和+-号之外的符号,否则后面编译有可能报错。
3、编译打包前的准备工作
export SDKVERSION=9.3
export THEOS_DEVICE_IP=ios_device_ip
接着我们要做一些编译打包前的准备工作,SDKVERSION是编译工程时所使用的SDK,因为本机Xcode中是9.3的SDK,所以我们知道的SDKVERSION是9.3。指定完编译所需的SDK后,我们需要指定打包后的文件所安装设备的IP地址,使用THEOS_DEVICE_IP来指定。下方的IP地址是一个越狱手机的IP地址。
我感觉直接写到Makefile文件中也是可以的。
在指定这个设备IP之前,你要保证你的越狱设备安装了OpenSSH,并且可以在Mac的终端上进行ssh登录。
mac连接iphone,在终端输入
ssh [email protected]
之后让输入密码,密码默认alpine,可以连接就ok.
2.创建成功后,在工程目录下,修改MakeFile 修改添加头部
THEOS_DEVICE_IP=192.168.30.xx
ARCHS = armv7 arm64
TARGET = iphone:latest:8.0
THEOS_DEVICE_IP = 192.168.30.xx
3.编写TWeak.xm文件代码
%hook SBLockScreenDateViewController //需要hook的头文件,以%end结尾,以下方法就是我们要挂钩子的方法
- (void)setCustomSubtitleText:(id)arg1 withColor:(id)arg2{
//%orig;执行该方法原始代码,如果去掉就执行了.还可以修改原始参数;
%orig(@"iOS 8 App Reverse Engineering", arg2);
NSLog(@"askMe:reboot springBoard");
}
%end
%hook SpringBoard
- (void)applicationDidFinishLaunching:(id)application{
%orig;
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"Welcome" message:@"HelloWorld!" delegate:nil cancelButtonTitle:@"Thanks" otherButtonTitles:nil];
[alert show];
[alert release];
NSLog(@"askMe:CheckID starting!");
}
%end
4.进行编译
make
5.进行打包
make package
编译完成后,我们要讲项目进行打包,这样我们的越狱设备才能进行安装。下方是调用make package命令进行项目的打包。打包后会生成后缀名为deb的安装包。
$6.安装
make install
手机重启之后,是不是多了一个alertView,锁屏界面的日期是不是变成了"iOS 8 App Reverse Engineering"
坑一:
一般情况下会安装失败 ,错误是:
解决的办法是:
https://github.com/moloch--/theos/blob/master/makefiles/package/deb.mk
下载下来替换到目录
/opt/theos/makefiles/package/
坑二:
如果报以下错误
下载dm.pl文件
https://raw.githubusercontent.com/DHowett/dm.pl/master/dm.pl
然后重命名为dpkg-deb.pl,放到目录下面
/opt/theos/bin/
坑三:
如果还是报错:
参考
http://stackoverflow.com/questions/21013325/dpkg-error-contains-ununderstood-data-member
我虽然没找到一模一样的那行,但是我把
$(ECHO_NOTHING)COPYFILE_DISABLE...这行直接换成
$(ECHO_NOTHING)COPYFILE_DISABLE=1 $(FAKEROOT) -r dpkg-deb -Zgzip -b "$(THEOS_STAGING_DIR)" "$(_THEOS_DEB_PACKAGE_FILENAME)" $(STDERR_NULL_REDIRECT)$(ECHO_END)
就好了。
坑四:
记得还报了一个错,
Obsolete compression type ‘lzma’; use xz instead
解决办法:
修改
opt/theos/makefiles/package/deb.mk
第六行:THEOSPLATFORM_DPKG_DEB_COMPRESSION ?= lzma
把最后lzma 改成 xz 就可以了
但是如果坑一填了(deb.mk都换了)好像就解决这个问题了。
ps.......关于输入密码太麻烦一事请移驾
http://www.jianshu.com/writer#/notebooks/7512122/notes/7503499