
Scripts Frida para reescrever aplicações móveis em tempo de execução e fazer MitM diretamente em todo o tráfego HTTPS.
Parte do HTTP Toolkit: ferramentas poderosas para criar, testar e depurar HTTP(S)
Este repositório contém scripts Frida projetados para fazer tudo o que é necessário para a interceptação HTTPS MitM totalmente automatizada em dispositivos móveis.
Este conjunto de scripts pode ser usado em conjunto, para lidar com a interceptação, gerenciar a confiança de certificados e desativar verificações de certificate pinning e transparência, para interceptação MitM de tráfego HTTP(S) no Android e iOS, ou podem ser usados e ajustados de forma independente para fazer hook apenas em recursos específicos.
Os scripts podem lidar automaticamente com:
-----BEGIN CERTIFICATE-----. Você pode abri-lo com um editor de texto para ver e extrair esse conteúdo.config.js e adicione esses detalhes:
CERT_PEM: seu certificado CA em formato PEM.PROXY_PORT: a porta do proxyPROXY_HOST: o endereço do seu proxy, na perspectiva do seu dispositivo (ou use adb reverse tcp:$PORT tcp:$PORT para encaminhar a porta via ADB e use 127.0.0.1 como host)frida-server relevante do github.com/frida/frida, extraia-o, faça adb push para o seu dispositivo e então execute-o com os seguintes 4 comandos: , , , .-----BEGIN CERTIFICATE-----. Você pode abri-lo com um editor de texto para ver e extrair esse conteúdo.config.js e adicione esses detalhes:
CERT_PEM: seu certificado CA em formato PEM.PROXY_PORT: a porta do proxyPROXY_HOST: o endereço do seu proxy, na perspectiva do seu dispositivohttps://build.frida.re como fonte de pacotes.frida-ps -Uai no seu computador para confirmar que está funcionando corretamente.frida-ps -Uai (para um teste rápido, tente usar github.com/httptoolkit/ios-ssl-pinning-demo - o id é )Os comandos acima usam todos os scripts relevantes, mas você geralmente pode usar qualquer subconjunto que preferir, embora em quase todos os casos você vá querer incluir config.js como o primeiro script (ele define algumas variáveis que são usadas por outros scripts).
Por exemplo, para fazer unpinning sozinho no Android, quando a configuração de proxy e certificados é tratada em outro lugar e sem fallbacks de ofuscação, você poderia simplesmente executar:
frida -U \
-l ./config.js \
-l ./android/android-certificate-unpinning.js
-f $PACKAGE_ID
Cada script inclui documentação detalhada sobre o que faz e como funciona em uma grande seção de comentários no topo. Os scripts são:
config.js
Ele define as variáveis usadas por outros scripts:
CERT_PEM - o certificado CA extra para confiar, em formato PEMPROXY_HOST - o endereço IP (IPv4) do servidor proxy a ser usado (não é necessário se você estiver apenas fazendo unpinning)PROXY_PORT - a porta do servidor proxy a ser usada (não é necessária se você estiver apenas fazendo unpinning)DEBUG_MODE - o padrão é false, mas mudar isso para true habilitará muita saída extra que pode ser útil para depurar e fazer engenharia reversa de qualquer problema.BLOCK_HTTP3 - o padrão é true, o que bloqueia HTTP/3 descartando todas as conexões UDP para a porta 443.Ele deve ser listado na linha de comando antes de qualquer outro script.
native-connect-hook.js
Captura todo o tráfego de rede diretamente, roteando todas as conexões para o host e a porta do proxy configurados.
Este é um hook de baixo nível que se aplica a todas as conexões de rede. Isso garante que todas as conexões sejam redirecionadas à força para o servidor proxy de destino, até mesmo aquelas que ignoram as configurações de proxy ou fazem outras conexões de socket brutas, e também bloqueia conexões HTTP/3 se estiver habilitado.
Estes scripts fazem parte de um projeto mais amplo do HTTP Toolkit, financiado pelo Fundo NGI Zero Entrust, estabelecido pela NLnet com apoio financeiro do programa Next Generation Internet da Comissão Europeia. Saiba mais na página do projeto da NLnet.
adb shellsuchmod +x /.../frida-server/.../frida-serveradb devices) antes de executar comandos. Observe que o Frida só será executado no dispositivo como root, que é o que o su fornece no exemplo acima, quando executado em um dispositivo com root. Para verificar se você é root após executar su ou similar, verifique se whoami no shell imprime root.tech.httptoolkit.pinning_demo)config.js). Quais scripts usar depende de você, mas para Android um bom comando para começar é:
frida -U \
-l ./config.js \
-l ./native-connect-hook.js \
-l ./native-tls-hook.js \
-l ./android/android-proxy-override.js \
-l ./android/android-system-certificate-injection.js \
-l ./android/android-certificate-unpinning.js \
-l ./android/android-certificate-unpinning-fallback.js \
-l ./android/android-disable-root-detection.js \
-f $PACKAGE_ID
com.httptoolkit.ios-pinning-democonfig.js). Quais scripts usar depende de você, mas para iOS um bom comando para começar é:
frida -U \
-l ./config.js \
-l ./ios/ios-connect-hook.js \
-l ./ios/ios-disable-detection.js \
-l ./native-tls-hook.js \
-l ./native-connect-hook.js \
-f $APP_ID
Este hook se aplica à libc e funciona para Android, Linux, iOS e muitos outros ambientes relacionados.
native-tls-hook.js
Modifica toda a validação TLS para bibliotecas baseadas em BoringSSL para confiar no seu certificado CA configurado.
Notavelmente, ele faz hook nas APIs BoringSSL integradas do iOS, que é a forma normal como o iOS lida com a validação de certificados TLS (portanto, isso é suficiente para quase toda a interceptação HTTPS no iOS), mas também é usado em alguns outros casos tanto no iOS quanto no Android.
Isso efetivamente faz com que sua CA seja confiável para todos os certificados e desativa todo certificate pinning, transparência de certificados e outras restrições para a sua CA. Observe que, ao contrário de muitos outros hooks do Frida em outros lugares, isso não desativa completamente a validação TLS (o que é muito inseguro). Em vez disso, ele substitui a validação para garantir que todas as conexões que usam seu certificado CA específico sejam confiáveis, sem afrouxar a validação para permitir a interceptação por terceiros.
android/
android-proxy-override.js
Substitui as configurações de proxy do Android para o app de destino, garantindo que todo o tráfego bem-comportado seja redirecionado via servidor proxy e interceptado.
android-system-certificate-injection.js
Modifica as APIs nativas do Android para garantir que todos os trust stores confiem no seu certificado CA extra por padrão, permitindo que o tráfego TLS criptografado seja capturado.
android-certificate-unpinning.js
Modifica ou desativa muitas técnicas comuns conhecidas para restrições adicionais de certificados, incluindo certificate pinning (aceitar apenas um pequeno conjunto de certificados reconhecidos, em vez de todos os certificados confiáveis no sistema) e transparência de certificados (validar que todos os certificados usados foram registrados em logs públicos de certificados).
android-certificate-unpinning-fallback.js
Detecta falhas de validação de certificados não tratadas e tenta lidar com casos desconhecidos e não reconhecidos com patches de fallback gerados automaticamente. Isso é mais experimental e pode ser ligeiramente imprevisível, mas é muito útil para casos ofuscados e, em geral, corrigirá problemas de pinning (após uma falha inicial) ou pelo menos destacará código para engenharia reversa adicional na saída do log do Frida. Este script compartilha alguma lógica com android-certificate-unpinning.js e não pode ser usado de forma independente - se você quiser usar este script, precisará incluir também o script de unpinning sem fallback.
android-disable-root-detection.js
Desativa verificações comuns de detecção de root nas camadas nativa e Java para impedir a detecção de dispositivos Android com root.
Este script intercepta acesso ao sistema de arquivos, comandos de shell e consultas de pacotes por indicadores conhecidos de root (como su, Magisk e apps relacionados) e falsifica propriedades importantes do sistema (ro.secure, ro.debuggable, etc.) para simular um ambiente de produção.
Ele bloqueia comportamentos suspeitos, como verificações de existência de arquivos e execução de comandos de shell, ajudando a evitar a detecção em apps que usam verificações de root padrão e avançadas.
android-disable-flutter-certificate-pinning.js
Garante que aplicativos baseados em Flutter (que geralmente ignoram a configuração de certificados do sistema) confiem no seu certificado CA, mesmo na maioria dos casos de certificate pinning explícito. Este script permanece experimental por enquanto.
ios/
ios-connect-hook.js
Captura todo o tráfego de rede do iOS diretamente, roteando todas as conexões para o host e a porta do proxy configurados.
Este é um hook de baixo nível que se aplica a todas as conexões de rede. Isso garante que todas as conexões sejam redirecionadas à força para o servidor proxy de destino, até mesmo aquelas que ignoram as configurações de proxy ou fazem outras conexões de socket brutas.
ios-disable-detection.js
Desativa a detecção de jailbreak do JailMonkey.
utilities/test-ip-connectivity.js
Você provavelmente não vai querer usar isso normalmente como parte da interceptação em si, mas pode ser muito útil como parte da configuração.
Este script permite configurar uma lista de endereços IP possíveis e uma porta de destino, fazer o processo testar cada endereço e enviar uma mensagem ao cliente do Frida para o primeiro endereço acessível fornecido. Isso pode ser útil para processos de configuração automatizados, se você não souber qual endereço IP é melhor usar para acessar o servidor proxy (seu computador) a partir do dispositivo de destino (seu telefone).