Skip to content

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.