1、开发插件
以腾讯视频为例,给首页添加一个Alert:
#import <UIKit/UIKit.h>
@interface QLHomeController
- (void)presentViewController:(id)arg1 animated: (BOOL)arg2 completion:(id)arg3;
@end
%hook QLHomeController
- (void)viewDidLoad {
%orig;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"Hook" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
});
}
%end
2、脱壳
使用frida-ios-dump将腾讯视频 脱壳,得到.ipa文件:
解压后得到.app包
3、添加必要文件
将embedded.mobileprovision、tweak插件、CydiaSubstrate添加到.app包中
4、处理动态库
4.1、动态库注入
将tweak_test.dylib注入到可执行文件中:
$ insert_dylib @executable_path/tweak_test.dylib live4iphoneRel —all-yes —weak live4iphoneRel
验证:$ otool -L live4iphoneRel
...
@excutable_path/tweak_test.dylib (compatibility version 0.0.0, current version 0.0.0, weak)
4.2、更改动态库加载地址
更改tweak_test.dylib中CydiaSubstrate的引用地址
$ install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/CydiaSubstrate tweak_test.dylib
验证:$ otool -L tweak_test.dylib
...
@loader_path/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
...
5、重签名
5.1、动态库重签名
5.1.1、对tweak_test重签名
$ codesign -fs 21F086108036249F734ED29537C51EB1862233D4 tweak_test.dylib
5.1.2、对CydiaSubstrate重签名
$ codesign -fs 21F086108036249F734ED29537C51EB1862233D4 CydiaSubstrate
5.3、App包重签名
使用iOS App Signer对.app包进行重签名后,就可以安装到非越狱设备上了。
6、安装
6、错误处理
6.1、设备不匹配问题
找到.app包内info.plist文件,删除UISupportedDevices字段:
由于是从iPad中脱壳的.app包,支持的设备都是iPad,所以安装到iPhone上时会失败。