需要付费账号
付费账号创建的配置文件,命名为embedded.mobileprovision(appId、device必须匹配),将该配置文件放入.app包中。
- 通过Xcode自动生成,然后编译之后,在xxx.app的包中找到该配置文件。
- 或者去开发者中心去配置下载。
从配置文件embedded.mobileprovision中 提取entitlements.plist权限文件
- security cms -D -i embedded.mobileprovision > temp.plist
- /usr/libexec/PlistBuddy -x -c 'Print:Entitlements' temp.plist > entitlements.plist
复制相关文件到.app中
- 将苹果开发者平台生成的embedded.mobileprovision复制到.app文件中
- 如果通过Theos开发的动态库插件xxx.dylib,则需要把xxx.dylib和CydiaSubstrate文件复制到.app中
动态库的路径为/Device/Library/MobileSubstrate/DynamicLibraries/xxx.dylib
CydiaSubstrate文件可从越狱手机中找到,路径为/Device/library/Frameworks/CydiaSubstrate.frame/CydiaSubstrate
注入动态库
https://github.com/Tyilo/insert_dylib
使用insert_dylib库将动态库注入要mach-O文件中
用法
- insert_dylib 动态库加载路径 Mach-O文件
- 2个常用的参数选项
--weak,即使动态找不到也不会报错
--all-yes,后边所有的选择均为yes
- insert_dylib的本质是往Mach-O文件的Load Commands中添加一个LC_LOAD_DYLIB或者LC_LOAD_WEAK_DYLIB
- 可以通过otool查看Mach-O的动态库依赖信息
otool -L Math-O文件
例子:
insert_dylib @executable_path/WeChatBackTweak.dylib WeChat --all-yes --weak WeChat
更改动态库加载地址
- 可以使用install_name_tool修改Mach-O文件中的动态库的加载地址
install_name_tool -change 旧地址 新地址 Mach-O文件
- 通过Theos开发的动态库插件(dylib)
默认都依赖于/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate
如果要将动态库插件打包到ipa中,也需要将CydiaSubstrate打包到ipa中,需要修改CydiaSubStrate的加载地址
install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/CydiaSubstrate WeChatBackTweak.dyli
2个常用环境变量
@executable_path代表可执行文件所在的目录
@loader_path代表动态库所在的目录
查看可用的证书
- security find-identity -v -p codesigning
- 记录 证书ID
对.app内部的动态库、AppExtension等进行签名
- codesign -fs 证书ID xxx.dylib
- 包括新加入的动态库和CydiaSubstrate
- codesign -fs *** wechatUnread.dylib
codesign -fs *** CydiaSubstrate
对.app包进行签名
codesign -fs 证书ID --entitlements entitlements.plist xxx.app
或者用重签名GUI工具
- iOS App Signer
https://github.com/DanTheMan827/ios-app-signer
可以对.app重签名打包ipa
需要再.app包中提供对应的embedded.mobileprovision文件
- iReSign
https://github.com/maciekish/iReSign
可以对ipa进行重签名
需要提供entitlements.plist , embedded.mobieprovision文件的路径
注意
安装包中的可执行文件必须经过脱壳的,重签名才有效
.app包内部的所有动态库(.frameword,.dylib),AppExtension(Plugins文件夹,拓展名是appex),WatchApp(Watch文件夹)都需要重新签名
需要将之前从app store下载的app删掉,才能安装重签名之后的app,否则会安装失败