iOS逆向之theos安装与使用

2022-05-19 13:58:05 浏览数 (1)

theos是iOS系统越狱插件开发的集成环境。在mac电脑中安装配置好theos后,就可以根据需求通过theos创建相应的插件工程对iOS app进行hook。

一、theos安装及环境配置

  1. 设置theos存放目录,在终端输入如下命令 export THEOS=/opt/theos
  2. 下载theos到设置的目录中,在终端输入如下命令
  3. git clone https://github.com/theos/theos.git $THEOS
  4. 安装插件工程需要的工具ldid及dpkg,在终端输入如下命令 brew install ldid (用于签名iOS可执行文件,在越狱iOS中取代Xcode自带的codesign) brew install dpkg-deb(新版的theos没有内置dpkg-deb,需要自己安装dpkg-deb。dpkg-deb是操作deb文件的工具,theos通过它将插件工程进行打包成deb文件)

二、创建插件工程测试

这里以创建一个hook iOS设备中的桌面程序SpringBoard为例,在终端输入如下命令

选择 10 按回车键后,创建tweak工程,用于hook iOS app。

工程开始创建,要求我们填入要创建的插件工程的项目名,这里填写 iosregreetings,如下图所示(项目名可以根据需要任意填)

填写插件工程的包名,这里填写 com.test.iosregreetings,如下图所示(包名也可以根据需要任意填)

填写插件工程的作者名,这里填写testTheos,如下图所示(作者名也可以根据需要任意填)

填写插件工程要hook的iOS app的Bundle identifier,我们要hook的iOS app是SpringBoard,它的Bundle identifier是 com.apple.springboard,因此这里填写的Bundle identifier是 com.apple.springboard,如下图所示(具体要hook哪个iOS app就填写对应的Bundle identifier)

填写插件工程要hook的iOS app的进程名字,如下图所示(填写进程名字目的是为了当我们要hook的时候,先杀掉它,让它重新启动后能够调用到我们hook的函数,达到我们要的目的)

最后,成功创建了一个插件工程,如下图所示(接下去就可以根据我们需要开始编写插件代码,代码可直接在Tweak.x中编写,或者新建一个src目录,将代码文件放入其中)

如我们要hook SpringBoard,让它弹出一个窗口,以及打印出日志,则在Tweak.x中写入我们的hook代码如下所示

代码语言:javascript复制
#import <UIKit/UIKit.h>
%hook SpringBoard
-(void)applicationDidFinishLaunching:(id)application{
    %orig;
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"welcome" message:@"hellowrold" delegate:nil cancelButtonTitle:@"thanks" otherButtonTitles:nil];
    [alert show];
    [alert release];
    NSLog(@"SpringBoard is hooked");
}
%end

写完代码后,则需要修改一下目录中的Makefile配置文件,填写我们iOS设备的IP、port,引用的FRAMEWORKS及代码文件名称,如下所示

代码语言:javascript复制
THEOS_DEVICE_IP = 127.0.0.1
THEOS_DEVICE_PORT = 2222
ARCHS = armv7 arm64
TARGET = iphone:latest:8.0
include $(THEOS)/makefiles/common.mk

TWEAK_NAME = iOSREGreetings
iOSREGreetings_FILES = Tweak.xm
iOSREGreetings_FRAMEWORKS = UIKit
include $(THEOS_MAKE_PATH)/tweak.mk
        
after-install::
        install.exec "killall -9 SpringBoard"

配置完Makefile后,终端切换到插件工程的根目录中,开始编译插件工程,在终端输入编译指令

log日志的话,可以通过 idevicesyslog 进行查看。

0 人点赞