您的位置:首页 > 移动开发 > IOS开发

iOS逆向教程 2.1 Theos的安装及用法

2017-07-02 15:32 471 查看

一、 Theos简介

Theos是一个越狱开发工具包,是iOS逆向开发的开发工具。iOS逆向开发还有另外一款开发工具:iOSOpenDev, 这款工具集成在XCode中,对于熟悉XCode的小伙伴来说,会更喜欢用iOSOpenDev来进行逆向开发。但是目前iOSOpenDev不再进行更新了,安装起来比较麻烦。另外,逆向工程接触底层的知识比较多,很多东西无法自动化,使用整合度不高的Theos,会对逆向工程理解的更为深刻。

二、 安装Theos

网上大多的教程 (包括《iOS应用逆向工程》一书中)都是基于原作者两年前的原始theos来配置环境的,原始的配置环境的方式相对来说比较繁琐。这里,我来介绍一下最新的theos环境配置。

2.1 下载Theos

2.1.1 指定Theos的安装路径

Theos是放在github上的,使用git命令来clone比较方便。虽然可以放在任何目录下,但是官方建议大家放在 /opt/下 。打开Mac的终端,输入命令行:

export THEOS=/opt/theos


2.1.2 下载theos到指定的目录

上一步,我们已经配置了一个环境变量,现在我们将theos下载到指定的目录,输入命令行:

git clone --recursive https://github.com/theos/theos.git $THEOS


下载完毕之后,如下图所示:



新版Theos的已内置CydiaSubstrate.framework,所以不需要像网上其它教程中说的需要运行bootstrap.sh脚本或者是从手机上拷贝等方式。

2.2 配置Idid

Idid用来专门签名iOS可执行文件的工具,用以在越狱iOS中取代Xcode自带的codesign。如果不安装,那么产生的deb文件就安装不到手机上。安装ldid,推荐的方式是采用brew来安装,在终端输入命令行:

brew install ldid


2.3 配置dpkg-deb

deb是越狱开发包的标准格式,dpkg-deb是个用于操作deb文件的工具,有了这个工具,Theos才能正确的把工程打包成deb文件。同样的,我们采用brew来安装,在终端输入命令行:

brew install dpkg


至此,我们已经完成了Theos的配置了,下面我们新建一个工程,来检验Theos是否配置成功。

三、 Theos的用法介绍

3.1 新建一个工程

打开终端,先cd到你想要存放新工程的目录位置下,然后输入新建工程的命令:

/opt/theos/bin/nic.pl


之后,终端会显示12中模版供你选择,如下图所示:



我们选择第11个模版:iphone/tweak , 在终端上输入:11

选择好我们需要的模版之后,然后就想Xcode新建工程一样,需要输入项目的名称、作者、BundleId 之类的信息。

3.1.1 输入tweak的工程名,命令如下:

Project Name (required): iOSREProject(输入你自己的工程名)


3.1.2 输入deb包的名字(类似于bundle identifier),命令如下:

Package Name [com.yourcompany.iosreproject]:com.iosreproject


3.1.3 输入tweak作者的名字,命令如下:

Author/Maintainer Name [yuancan]:YuanCan


3.1.4 输入tweak可以作用的对象的bundle identifier,也就是你需要hook的App的bundle Id,比如微信的bundle Id :com.tentcent.xin

[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.tentcent.xin


3.1.5 输入tweak安装完成后需要重启的应用,以进程名表示,比如微信:

[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: WeChat


这五个步骤完成之后,一个名为iosreproject的文件夹就在指定的文件目录下生成了,如下图所示:



3.2 工程目录下文件介绍

新建一个工程之后,会生成四个文件:control、plist、Makefile、Tweak.xm,这几个文件分别有什么用呢?

3.2.1 control文件

Package: com.yourcompany.iosreproject
Name: iosreproject
Depends: mobilesubstrate
Version: 0.0.1
Architecture: iphoneos-arm
Description: An awesome MobileSubstrate tweak!
Maintainer: YuanCan
Author: YuanCan
Section: Tweaks


control文件主要是项目有关的信息,比如项目的名称、版本、开发者等信息,这个文件时系统自动生成的,如果没有特殊的情况,我们不需要去更改这个文件的内容。

3.2.2 plist文件



plist文件的作用主要是设置需要被逆向的app的bundle Id,如果需要逆向多个APP,就在Bundles数组中添加其bundle Id。

3.2.3 Makefile文件

include $(THEOS)/makefiles/common.mk

TWEAK_NAME = iosreproject
iosreproject_FILES = Tweak.xm
iosreproject_FRAMEWORKS = UIKit

include $(THEOS_MAKE_PATH)/tweak.mk

after-install::
install.exec "killall -9 SpringBoard"


Makefile文件主要是设置工程需要用到的文件、框架、库等信息。

iosreproject_FILE设置工程需要引用的文件,如果你还需要加入一些自己写的文件,多个文件之间以空格分隔:

iosreproject_FILES = Tweak.xm MyClass1.m MyClass2.m


iosreproject_FRAMEWORKS设置工程需要引用的第三方库,多个库之间以空格分隔:

iosreproject_FRAMEWORKS = UIKit UIFoundation


3.2.4 Tweak.xm文件

这个文件就是我们进行逆向开发编写代码的地方。

四、 Theos的编译及安装

iOS app的开发,可以用Xcode之间进行编译,编译之后可以在模拟器上运行,也可以在真机上运行。逆向开发编译之后,需要安装在越狱的iphone手机上。theos编译之后,会生成一个deb的包,你可以理解为这是一个插件的安装包,就类似于app的安装包为ipa。deb安装到手机上面,有两种方法:通过iFile进行安装或者通过SSH进行安装。

4.1 通过iFile安装deb

图形方式,使用iTools等工具将这个deb包拷贝到手机中,利用iFile浏览到此文件,进行安装。

4.2 通过SSH安装deb

需要使用到openssh服务,确保你手机上已经安装了该服务(cydia中搜索安装)。要安装 openssh 首先需要将设备越狱。越狱完成之后,就可以在 Cydia 中直接查找和安装 OpenSSH。这种安装方式需要在Makefile文件的首行添加你手机设备的IP地址,如下:

HEOS_DEVICE_IP = 172.168.1.100


安装的时候得保证你的 iOS 设备和 Mac 在同一局域网的同一网段中。

打开终端,先cd到你工程的目录下,然后输入编译安装的命令:

make package install


五、常见问题

1、编译之后找不到生成的dylib文件

我之前用的是老版本的方法安装的Theso, 每次编译之后都会生成一个对应的dylib文件,但是用了新版本的方法安装之后,却找不到了。折腾了一番,后面发现其实这个文件是生成了的,只是被隐藏了。

mac 显示隐藏文件

打开终端,输入:
defaults write com.apple.finder AppleShowAllFiles -bool true       此命令显示隐藏文件
defaults write com.apple.finder AppleShowAllFiles -bool false      此命令关闭显示隐藏文件

命令运行之后需要重新加载Finder:快捷键option+command+esc,选中Finder,重新启动即可


六、总结

这篇教程主要讲述了如何配置theos环境、以及如何用theos新建工程和如何编译安装deb。theos这个工具没有Xcode那么自动化,很多东西需要自己手动配置。如果theos配置和theos编译安装过程中失败了,多试几次。就算成功了,也需要多练习几次,多练几遍自然就熟了。如果遇到了自己无法解决的问题,可以添加下面的QQ群,进行咨询。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息