Verificação da assinatura do aplicativo: como funciona, como desativá-lo com o Xposed e por que você não deve

Se você já tentou modificar e reinstalar um aplicativo de sistema, provavelmente encontrou verificações de assinatura de aplicativo de uma forma ou de outra. Você removeu o aplicativo original antes de prosseguir ou deu outro nome ao pacote modificado ao APK para instalá-lo sem antes remover o aplicativo antigo. Nos dois casos, você também teve que assinar novamente o aplicativo para poder instalá-lo.

Você pode contornar todos esses comportamentos desativando temporariamente as verificações de assinatura do aplicativo. Porém, antes de abordarmos a carne e as batatas metafóricas deste artigo e mostrar como fazer isso, é fundamental que falemos um pouco sobre as verificações de assinatura de aplicativos, o que elas fazem e por que você nunca deve removê-las na grande maioria dos países. casos.

Noções básicas de verificação de assinatura do Android

Por padrão, o sistema operacional Android exige que todos os aplicativos sejam assinados para serem instalados. Em termos muito básicos, isso significa que a assinatura do aplicativo é usada para identificar o autor de um aplicativo ( ou seja, verificar sua legitimidade), bem como estabelecer relações de confiança entre aplicativos com a mesma assinatura. Com o primeiro, você tem certeza (em um grau razoável) de que um aplicativo com uma assinatura válida vem dos desenvolvedores esperados. E, com o último, os aplicativos assinados com a mesma chave privada podem ser executados no mesmo processo e compartilhar dados privados. Então, quando você instala uma atualização do aplicativo, o sistema operacional Android verifica essa assinatura para garantir que: A) o APK não tenha sido violado desde que foi assinado e B) o certificado do aplicativo corresponde ao da versão atualmente instalada.

Então, como tudo isso me afeta no mundo real? É simples, realmente. Se você obtiver um APK de fora da Google Play Store e tentar instalá-lo como uma atualização no aplicativo atualmente instalado (leia-se: mesmo nome do pacote), o sistema operacional tentará validar o certificado do aplicativo para garantir que ele veio do mesmos desenvolvedores iniciais. Se o certificado corresponder, a instalação do aplicativo continuará conforme o planejado, o aplicativo reterá os dados existentes e tudo ficará bem. Se a assinatura não for válida (indicando que o APK foi violado) ou se o certificado não corresponder ao do aplicativo original, a instalação falhará. E, como declarado anteriormente, o certificado do aplicativo corresponderá apenas se for assinado com a mesma chave privada usada para assinar a versão anterior. Em outras palavras, você só pode instalar um aplicativo se ele tiver uma assinatura válida que corresponda ao conteúdo do APK e apenas uma atualização se o certificado também corresponder ao encontrado na versão anterior do aplicativo.

[Como aparte de humor neste artigo denso, há um exemplo muito público no qual uma chave de assinatura de aplicativo particular foi perdida ou comprometida. Obviamente, estou me referindo ao aplicativo Authenticator do Google, que recebeu uma atualização que mudou o nome do pacote de com.google.android.apps.authenticator para com.google.android.apps.authenticator2 em uma atualização há cerca de dois anos. Devido a essa alteração, todas as atualizações subseqüentes do aplicativo Authenticator poderiam ser emitidas apenas com o novo nome do pacote - com a nova assinatura gerada pela nova chave de assinatura privada.]

Por que você deseja (temporariamente) desativar a verificação de assinatura

Agora, vamos dar uma olhada em um cenário potencial em que podemos desativar temporariamente a verificação da assinatura do aplicativo. Conforme mencionado no início deste artigo, a verificação de assinatura pode ser um pouco problemática ao modificar aplicativos de sistema existentes. Se você instalar uma versão modificada de um aplicativo de sistema, não poderá assinar o aplicativo com um certificado válido e correspondente. Em casos como esse, normalmente você deseja remover o aplicativo existente primeiro e depois instalar a versão modificada normalmente. Você também pode desativar a verificação de assinatura, mas é melhor (e mais seguro) deixar a verificação de assinatura ativada e simplesmente remover a versão antiga para que a nova possa ser instalada. No entanto, isso pode se tornar um problema se o aplicativo que você está tentando substituir tiver dados que você prefere não perder. Certamente, existem maneiras de preservar os dados manualmente usando o acesso root e transplantá-los para a nova versão do aplicativo, mas os usuários também podem simplesmente desativar a verificação de assinatura temporariamente e depois retomar as verificações. Como alternativa, conforme indicado pelo membro sênior mcbyte_it nos comentários, isso também pode ser útil no desenvolvimento de aplicativos.

Como fazer isso

Até agora, desativar a verificação de assinaturas tem sido uma solução horrível para praticamente qualquer problema. Isso ocorre porque, ao fazê-lo, você basicamente joga fora a proteção interna do Android, que garante que seus aplicativos não tenham sido violados e que suas atualizações venham dos desenvolvedores originais. Mas agora, graças à mágica do Xposed Framework, você pode desativar temporariamente a verificação de assinaturas e reativá-la assim que terminar de instalar o aplicativo modificado. Um desses módulos Xposed que pode fazer exatamente isso foi lançado recentemente pelo membro sênior pyler e funciona como planejado para todos os dispositivos capazes de executar o Xposed. Dessa forma, quando você deseja instalar uma atualização de aplicativo modificada que não foi assinada corretamente, você pode simplesmente ativar o módulo, reiniciar, instalar a atualização de aplicativo modificada, desativar o módulo, reiniciar e seguir seu caminho alegre.

Agora que você sabe como desativar temporariamente a verificação de assinatura, é importante reiterar como é importante deixar a verificação de assinatura sempre ativada, a menos que você tenha um motivo muito, muito bom para desativá-la. Como tal, você só deve realmente usar essa ferramenta para aplicar as atualizações de aplicativos criadas por você e quando houver circunstâncias atenuantes que exijam essa ação, em vez de simplesmente desinstalar o aplicativo antigo primeiro.

Esteja seguro e use isso criteriosamente.