1、开发插件

以腾讯视频为例,给首页添加一个Alert:

  1. #import <UIKit/UIKit.h>
  2. @interface QLHomeController
  3. - (void)presentViewController:(id)arg1 animated: (BOOL)arg2 completion:(id)arg3;
  4. @end
  5. %hook QLHomeController
  6. - (void)viewDidLoad {
  7. %orig;
  8. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  9. UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"Hook" preferredStyle:UIAlertControllerStyleAlert];
  10. [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];
  11. [self presentViewController:alert animated:YES completion:nil];
  12. });
  13. }
  14. %end

2、脱壳

使用frida-ios-dump将腾讯视频 脱壳,得到.ipa文件:
截屏2022-06-08 21.34.11.png
解压后得到.app包
截屏2022-06-08 21.34.30.png

3、添加必要文件

将embedded.mobileprovision、tweak插件、CydiaSubstrate添加到.app包中
截屏2022-06-08 21.35.36.png

4、处理动态库

4.1、动态库注入

将tweak_test.dylib注入到可执行文件中:
$ insert_dylib @executable_path/tweak_test.dylib live4iphoneRel —all-yes —weak live4iphoneRel
验证:$ otool -L live4iphoneRel

  1. ...
  2. @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

  1. ...
  2. @loader_path/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
  3. ...

更改成功!

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、安装

利用Xcode将重签名后的.ipa文件安装到非越狱设备:
image.png

6、错误处理

6.1、设备不匹配问题

截屏2022-06-08 21.48.30.png
找到.app包内info.plist文件,删除UISupportedDevices字段:
截屏2022-06-08 21.42.15.png

由于是从iPad中脱壳的.app包,支持的设备都是iPad,所以安装到iPhone上时会失败。