Tweak打包dylib注入ipa重签名安装到未越狱手机上
在我上一篇文章第一次写Tweak,走进iOS逆向的世界中,我写了个很简单的Tweak,当然,越狱手机直接安装deb就行了,就可以使用了,但是,最终的目的是需要让未越狱的手机也能装上,这就涉及到了注入dylib和重签名的东西,我也是踩了无数的坑,总算爬出来了,然后写了这篇教程!
找到dylib
当我们成功make package
后,在tweak目录下,packages
文件夹里是我们打包出来的deb文件,可以直接安装到越狱手机上.而要注入到ipa里是需要用到dylib文件的,而这个文件就在我们创建的Tweak的目录下的隐藏文件夹里,路径如下图
最后有2个文件夹,
arm64
和armv7
,下面那个dylib其实已经包含了上面那2种架构了,所以直接用下面那个dylib即可
处理我们需要的文件
libsubstrate.dylib
文件,由于Tweak开发都是依赖CydiaSubstrate
来注入的,但是这个只有在越狱手机上有,未越狱的手机上是没有这个的,所以我们需要处理一下,这个文件在越狱手机上有,github上也有,其实theos安装的时候电脑上就自带了一个这个文件
-
证书配置文件
将其命名为embedded.mobileprovision
entitlements.plist
文件,不处理这个会导致你签名后也无法安装到未越狱手机上(越狱手机可以安装,所以这是个大坑)
这个文件是根据配置文件来生成的
分别运行以下2条命令
security cms -D -i "extracted/Payload/$APPLICATION/embedded.mobileprovision" > t_entitlements_full.plist
/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' t_entitlements_full.plist > t_entitlements.plist
将第一条命令中""的部分改成你配置文件的路径,然后会在当然目录下出现2个文件,一个是t_entitlements_full.plist
,另一个是t_entitlements.plist
,将t_entitlements.plist
改名为entitlements.plist
- 解压后的.app文件,这个就是没有签名的ipa解压后的.app文件
好了,我们需要处理的文件就大致是上面这些,当然还要安装一些注入工具之类的,例如optool
或者yololib
这些之类的,因为我之前就安装了,也没办法再截图了,大家直接github上搜索一下就能找到了
开始处理dylib
- 首先查看一下我们的dylib的依赖项
otool -L xxx.dylib
可以清楚的看到,除了我红框中的CydiaSubstrate
,其余都是系统的库,上面说到了,因为未越狱的手机上是没有CydiaSubstrate
库的,我们要将其依赖路径修改为libsubstrate.dylib
命令如下
install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib xxx.dylib
这里需要注意一点,-change后面跟的路径就是我上图红框中的路径,因为有的人用otool
查看的路径可能是/usr/lib/libsubstrate.dylib
,那就把-change后的路径改为/usr/lib/libsubstrate.dylib
即可,最后的xxx.dylib是绝对路径,我直接省略了,可以直接看图
第一个框中是命令,运行后是没有任何输出的
然后使用
otool -L
看一下我们的依赖项路径是否已经修改了,上图的第二个和第三个框中就可以看到我们的依赖项路径已经修改掉了
使用 optool 把 xxx.dylib 注入到二进制文件中:
install -c load -p "@executable_path/xxx.dylib" -t xxx/Payload/xxx.app/xxx
准备所有的文件
经过上面的步骤,我们把所有文件都放到一个文件夹中,文件应该有5个,如图
对
Payload/xxx.app
右键显示包内容,将xxx.dylib
和libsubstrate.dylib
放进去
开始签名
这里也有坑,网上很多教程说直接签名就行了,很少有说到要对dylib也签名的,导致我装在手机上打开也是闪退,都是通过系统日志才找到的原因(稍后说到)
网上有很多神马一键签名啥的,我也基本上都用过了,感觉还是用codesign
好一些!首先cd到我们放5个文件的那个文件夹里开始进行签名
1、对entitlement签名
codesign -f -s "iPhone Developer: xxx (xxx)" --entitlements entitlements.plist Payload/xxx.app
将iPhone Developer: xxx (xxx)换成你自己的,这里我带了个-f参数,codesign会自动用你选择的签名替换掉已存在的那个签名(我这里的其实是去除签名的),反正带上没坏处吧!出现replacing existing signature
就签名成功了.
2、对2个dylib进行签名
- 命令和上面一样,直接后面换成dylib的路径(注意是2个dylib,下面这个命令要运行2次,2个dylib分别运行一次)
codesign -f -s 'iPhone Developer: xxx (xxx)' /Users/jj/Desktop/deb/33/Payload/xxx.app/xxx.dylib
3、打包ipa
-
zip -qr app-resigned.ipa Payload/
运行后会在当前目录下出现打包好的ipa,名为app-resigned.ipa
介绍一下自动打包工具吧iReSign,用这个也可以.
安装
经过上面的步骤,我们已经得到了重签名后的ipa了,接下来就可以用pp助手、iTunes等工具安装到手机上了(前提是你的证书中有加入你要安装的手机的UDID才能安装),也可以直接上传到蒲公英等分发平台给别人下载了!