MASTG-TECH-0091: 手动将库注入 IPA
此技术允许你将任意库注入到 IPA 文件中。注入库后,你必须使用 安装应用程序将修改后的 IPA 安装到你的设备上。
当你想要向应用程序添加额外的功能或测试能力时,此技术很有用。 例如,你可以将 Frida Gadget 注入到 IPA 文件中,以实现对应用程序的动态instrumentation。
我们将使用 Frida Gadget(FridaGadget.dylib
)作为示例,但你可以使用此技术注入你想要的任何 .dylib
库。
获取库¶
在我们的例子中,该库是 Frida Gadget,可以从 Frida 项目的 GitHub 发布页面 下载。 查找与你的目标平台匹配的最新版本,然后下载 frida-gadget-XX.YY.ZZ-ios-universal.dylib.xz
文件。
使用 xz
工具解压缩该文件,并将其另存为 FridaGadget.dylib
xz -d <frida-gadget-XX.YY.ZZ-ios-universal.dylib.xz> -c > FridaGadget.dylib
将库添加到 IPA¶
IPA 文件是 ZIP 压缩包,因此你可以使用任何 ZIP 工具来解压缩压缩包
unzip UnCrackable-Level1.ipa
接下来,将目标库(在本例中为 FridaGadget.dylib
)复制到 .app/Frameworks
目录中(如果该目录不存在,请创建该目录)
mkdir -p Payload/UnCrackable\ Level\ 1.app/Frameworks
cp FridaGadget.dylib Payload/UnCrackable\ Level\ 1.app/Frameworks/
使用 optool 向二进制文件(LC_LOAD_DYLIB
)添加一个 load
命令。 下面的代码展示了如何为 iOS UnCrackable L1 执行此操作:
optool install -c load -p "@executable_path/Frameworks/FridaGadget.dylib" -t Payload/UnCrackable\ Level\ 1.app/UnCrackable\ Level\ 1
Found FAT Header
Found thin header...
Found thin header...
Inserting a LC_LOAD_DYLIB command for architecture: arm
Successfully inserted a LC_LOAD_DYLIB command for arm
Inserting a LC_LOAD_DYLIB command for architecture: arm64
Successfully inserted a LC_LOAD_DYLIB command for arm64
Writing executable to Payload/UnCrackable Level 1.app/UnCrackable Level 1...
注入 load
命令后,你需要重新打包 IPA
zip -r patched.ipa Payload
要调试从 App Store 获取的 iOS 应用程序,需要使用带有 get-task-allow
授权的开发provisioning profile重新签名。如何在 获取开发者Provisioning Profile 中讨论了如何对应用程序重新签名。