iOS重签名
重签名步骤
准备一个embedded.mobileprovision文件(必须是付费证书产生的,appid、device一定要匹配),并放入.app包中
可以通过Xcode自动生成,然后在编译后的APP包中找到
可以去开发者证书网站生成下载
从embedded.mobileprovision文件中提取出entitlements.plist权限文件
security cms -D -i embedded.mobileprovision > temp.plist
/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' temp.plist > entitlements.plist
查看可用的证书
security find-identity -v -p codesigning
对.app内部的动态库、AppExtension等进行签名
codesign -fs 证书ID xxx.dylib
对.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.mobileprovision文件的路径
动态库注入
可以使用insert_dylib库将动态库注入到Mach-O文件中
https://github.com/Tyilo/insert_dylib
用法
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 Mach-O文件
更改动态库加载地址
可以使用install_name_tool修改Mach-O文件中动态库的加载地址
install_name_tool -change 旧地址 新地址 Mach-O文件
通过Theos开发的动态库插件(dylib)
默认都依赖于/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate
如果要将动态库插件打包到ipa中,也需要将CydiaSubstrate打包到ipa中,并且修改下CydiaSubstrate的加载地址
2个常用环境变量
@executable_path代表可执行文件所在的目录
@loader_path代表动态库所在的目录