MASTG-TECH-0091: Injetando Bibliotecas em um IPA Manualmente
Esta técnica permite que você injete bibliotecas arbitrárias em um arquivo IPA. Após injetar a biblioteca, você precisará instalar o IPA modificado em seu dispositivo usando Instalando Aplicativos.
Esta técnica é útil quando você deseja adicionar funcionalidades ou capacidades de teste adicionais a um aplicativo. Por exemplo, você pode injetar o Frida Gadget em um arquivo IPA para habilitar a instrumentação dinâmica do aplicativo.
Usaremos o Frida Gadget (FridaGadget.dylib) como exemplo, mas você pode usar esta técnica para injetar qualquer biblioteca .dylib que desejar.
Obtendo a Biblioteca¶
Em nosso exemplo, a biblioteca é o Frida Gadget, que pode ser baixada da página de releases do GitHub do projeto Frida. Procure pelo release mais recente que corresponda à sua plataforma alvo e baixe o arquivo frida-gadget-XX.YY.ZZ-ios-universal.dylib.xz.
Descompacte o arquivo usando a ferramenta xz e salve-o como FridaGadget.dylib:
xz -d <frida-gadget-XX.YY.ZZ-ios-universal.dylib.xz> -c > FridaGadget.dylib
Adicionando a Biblioteca ao IPA¶
Arquivos IPA são arquivos ZIP, então você pode usar qualquer ferramenta ZIP para descompactar o arquivo:
unzip UnCrackable-Level1.ipa
Em seguida, copie a biblioteca de destino, neste caso FridaGadget.dylib, para o diretório .app/Frameworks (crie o diretório se ele não existir):
mkdir -p Payload/UnCrackable\ Level\ 1.app/Frameworks
cp FridaGadget.dylib Payload/UnCrackable\ Level\ 1.app/Frameworks/
Use optool para adicionar um comando load ao binário (LC_LOAD_DYLIB). O código abaixo mostra como isso é feito para iOS UnCrackable Nível 1:
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...
Após injetar o comando load, você precisa reempacotar o IPA:
zip -r patched.ipa Payload
Para depurar um aplicativo iOS obtido da App Store, ele precisa ser reassinado com um perfil de provisionamento de desenvolvimento com a permissão get-task-allow. Como reassinar um aplicativo é discutido em Como obter um Developer Provisioning Profile.