iOS逆向之theos的安装使用

2021-03-30  本文已影响0人  张聪_2048

一、theos 安装

1、安装签名工具ldid

首先先确保安装了Homebrew 。如未安装,可通过下面指令安装

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

使用Homebrew安装ldid

brew install ldid

2、修改环境变量

1)编辑用户的配置文件
vim ~/.bash_profile
2)在.bash_profile文件后面加入以下2行
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH

提示
export THEOS=~/theos 配置 theos 的主路径,将来下载到哪个地方,下面 2.2 我们可以看到
export PATH=$THEOS/bin:$PATH 的目的是为了在任何路径下都可以找到 ~/theos/bin 下面的命令,如下面用到的 nic.pl
$PATH就是引用环境变量的值

3)让.bash_profile配置的环境变量立即生效(或者重新打开终端)
source ~/.bash_profile

注意
可能不起作用,原因是 mac下采用zsh代替bash,而zsh加载的是 ~/.zshrc文件,而 ‘.zshrc’ 文件中并没有定义任务环境变量。
解决办法,在~/.zshrc文件最后,增加一行:source ~/.bash_profile。这样加载/.zshrc的同时也能加载/.bash_profile文件
查看系统有几个shell: cat /etc/shells。切换到zsh:chsh -s /bin/zsh。查看默认shell:echo $SHELL

3、下载theos

建议在$PATH目录下载代码(也就是上一步配置的~/theos目录)

git clone --recursive https://github.com/theos/theos.git $THEOS
图1:theos 安装配置.png

二、theos 的使用

1、新建tweak项目

1)cd到一个存放项目代码的文件(比如桌面),使用nic.pl新建
$ cd ~/Desktop
$ nic.pl
2)选择 iphone/tweak
图2:新建tweak项目.png
3)填写项目信息

2、编辑Makefile

1)在前面加入环境变量,写清楚通过哪个IP和端口访问手机
# 调试设备的IP地址和端口
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=10010

TARGET := iphone:clang:latest:7.0
INSTALL_TARGET_PROCESSES = SpringBoard

# 引入常用的一般模板
include $(THEOS)/makefiles/common.mk

# 工程名称
TWEAK_NAME = douban_tweak

# sdk中的framework
douban_tweak_FRAMEWORKS = UIKit, Foundation
douban_tweak_FILES = Tweak.x
douban_tweak_CFLAGS = -fobjc-arc

include $(THEOS_MAKE_PATH)/tweak.mk
2)环境变量配置

如果不希望每个项目的Makefile都编写IP和端口环境变量,也可以添加到用户配置文件中。如上文中的THEOS文件目录配置。编辑完毕后,$ source ~/.bash_profile让配置生效(或者重启终端)

$ vim ~/.bash_profile
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=10010
$ source ~/.bash_profile

3、编写代码

打开 Tweak.x 并编写,目的是在“豆瓣”登录页面,添加弹框和一个红色视图


// 需要引入对应的库
#import <UIKit/UIKit.h>

// 需要定义一下需要hook的类,避免找不到“self”
@interface FRDNormalLoginViewController : UIViewController

@end

%hook FRDNormalLoginViewController

- (void)viewDidLoad {
    %orig; 

        // 添加弹框
      UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"我是标题" message:@"Hook测试内容" preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:nil]];
    [self presentViewController:alert animated:YES completion:nil];
    
    // 添加红色view
    UIView *view = [[UIView alloc] init];
      view.frame = CGRectMake(100, 100, 100, 100);
      view.backgroundColor = [UIColor redColor];
      [[self view] addSubview:view];
}

%end

4、编译-打包-安装

图3:编译-打包-安装.png
1)编译
make

该步骤,主要是将Tweak代码编译成动态库(*.dylib),编译的过程中可能会有错误,有错误不用怕,根据错误提示信息修改下就好了,也可以完成搜搜。可能会出现以下错误:

解决方案:把/opt/theos/vendor/lib/CydiaSubstrate.framework/CydiaSubstrate.tbd文件用文本打开,用Sublime Text3,删除archs后面的两项(, i386, x86_64),就可以编译成功了。
参考链接:https://www.jianshu.com/p/060be025eb13

解决方案:需要引入 UIKit,如 #import <UIKit/UIKit.h>
参考链接:https://www.jianshu.com/p/6fa6dd6276f7

解决方案:

// 需要定义一下需要hook的类,避免找不到“self”
@interface FRDNormalLoginViewController : UIViewController

@end

参考链接:https://www.jianshu.com/p/899faeb834eb

解决方案:在 Makefile文件中添加 douban_tweak_FRAMEWORKS = UIKit, Foundation
参考链接:https://iosre.com/t/theos-make/8193

2)打包成deb
make package

make package 是将dylib打包为deb文件

解决方案,安装一下 xz 及可,brew install xz
参考链接:https://stackoverflow.com/questions/53500472/open2-exec-of-lzma-c0-failed-a-internal-package-error-2-while-building-in-theo

3)安装(默认会自动重启SpringBoard)
make install

将deb文件传送到手机上,通过Cydia安装deb。注意连接的地址和端口号是否正确,及plist文件中的bundlId是否正确。

插件将会安装在/Library/MobileSubstrate/DynamicLibraries文件夹中。 *.dylib :编译后的Tweak代码;*.plist:存放着需要hook的APP ID。

当打开app时,Cydia Substrate (Cydia已自动安装的插件)会让APP去加载对应的dylib;修改APP内存中的代码逻辑,去执行dylib中的函数代码。所以theos的tweak并不会对APP原来的可执行文件进行修改,仅仅是修改内存中的代码逻辑。

图4:tweak安装原理.png

三、theos拓展学习

1、theos- tweak的开发过程

图5:theos- tweak的开发过程.png

2、theos资料查询

上一篇 下一篇

猜你喜欢

热点阅读