Postado por Andrey Batutin, desenvolvedor iOS sênior, DataArt.Mais de uma ou duas vezes, quando cheguei ao trabalho (ou acabei de sair da cama), encontrei uma carta com raiva no correio, cuja essência era que nada funciona no assembly appstor do aplicativo e tudo precisa ser corrigido com urgência.
Às vezes, o motivo eram meus cardumes. Às vezes meus colegas. E às vezes até a
própria Apple Inc.Mas os cenários mais mortais estavam relacionados a erros que eram reproduzidos apenas nas compilações de aplicativos / versões. Nada confunde e faz você uivar diante de um macbook, como a incapacidade de conectar um depurador ao seu próprio aplicativo e ver o que acontece lá.
Dificuldades semelhantes são criadas pelo
APNS e sua solução de problemas em assemblies de liberação / ad-hoc.
Nos conjuntos em que há ambiente APNS de produção, você não pode conectar um depurador.
Nos assemblies em que existe um depurador, não há push-produção de APNS. Mas eles geralmente caem.
A Apple, como o deus do Antigo Testamento, por um lado, fornece uma plataforma em que o jailbreak logo entrará na
história (e a pirataria na App Store permanece no nível de erro estatístico), e a outra faz o desenvolvedor se sentir como um parente pobre, o pequeno Oliver Twist, que ousou pedir mais mingau.
Narrador: "Tio Apple, me dê outro certificado de distribuição ..."Para o programador médio, fazer algo com a compilação release / appstore de um aplicativo iOS era quase impossível. Era mais fácil sair antes do lançamento.
Em resumo:
A compilação do release é assinada pelo Certificado de Distribuição e usa o Perfil de Provisionamento de Distribuição. O direito proíbe anexar um depurador ao processo de aplicativo. Além disso, ao baixar o ipa da App Store, o binário também é criptografado. As extensões de aplicativo são assinadas separadamente.
Ou seja, o autor do aplicativo parece ser capaz de assinar e assinar novamente o conjunto da App Store com um certificado usando o perfil de provisionamento. Mas você ainda precisa saber como fazê-lo. Mas mesmo depois disso, a questão de como conectar o depurador ao processo de aplicativo permanece em aberto.
Portanto, precisamos nos concentrar exclusivamente em não nos ajustar no estágio de desenvolvimento. E pegue todos os erros antes que o aplicativo saia da App Store. E toras, mais toras para o deus das toras!

Mas, recentemente, uma nova esperança surgiu no horizonte.

Na
parte anterior
, nos encontramos com Frida, uma estrutura maravilhosa para injeção dinâmica de código. E contornou com a fixação de SSL no excelente projeto
FoodSniffer .
Neste artigo, vamos nos familiarizar com uma estrutura criada com base no Frida, que facilita muito a manipulação de versões de aplicativos iOS.
A objeção permite
injetar o FridaGadget em uma compilação do iOS e assiná-lo novamente com o certificado e o perfil de provisionamento desejados.
Preparação
Primeiro, precisamos da versão de lançamento do FoodSniffer.
Uma observação importante - ao criar um ipa, desative a opção "Incluir código de bits para o conteúdo do iOS".

Então, precisamos de um perfil de provisionamento para a compilação.
Para obtê-lo:
- Instale o aplicativo através do Xcode no dispositivo.
- Encontre FoodSniffer.app no Finder.

- Vá para o pacote FoodSniffer.

- Copie o arquivo incorporado.mobileprovision de lá para a pasta com o seu release ipa.

Você deve obter algo como o seguinte:

Depois disso, instale a objeção de acordo com as
instruções . Eu recomendo fortemente o uso da opção virtualenv.
Além da objeção, precisaremos do
ios-deploy para executar o aplicativo corrigido no dispositivo.
Assine novamente o aplicativo!
No terminal, descubra o hash da identidade do sinal de código que precisamos:
segurança find-identity -p codesigning -v
Estamos interessados na identidade 386XXX, porque corresponde ao certificado em lote com o qual o aplicativo foi assinado durante a instalação através do Xcode, a partir do qual obtivemos o perfil de provisionamento.
Injete o FridaGadget e assine novamente nosso aplicativo:
patchipa de objeção --source FoodSniffer / FoodSniffer.ipa --codesign-signature 386XXX --provision-file embedded.mobileprovision
Como resultado, devemos obter o
FoodSniffer-frida-codesigned.ipa .
Agora precisamos do
ios-deploy para instalar e conectar-se ao FridaGadget. Este é um passo importante - se você simplesmente instalar o ipa no seu dispositivo via iTunes ou Xcode, ele não funcionará para conectar-se ao FridaGadget.
Depois de desembalar o
FoodSniffer-frida-codesigned.ipa :
descompacte FoodSniffer-frida-codesigned.ipaLançamos nosso aplicativo corrigido no dispositivo:
ios-deploy --bundle Payload / FoodSniffer.app -W -dSe tudo correu bem, o aplicativo deve iniciar no dispositivo e no terminal veremos:

Agora em outra guia do terminal, conecte a objeção ao FridaGadget:
objeção explorar
Lucro!
Os pães que a objeção fornece
Desvio de pinagem SSL
Tudo é simples aqui:
desativação sslpinning do ios
Agora você pode facilmente usar o Proxy Server para monitorar o tráfego de nosso aplicativo, conforme descrito na
primeira parte .
Despejar padrões do usuário
ios nsuserdefaults getNo final do despejo, devemos ver
"mood_state" = "Estou com fome"
Chaveiro de aplicativo de despejo
despejo de chaves do ios
E aqui está a nossa senha super secreta.
Buscando dados de um banco de dados SQLite.No aplicativo, adicionei o banco de dados sqlite
chinook.db a partir daqui .
A objeção permite que você faça consultas diretamente no banco de dados da seguinte maneira.
- Conexão com o banco de dados:
sqlite connect chinook.db

- Pedido para ela:
sqlite execute query select * dos álbuns

Conclusão
Objection e Frida finalmente permitem um trabalho relativamente normal e simples com as construções Ad Hoc e Distribution de aplicativos iOS. Eles retornam ao programador o poder sobre seu próprio aplicativo, escondido atrás das camadas de proteção com as quais a Apple envolve cuidadosamente os aplicativos iOS. Além disso, Objection e Frida trabalham em dispositivos não jailbroken. Além disso, eles são relativamente fáceis de usar.
Com eles, tenho a esperança de melhorar o desenvolvimento do iOS novamente. Evite minar com segurança a nova sede da Apple por dentro.

Hiper links (úteis)
Um estudante de Amsterdã sobre o tema Código de iOS .
https://labs.mwrinfosecurity.com/blog/repacking-and-resigning-ios-applications/https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2016/october/ios-instrumentation-without-jailbreak/ .
Código fonte do aplicativo FoodSniffer para iOS .
Frida TelegramAgradecimentos especiais a
@manishrhll .
Nota Todos os itens acima devem ser aplicados apenas aos aplicativos e não tentar quebrar o "Tinder" ou qualquer outra coisa. Ainda não vai funcionar!