由deb文件得到dylib库后,将dylib库注入到二进制文件中,重新打包完成动态库附带的功能。
1. 获得dylib文件
使用theos建立tweak工程后,hook住要改写的函数,之后编译、打包(make、make package)生成xxxx.deb文件,deb文件是可以直接在越狱手机安装的。
将该deb文件后缀改为.zip文件,使用Keka(自带的没测过)解压,解压几次后,会出现文件夹Library/MobileSubstrate/DynamicLibraries,里面有xxx.dylib文件。
2. 查看dylib文件的依赖项
使用MAC自带otool工具查看,笔者的依赖路径如下,命令为:
otool -L Horee.dylib
Horee.dylib:
@rpath/Horee.dylib (compatibility version 1.0.0, current version 1.0.0)
/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1751.108.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 904.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.0.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1751.108.0)
/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics (compatibility version 64.0.0, current version 1445.0.0)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3987.0.109)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
从图中可以看出除了CydiaSubstrate库,其他的都是系统自带的库。CydiaSubstrate为越狱手机中的库文件,其在越狱手机中的路径为/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate,或直接通过SSH连接到手机搜索,命令为
find / -iname "CydiaSubstrate"
把CydiaSubstrate拷贝到电脑上,重命名为libsubstrate.dylib
3. 移动libsubstrate.dylib、horee.dylib文件到xxx.app中
将要破解的ipa文件改为zip文件解压后,把libsubstrate.dylib、horee.dylib移动到xxx.app中
4. 修改horee.dylib文件依赖
//loader_path固定字符串,不能更改
install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib horee.dylib
5. 再次查看xxx.app目录下的xxx.dylib文件依赖项
从图中可以看出依赖项路径已被修改
6. 将dylib注入到二进制文件中
optool工具地址:https://github.com/alexzielenski/optool
直接下载是编译不过的,还要下载ArgumentParser,地址为:https://github.com/mysteriouspants/ArgumentParser
把ArgumentParser文件导入到optool工程中,编译后生成optool工具,之后使用optool工具将dylib文件注入到二进制文件中(可直接下载我的工程,https://github.com/hzpqt/optool-)
optool install -c load -p "@executable_path/xxx.dylib" -t /xxx.app/xxx //executable_path为固定字符,不能更改
如果顺利的话,终端应该会输出:
7. 重新签名打包
笔者使用的工具是iOS App Signer,选择好证书、授权文件后,开始打包

屏幕快照 2017-04-06 下午2.52.39.png
8. 安装xxx.ipa文件

如果安装成功后,点击打开出现闪退,估计就是以上路径配置有问题,可以导出崩溃日志看看。