1.查询修改依赖
用系统自带的otool查询依赖
otool -L xxx.dylib
一般来讲,用theos产生的dylib会有mobilesubstrate依赖
依赖关系然而非越狱设备是没有这个内容的,所有我们要从越狱设备中把cydiasubstrate文件copy出来重命名为libsubstrate.dylib,放到和我们生成的xxx.dylib同一目录结构下(theos打包make package生成的dylib在隐藏文件夹.theos里)
使用下面指令修改依赖关系
install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate@loader_path/libsubstrate.dylib xxx.dylib
再查询依赖关系
修改后的依赖关系可以看到依赖已经修改完毕
2.重签名
重签名生成的xxx.dylib以及libsubstrate.dylib(非常重要)
codesign -f -s 证书名称 xxx.dylib
codesign -f -s 证书名称 libsubstrate.dylib
不知道自己的证书名称可根据下面的代码查询电脑里拥有的证书
security find-identity -v -p codesigning
使用adHoc需要使用发布证书(我自己傻了,一直用的开发证书,导致一直失败,浪费了好长时间)
3.将dylib注入到app中
这里我们使用的是insert_dylib ,将xxx.dylib与libsubstrate.dylib拷贝到与insert_dylib同一目录下,将目标.app文件(ipa解压缩可以看到,一定要使用越狱过的包,可以从xx助手上下载越狱包,或者自己砸壳)也拷贝到同一目录下
使用下面代码注入(xxx.app/xxx指的是目标的二进制文件)
./insert_dylib @executable_path/xxx.dylib xxx.app/xxx
全选n即可,完成后将xxx.dylib以及libsubstrate.dylib拷贝到xxx.app中,将.app中的xxx_patched改为xxx
4.打包
使用xcrun将其打包成ipa包
xcrun -sdk iphoneos PackageApplication -v xxx.app -o ~/xxx.ipa
5.重签名
这里我们使用的是iResign重签名
iResign图形化工具1.第一个就是我们的ipa包
2.第二个是我们的发布证书,我是用的个人开发者申请的adhoc证书(记得要将设备加进去),记得要将证书名改为embedded.mobileprovision(不能修改)
3.第三个是entitlements.plist文件,虽然网上说不需要选择,但是我不选择发现重签名会报错,只能自己写了个,格式如下
entitlements.plist文件xxx是自己的team id,可以到开发者中心查看,后面的为自己写的包名
4.第四个为创建证书时写的bundle id
5.选择证书
点击重签名,即可以在ipa包的位置找到同名+resigned的ipa包,在非越狱机上安装试试吧
特别鸣谢:
网友评论