一、工具集

TrollStore

TrollStore 利用了 iOS 的 AMFI/CoreTrust 漏洞,允许在非越狱的手机上安装自签名的 ipa,并使通过 TrollStore 安装的应用程序能获得更高的权限(如获取手机内的应用列表等)。

版本限制:14.0 beta 2 - 16.6.1, 16.7 RC (20H18), 17.0

根据指引在手机上安装 TrollStore:安装指引

TrollFools

TrollFools 通过 TrollStore 安装手机上,可以对手机上的应用进行动态库注入和重签名。

关键逻辑在 Injector.swift 文件中,原理大致如下:

  1. 对所有的 MachO 文件(包含主程序和注入的动态库)使用 Idid 进行重签名、使用 ChOma 绕过 CoreTrust、使用 chown 修改权限;
  2. 使用 install_name_tool 注入依赖的系统框架,路径为@executable_path/Frameworks
  3. 使用 insert_dylib 注入 LC_LOAD_DYLIB;
  4. 注入完成后对 MachO 文件再进行第 1 步。

Theos 和 Tweak

Theos 是一个强大的开源开发工具链,广泛用于开发 iOS 越狱插件(tweaks)。这些插件可以修改和扩展应用程序的功能。

二、Theos

1、环境

// 项目安装
sudo git clone --recursive https://github.com/theos/theos.git /opt/theos

// 配置环境变量
export THEOS=/opt/theos
export PATH=/opt/theos/bin/:$PATH

环境变量添加到 ~/.zshrc 后需要执行 source ~/.zshrc或者新开终端窗口。

2、创建项目

image

运行 $THEOS/bin/nic.pl 可以运行 theos 的项目创建程序,这里选择 19 创建一个 OC 应用的插件,然后按提示输入信息即可。

3、代码编写

编辑 Tweak.x 文件,添加以下代码

#import <AVFoundation/AVFoundation.h>

%hook AVCaptureVideoDataOutput
- (void)_processSampleBuffer:(CMSampleBufferRef)buffer {
    %orig(buffer);
    NSLog(@"delegate: %@ _processSampleBuffer: %@", [self sampleBufferDelegate], buffer);
}
%end

%hook AVCaptureFigVideoDevice
- (void)setVideoZoomFactor:(CGFloat)factor {
    %orig(factor);
    NSLog(@"Device: %@, Video zoom factor was set to: %f", self, factor);
}
%end

这段代码使用了 Logos 语法 hook 了相机数据输出的方法和设置 Zoom 的接口。

4、引用第三方库

FLEX_ROOT = libs/FLEX

# Function to convert /foo/bar to -I/foo/bar
dtoim = $(foreach d,$(1),-I$(d))

# Gather FLEX sources
SOURCES  = $(shell find $(FLEX_ROOT)/Classes -name '*.c')
SOURCES += $(shell find $(FLEX_ROOT)/Classes -name '*.m')
SOURCES += $(shell find $(FLEX_ROOT)/Classes -name '*.mm')
# Gather FLEX headers for search paths
_IMPORTS  = $(shell /bin/ls -d $(FLEX_ROOT)/Classes/*/)
_IMPORTS += $(shell /bin/ls -d $(FLEX_ROOT)/Classes/*/*/)
_IMPORTS += $(shell /bin/ls -d $(FLEX_ROOT)/Classes/*/*/*/)
_IMPORTS += $(shell /bin/ls -d $(FLEX_ROOT)/Classes/*/*/*/*/)
IMPORTS = -I$(FLEX_ROOT)/Classes/ $(call dtoim, $(_IMPORTS))

$(TWEAK_NAME)_CFLAGS += $(IMPORTS) -g
$(TWEAK_NAME)_CCFLAGS += -std=gnu++11

目前我以源码方式引入第三方库。把第三方库的源文件放到 libs 中,在 Makefile 中添加以上代码。

TODO:Theos 支持以动态库或静态库的方式引入第三方库,因本文的前提是非越狱手机,所以这里应该使用静态库的方式引入,并编译到输出的文件中。

5、编译

编辑 Makefile 文件,添加以下代码,表示项目依赖 AVFoundation 框架。

TestTweak_FRAMEWORKS = AVFoundation

在项目文件夹直接执行 make

如果是越狱手机,可以运行 make do 把插件编译后直接安装到手机上,当然也需要其它的配置,这里先不讨论越狱手机的插件开发。

6、安装

image

arm64 架构的编译产物在路径 .theos/obj/debug/arm64/TestTweak.dylib 中。

把编译产物导入到手机(可用 AirDrop 或数据线导入,存到手机的 Files 中)。

打开已经安装的 TrollFools 应用,选择想要注入动态库的应用(如 BigoLive),选择需要注入的动态库(TestTweak.dylib)。

注入成功后,打开 BigoLive 开始直播,这时候可以从 Mac 上的 Console 查看到相关的打印信息。

7、Demo

https://github.com/oudushu/DSHookTweak

该 Demo 已实现:

  1. 摇一摇呼出选择列表;
  2. 内置 FLEX 工具集;
  3. 内置 LookinServer,可使用 macOS 端的 Lookin 客户端快速查看应用的图层;
  4. 日志写文件,并可把文件通过 AirDrop 分享出来;
  5. 相机相关 hook。

三、总结

我们可以利用以上的工具,做到给非越狱手机安装插件,从而方便地 hook 从 App Store 安装的应用程序。

可以开发通用的插件,做到一个插件适用不同的应用,提高逆向的效率。

缺点:

  1. 非越狱手机上无法调试;
  2. 对 iOS 版本有限制,太新的版本暂不支持。