>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Java

Como Executar Módulos Xposed Sem Acesso Root Usando NPatch

Quando você precisa fuçar em um aplicativo Android de outra pessoa, contornar SSL pinning ou ativar a depuração oculta, o instinto usual é recorrer ao Magisk ou KernelSU. Mas fazer root em um celular de uso diário só para uma utilidade é inconveniente. Clientes bancários começam a reclamar, o Play Integrity quebra, e em dispositivos corporativos o root é simplesmente proibido por políticas de segurança.

Por muito tempo, esse problema foi resolvido pelo projeto LSPatch. Ele pegava um APK pronto, embedava um runtime LSPosed e os hooks necessários dentro dele, após o qual o aplicativo rodaria com módulos Xposed sem privilégios de sistema. Quando o LSPatch original parou de ser mantido ativamente, um fork chamado NPatch (Neo LSPatch) entrou em ação para preencher essa lacuna.

Star History Chart

O que essa ferramenta faz

O projeto pega um arquivo APK comum e o reempacota. Dentro do arquivo, ele injeta os arquivos DEX do loader e as bibliotecas nativas (.so) responsáveis por interceptar as chamadas do ART (Android Runtime). Quando o aplicativo modificado é iniciado, essa camada embedada é carregada primeiro. Ela inicializa o ambiente de execução da API Xposed diretamente dentro do processo isolado do aplicativo.

Para o restante do sistema, você está simplesmente executando um programa de usuário comum. Ele não requer direitos de superusuário, não modifica a partição do sistema /system, e não tenta substituir zygote. Todas as modificações e hooks ficam restritos dentro do sandbox desse pacote específico.

Versões a partir do Android 9 até as versões atuais do Android compatíveis com a base de código JingMatrix/LSPosed são suportadas.

Como funciona o processo de patching

Nos bastidores, o NPatch se baseia no trabalho de vários projetos de código aberto:

  • LSPosed gerencia as chamadas da API Xposed e a interceptação de métodos em runtime no ART.
  • Xpatch forneceu o conceito central de injeção de código em um APK sem intervenção do sistema.
  • Apkzlib é usado para descompactar, modificar o arquivo zip e reempacotar rapidamente sem descompilação completa para smali.

Diferentemente da abordagem clássica com apktool + jarsigner, onde descompilar projetos grandes e ofuscados frequentemente resulta em erros, essa abordagem é mais rápida e confiável. Os recursos e o manifesto são ajustados diretamente, após o que o loader é injetado.

Opções de uso

Você pode trabalhar com a ferramenta de duas formas: no computador via terminal ou diretamente no celular.

Opção 1. Console via jar

Se você está automatizando a montagem de builds de teste em CI ou analisando software em uma estação de trabalho, é mais conveniente pegar o arquivo jar pronto dos releases:

# Базовый синтаксис запуска утилиты
java -jar npatch.jar [аргументы]

O utilitário recebe o APK fonte e os módulos a serem embedados como entrada. A saída é um pacote modificado pronto que só precisa ser assinado com uma chave de teste e instalado via adb install.

Opção 2. Gerenciador no dispositivo

Para tarefas do dia a dia, é mais simples baixar manager.apk dos releases no GitHub.

  1. Instale o gerenciador no seu dispositivo Android.
  2. Selecione um aplicativo instalado ou um arquivo APK local.
  3. Especifique os módulos Xposed que devem carregar na inicialização.
  4. O gerenciador constrói um novo pacote de instalação e sugere remover o original antes de instalar a modificação.

Como a assinatura do aplicativo muda inevitavelmente durante o reempacotamento, você não poderá atualizar o programa original sobre ele. Você precisará removê-lo, perdendo dados locais se não estiverem sincronizados.

Casos de uso práticos

Uso regularmente esses patchers em engenharia reversa e testes de clientes móveis.

  • Contornar SSL Pinning para interceptação de tráfego. Empacotar o tráfego no Burp Suite ou mitmproxy é muito mais simples quando você pode embedar um módulo como TrustMeAlready ou JustTrustMe diretamente no APK. Não precisa fazer push de certificados no armazenamento do sistema via Magisk.
  • Instrumentação e coleta de logs. Se você precisa ver quais argumentos estão sendo passados para métodos privados em um SDK de terceiros, você escreve um pequeno hook Xposed, injeta no build e loga a call stack no logcat.
  • Testar módulos em dispositivos limpos. Desenvolvedores de módulos acham útil verificar como seu código se comporta isoladamente sem o LSPosed do sistema.

Pontos de atenção e limitações

A abordagem rootless tem limites naturais que você deve conhecer antecipadamente:

  • Módulos de sistema não funcionam. Se um hook é projetado para mudar o comportamento do SystemUI, shades de notificação ou serviços Android, o NPatch é impotente aqui. Ele vive estritamente dentro do processo do usuário.
  • Alguns aplicativos com anti-cheat rigoroso ou proteção avançada (verificações de integridade de assinatura, detecção de arquivos .so estranhos) detectarão a adulteração e sairão na inicialização.
  • A documentação no repositório ainda é esparsa. A maioria dos detalhes são discutidos no chat do Telegram do projeto, e builds recentes frequentemente precisam ser puxados diretamente dos artefatos do GitHub Actions.

Vale a pena tentar

Se você precisa periodicamente mexer nos bastidores de um aplicativo Android de terceiros ou testar rapidamente uma hipótese sem refazer o flash do dispositivo, adicione npatch.jar à sua caixa de ferramentas. O projeto mantém a base de código do LSPatch atualizada e lida com o reempacotamento de aplicativos para versões mais recentes do Android sem problemas.

Projetos relacionados