一、工具集
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
文件中,原理大致如下:
- 对所有的 MachO 文件(包含主程序和注入的动态库)使用 Idid 进行重签名、使用 ChOma 绕过 CoreTrust、使用 chown 修改权限;
- 使用 install_name_tool 注入依赖的系统框架,路径为
@executable_path/Frameworks
; - 使用 insert_dylib 注入 LC_LOAD_DYLIB;
- 注入完成后对 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、创建项目
运行 $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、安装
arm64 架构的编译产物在路径 .theos/obj/debug/arm64/TestTweak.dylib
中。
把编译产物导入到手机(可用 AirDrop 或数据线导入,存到手机的 Files 中)。
打开已经安装的 TrollFools 应用,选择想要注入动态库的应用(如 BigoLive),选择需要注入的动态库(TestTweak.dylib)。
注入成功后,打开 BigoLive 开始直播,这时候可以从 Mac 上的 Console 查看到相关的打印信息。
7、Demo
https://github.com/oudushu/DSHookTweak
该 Demo 已实现:
- 摇一摇呼出选择列表;
- 内置 FLEX 工具集;
- 内置 LookinServer,可使用 macOS 端的 Lookin 客户端快速查看应用的图层;
- 日志写文件,并可把文件通过 AirDrop 分享出来;
- 相机相关 hook。
三、总结
我们可以利用以上的工具,做到给非越狱手机安装插件,从而方便地 hook 从 App Store 安装的应用程序。
可以开发通用的插件,做到一个插件适用不同的应用,提高逆向的效率。
缺点:
- 非越狱手机上无法调试;
- 对 iOS 版本有限制,太新的版本暂不支持。