由于各种原因,iOS越狱现状越来越满足不了实际需求。但有时候我们又想研究某第三方App的实现,因此如何在一个非越狱iOS设备上实现这个目的就变成了一个需要解决的需求。intrude的设计初衷就是用来做这个事情的。
intrude是一个小巧的工具,其作用是在未越狱机器上给一个iOS App嵌入一个或多个dylib。
-
首先该工具只能运行在
Mac OS X系统上,因此你得准备一台Mac。 -
将目标
App从目标设备上导出,成ipa文件。 -
使用如下命令将
/path/to/bar.dylib嵌入到/path/to/foo.ipa中./intrude --ipa "/path/to/foo.ipa" \ --dylib "/path/to/bar.dylib" \ --bundle "li.oldman.test" --sign "iPhone Developer: Oldman Li (QNRMA23W53)" \ --provision "/path/to/li.oldman.test.mobileprovision"其中,
bundle,sign,privision为嵌入过程所必须的重签名参数,这三者必须互相对应 -
上步骤会生成一个ipa文件
/path/to/foo.ipa.modified.ipa,此ipa文件即包含了bar.dylib, 将其重新导入设备即可。
-
注意,原始
ipa中可执行二进制文件必须为无加密版本(即俗称的砸壳版本)。 -
简易起见,目前本工具重新生成
ipa文件时未将Plugins目录包含在内。
如果你对实现原理感兴趣,这里的简短说明可以作为参考。
本质上,一个二进制文件需要依赖哪些dylib,这些信息是记录在Mach O结构中的。而intrude便是改写了Mach O结构,增加了一条加载dylib的指令,使之能够在运行时即加载它。这部分实现可参阅这里。