Publicamos aplicativos no Google Play e ganhamos milhões. Como usar o recurso de assinatura de aplicativo no Google Play. Como assinar um apk com uma assinatura original

Então, você trabalhou muitos dias (e talvez até noites) e agora seu primeiro aplicativo móvel híbrido está pronto. É bastante estável, a maioria dos bugs críticos foram corrigidos. Restam alguns pequenos, mas lembrando que o perfeccionismo é um mal, você toma a decisão obstinada de publicar o aplicativo.

Um pré-requisito para isso é a presença de um arquivo APK assinado. Você aprenderá como assinar um arquivo apk neste artigo.

Um pequeno retiro

Quando meu projeto favorito estava próximo do lançamento, comecei a procurar informações sobre como publicar um aplicativo de maneira rápida e fácil. Muitas das instruções encontradas pareciam simples. Escolhi as instruções dos autores do framework Ionic, no qual o aplicativo foi desenvolvido. Nem tudo deu certo da primeira vez, há diversas peculiaridades. O processo de assinatura é descrito neste artigo, com pontos importantes destacados.

Dados iniciais

Presumo que você tenha tudo configurado para desenvolver híbridos. Aplicações Móveis usando Apache Cordova. Deve ser instalado:
  • Apache Córdova
  • kit de desenvolvimento do Java
  • Ferramentas SDK do Android
O nome do projeto e do aplicativo é lcf. Substitua pelo nome do seu projeto quando necessário.

Ir

Primeiro você precisa criar uma versão de lançamento do seu aplicativo. Mas antes disso, vamos garantir que todos os plugins desnecessários sejam removidos. Por exemplo, não precisamos de um plugin que envie informações de depuração para o console. Vamos excluí-lo:

$ plug-in cordova rm cordova-plugin-console
Para gerar uma versão de lançamento para Android, use o comando construir com uma bandeira --liberar:

$ cordova build --release android
Este comando criará não assinado Arquivo APK no diretório:

Plataformas/android/build/saídas/apk
Por exemplo, plataformas/android/build/outputs/apk/ android-release-unsigned.apk. Então precisaremos assinar este arquivo e executar o utilitário zipalign para otimizar e preparar o arquivo para Google Play.

Para assinar um arquivo você precisa de um certificado. Vamos criá-lo usando o utilitário ferramenta-chave que está incluído no JDK:

$ keytool -genkey -v -keystore lcf.keystore -alias lcf -keyalg RSA -keysize 2048 -validade 10000
Importante

O valor do parâmetro -alias deve ser lembrado ou, melhor ainda, anotado. No exemplo acima, é igual a lcf (com base nas primeiras letras do nome do aplicativo Loyal Client Free). Não vou dar detalhes aqui, se você tiver interesse escreva nos comentários, contarei com mais detalhes.

O alias é usado sempre que você assina * formulários. Para facilitar a memorização, use o nome do arquivo keystore como um alias, por exemplo:


-keystore hello-world.keystore -alias hello-world -keystore weather-app.keystore -alias weather-app -keystore todo.keystore -alias todo
*Você precisa assinar o aplicativo sempre que atualizações forem lançadas

Utilitário ferramenta-chave faz uma série de perguntas. Serão 8 no total, para se ter uma ideia das perguntas e respostas aproximadas com antecedência, estão todas abaixo, no spoiler.

Perguntas do Keytool e exemplos de respostas para elas

1. Insira a senha do armazenamento de chaves:
Aqui você deve inserir uma senha para o arquivo (pelo menos 6 caracteres). A senha inserida deve ser anotada em local seguro, sendo necessária toda vez que você assinar o requerimento.

2. Digite novamente a nova senha:
Digite sua senha novamente.

3. Qual é o seu nome e sobrenome?
: Ivan Petrov
Seu nome e sobrenome. Valor em colchetesé o valor padrão.

4. Qual é o nome da sua unidade organizacional?
: ISTO
O nome da divisão da sua empresa. Pode deixar em branco, eu indico.

5. Qual é o nome da sua organização?
: 2desenvolvedores
O nome da sua organização. Por favor indique se disponível.

6. Qual o nome da sua Cidade ou Localidade?
: Moscou
Nome da Cidade

7. Qual é o nome do seu Estado ou Província?
: M.O.
Nome da área

8. Qual é o código do país de duas letras para esta unidade?
: Ru
Código do país. Indico RU.

: sim

Confirme se está tudo correto ou pressione Enter para entrar novamente.


Ao final, aparecerá uma mensagem indicando sucesso na geração da chave. Você será solicitado a definir uma senha para a chave privada (se quiser deixá-la igual à do certificado, pressione Enter):

Gerando par de chaves RSA de 2.048 bits e certificado autoassinado (SHA256withRSA) com validade de 10.000 dias para: CN=Ivan Petrov, OU=IT, O=2developers, L=Moscou, ST=MO, C=RU Enter key senha para (RETURN se for igual à senha do keystore):
Um arquivo será criado no diretório atual lcf.keystore.

Importante

O arquivo criado deve ser salvo em local seguro. Se você estiver usando um repositório privado, o arquivo poderá ser confirmado junto com o código-fonte do aplicativo. Em geral, é melhor armazenar os certificados separadamente. Se você perder o certificado, não poderá emitir atualizações de aplicativos.

Faltam duas etapas e você terá um arquivo APK pronto para distribuição. Vamos passar para a assinatura.

Para assinar seu arquivo apk, use o utilitário jarsigner, que também está incluído no JDK.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
O nome do certificado é indicado após o parâmetro -armazenamento de chaves, alias - após o nome do arquivo.

Por fim, para otimizar o arquivo apk, usaremos o utilitário zipalign:

$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
O último parâmetro é o nome do arquivo que você enviará ao Google Play.

Importante.

Utilitário zipalign faz parte das ferramentas do Android SDK e pode ser encontrado aqui:

/caminho/para/Android/sdk/build-tools/VERSION/zipalign

Conclusão

Agora você tem um arquivo apk pronto para distribuição que pode ser carregado no Google Play. Preencha a descrição, determine a classificação da sua aplicação e fique à vontade para clicar em “Publicar”.

Com o recurso de assinatura de aplicativos do Google Play, o Google pode gerenciar a chave de assinatura do seu aplicativo, bem como proteger essa chave e usá-la para assinar seus APKs para distribuição. Este método de armazenamento irá protegê-lo caso a chave seja perdida ou hackeada.

Importante! Para usar Android App Bundles (o formato de publicação de aplicativos recomendado), você deve se inscrever no programa de assinatura de aplicativos do Google Play antes de fazer upload do App Bundle para o Play Console.

O registro está aberto a titulares de contas e usuários com permissões de gerenciamento de produção global que aceitaram os Termos de Serviço. Você só pode registrar um aplicativo por vez no Programa de assinatura de aplicativos do Google Play.

Princípios de trabalho

Quando você usa o recurso de assinatura de apps do Google Play, suas chaves são armazenadas na mesma infraestrutura que armazena as chaves do Google e são protegidas por um serviço de gerenciamento de chaves dedicado. Informação detalhada A infraestrutura técnica do Google pode ser encontrada na documentação do Google Cloud Security.

Os aplicativos Android são assinados com uma chave privada. Cada uma dessas chaves está associada a um certificado público, com o qual dispositivos e serviços podem verificar a segurança dos aplicativos e suas atualizações. Somente as atualizações cuja assinatura corresponde à assinatura são instaladas nos dispositivos aplicativo instalado. Permitir que o Google gerencie a chave de assinatura do seu aplicativo tornará o processo mais seguro.

Observação. Usar o recurso de assinatura de aplicativos do Google Play é opcional. Você pode baixar APKs e gerenciar suas próprias chaves sem usar App Bundles. No entanto, se você perder o acesso ao keystore ou ele estiver comprometido, você não poderá atualizar seu aplicativo e terá que republicá-lo com um nome de pacote diferente.

Descrições de chaves, objetos e ferramentas
Condições Descrição
Chave de assinatura do aplicativo

A chave usada pelo Google Play para assinar arquivos APK entregues ao dispositivo do usuário. Ao se inscrever no programa de assinatura de apps do Google Play, você pode fazer upload de uma chave de assinatura existente ou permitir que o Google gere uma nova.

Baixar chave

Existem duas maneiras de gerar uma chave de download:

  • Use a chave de assinatura do aplicativo. Se você permitiu que o Google gerasse uma chave de assinatura do aplicativo quando se inscreveu no programa, a chave de upload será a chave usada para assinar a primeira versão do aplicativo.
  • Use uma chave de download separada. Se você forneceu sua própria chave de assinatura do aplicativo ao se registrar no programa, poderá gerar uma nova chave de download por segurança. Se você não quiser fazer isso, use a chave de assinatura do aplicativo como chave de download para assinar novos lançamentos.
Certificado (.der ou .pem)

Um certificado que contém a chave pública e Informações adicionais sobre seu dono. Um certificado de chave pública permite que qualquer pessoa saiba quem assinou um App Bundle ou arquivo APK. Este certificado pode ser compartilhado porque não inclui uma chave privada.

Para registrar suas chaves com provedores de API, você pode fazer download do certificado público da chave de assinatura do seu aplicativo em Assinando aplicativos no Play Console. Um certificado de chave pública pode ser compartilhado com todos porque não inclui uma chave privada.

Impressão digital do certificado

Um identificador curto e exclusivo para o certificado. A impressão digital junto com o nome do pacote é frequentemente solicitada pelos provedores de API para fornecer acesso aos seus serviços.

Impressões digitais de download MD5, SHA-1 e SHA-256 e certificados de assinatura de aplicativo podem ser encontradas na página Assinando aplicativos no Play Console. Você também poderá receber um tipo diferente de impressão digital. Para isso, baixe o certificado original em formato DER na mesma página.

Armazenamento de chaves Java (.jks ou .keystore) Armazenamento de certificados de segurança e chaves privadas.
Ferramenta PEPK

Uma ferramenta para exportar chaves privadas do armazenamento Java e criptografá-las para transferência para o Google Play.

Depois de fornecer ao Google a chave de assinatura do aplicativo, opte por exportar e fazer download de sua própria chave (e, opcionalmente, de seu certificado público) e siga as instruções para fazer download e usar a ferramenta. Você também pode baixar, visualizar e usar a ferramenta PEPK de código aberto.

Processo de assinatura de aplicativo

Você pode baixar arquivos APK assinados com a chave de assinatura original do aplicativo antes ou depois de assinar o aplicativo no Google Play.

Se estiver migrando para Android App Bundles, você poderá testá-los em versões de teste e usar APKs existentes em versões de produção. Veja como funciona:

  1. Você assina o App Bundle ou APK e faz upload para o Play Console.
  2. O processo de assinatura do aplicativo depende do que você está baixando.
    • Pacote de aplicativos. O Google otimiza os arquivos APK do App Bundle e os assina com uma chave de assinatura do aplicativo.
    • Arquivo APK assinado com a chave de download. O Google verifica sua assinatura, remove-a e assina novamente os arquivos APK com a chave de assinatura do aplicativo.
    • Um arquivo APK assinado com a chave de assinatura do app. O Google verifica a assinatura.
  3. O Google entrega arquivos APK assinados aos usuários.

Como se inscrever no programa de assinatura de aplicativos do Google Play

Novos aplicativos

Etapa 1: crie uma chave de download

  1. Crie uma chave de download seguindo as instruções.
  2. Assine o novo arquivo APK com a chave de download.

Etapa 2: preparar o lançamento

  1. , seguindo as instruções.
  2. Depois de escolher o tipo de versão, defina as configurações de assinatura do aplicativo em "Permitir que o Google proteja e gerencie sua chave de assinatura do aplicativo".
  3. Se você clicar Continuar, a chave gerada se tornará a chave de download que será usada para assinar versões futuras. Você também pode escolher o seguinte Configurações avançadas:
    • Use uma chave para diferentes aplicativos na conta do desenvolvedor (opção 2).
    • Carregue a chave de assinatura de uma aplicação existente (opções 2, 3 e 4), escolhendo o método de exportação e download mais adequado. Depois de baixar a chave de assinatura de um aplicativo e seu certificado público, você poderá usá-lo como chave de assinatura do aplicativo.

Observação. Para continuar, você deve aceitar os Termos de Uso e se inscrever no Programa de assinatura de aplicativos.

Etapa 3: registre sua chave de assinatura do aplicativo com seus provedores de API

Se seu aplicativo usa uma API, para autenticar você provavelmente precisará registrar um certificado de chave que o Google usa para assinar seu aplicativo. Para encontrar um certificado:

  1. Faça login no Play Console.
  2. Selecione um aplicativo.
  3. No menu à esquerda, selecione Gerenciamento de liberação > Assinaturas de aplicativos.
    • Se o provedor de API exigir um tipo diferente de impressão digital, você poderá baixar o certificado original no formato DER e convertê-lo conforme necessário usando as ferramentas apropriadas.
Aplicativos publicados

Etapa 1: inscreva-se no programa de assinatura de aplicativos do Google Play

  1. Faça login no Play Console.
  2. Selecione um aplicativo.
  3. No menu à esquerda, selecione Gerenciamento de liberação > Assinaturas de aplicativos.
  4. Se necessário, leia os Termos de Uso e clique Aceitar.

Etapa 2: envie a chave original ao Google e crie uma chave de download

  1. Encontre a chave de assinatura original do aplicativo.
  2. Faça login no Play Console.
  3. Selecione um aplicativo.
  4. No menu à esquerda, selecione Gerenciamento de liberação > Assinaturas de aplicativos.
  5. Faça upload de uma chave de assinatura de aplicativo existente no método que melhor se adequa ao seu processo de lançamento.
  1. e carregue o certificado no Google Play.
    • Você também pode usar a chave de assinatura do aplicativo como chave de download.
  2. Copie as impressões digitais (MD5, SHA-1 e SHA-256) do certificado de assinatura do aplicativo.
    • Para realizar testes, pode ser necessário registrar um certificado de chave de inicialização com o provedor de API usando a impressão digital do certificado e a chave de assinatura do aplicativo.

Etapa 4: assine sua próxima atualização de aplicativo com sua chave de download

As atualizações de aplicativos lançadas devem ser assinadas com uma chave de download.

Como criar uma chave de download e atualizar armazenamentos de chaves

Você pode criar uma chave de download ao se inscrever no Programa de assinatura de aplicativos do Google Play ou pode gerar uma posteriormente no Gerenciamento de liberação > Assinaturas de aplicativos.

Para criar uma chave de download, siga estas etapas:

  1. Siga as instruções no site de desenvolvedores Android. Guarde a chave em um local seguro.
  2. Exporte o certificado da chave de inicialização no formato PEM. Substitua os seguintes argumentos por um sublinhado:
    • $ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
  3. Quando solicitado durante o processo de emissão, baixe o certificado para registrá-lo no Google.

Se você estiver usando uma chave de download:

  • A chave de download é registrada no Google apenas para autenticar a identidade do criador do aplicativo.
  • Sua assinatura é removida de todos os downloads de APK antes que eles cheguem aos usuários.
Restrições
  • A chave de download deve usar criptografia RSA e ter pelo menos 2.048 bits.
  • Chaves DSA e EC não são suportadas, nem chaves RSA menores que 2.048 bits.
Atualizando armazenamentos de chaves

Depois de criar sua chave de download, verifique e atualize os seguintes locais, se necessário:

  • sistema local;
  • protegido servidor local(com diferentes listas de controle de acesso);
  • sistema em nuvem (com diversas listas de controle de acesso);
  • serviços especiais de gestão de chaves;
  • Repositórios Git.

Como atualizar a chave de assinatura para novas instalações de aplicativos

Em alguns casos, você poderá solicitar uma atualização da chave de assinatura do aplicativo. A nova chave será usada para assinar novas instalações e atualizações do aplicativo, e a desatualizada será usada para atualizar versões assinadas que já estão instaladas pelos usuários.

A chave de assinatura só pode ser atualizada uma vez para cada aplicativo. No caso improvável de você usar a mesma chave de assinatura para vários aplicativos executá-los no mesmo processo, a chave não poderá ser atualizada.

Você deve solicitar uma atualização da chave de assinatura do aplicativo nos seguintes casos:

  • Você precisa de uma chave mais segura.
  • A chave de assinatura do aplicativo foi comprometida.

Observação. A solicitação para atualizar a chave de assinatura do app no ​​Play Console não está relacionada à substituição de chaves no Android P e versões posteriores. Esta substituição de chave não é atualmente suportada pelo Google Play.

Notas importantes sobre atualização de chaves

Antes de solicitar uma atualização importante, é importante compreender quais mudanças isso implicará.

  • Se você usar a mesma chave de assinatura para vários aplicativos usarem o mesmo código ou dados, será necessário atualizar os aplicativos para reconhecer as chaves novas e herdadas.
  • Se seu aplicativo usa uma API, registre os certificados das chaves de assinatura de aplicativos novos e legados com o provedor de API antes de atualizar seu aplicativo. Os certificados estão disponíveis na página Assinando aplicativos Jogar console.
  • Se muitos usuários do seu aplicativo instalarem atualizações por meio de redes de compartilhamento de arquivos, eles só poderão instalar atualizações assinadas com a mesma chave do aplicativo instalado em seus dispositivos. Se os aplicativos não puderem ser atualizados porque versão instalada assinado com uma chave diferente, os usuários podem desinstalá-lo e reinstalá-lo para receber atualizações.
Solicite uma atualização de chave para novas instalações. Para fazer isso, siga estas etapas:
  1. Faça login no Play Console.
  2. Selecione um aplicativo.
  3. No menu à esquerda, selecione Gerenciamento de liberação > Assinaturas de aplicativos.
  4. No cartão "Atualizar chave de assinatura para novas instalações de aplicativos", selecione Solicite uma atualização importante.
  5. Escolha o que fazer com o dispositivo.
    • Dependendo da opção escolhida, talvez seja necessário entrar em contato com o suporte para concluir sua solicitação.
  6. Permita que o Google Play gere uma nova chave de assinatura do aplicativo (recomendado) ou faça download de uma.
    • Depois de atualizar a chave de assinatura do aplicativo, se a chave corresponder à chave de download, você poderá continuar a usar a chave de assinatura do aplicativo antiga como chave de download ou criar uma nova.
  • Se você também publicou seu aplicativo fora do Google Play ou planeja fazê-lo, poderá gerar uma chave de assinatura de aplicativo compartilhada e carregá-la no Google ao se inscrever no Programa de assinatura de aplicativos do Google Play.
  • Para proteger sua conta, ativar a verificação em duas etapas para todas as contas que têm acesso ao Play Console.
  • Depois que o App Bundle for publicado no teste ou versão de trabalho Você pode abrir o App Bundle Browser e baixar um arquivo ZIP contendo todos os arquivos APK de um dispositivo específico. Esses arquivos APK já estão assinados com a chave de assinatura do aplicativo. Você pode instalá-los em seu dispositivo a partir de um arquivo ZIP usando o utilitário linha de comando ferramenta de pacote.
  • Para maior segurança, gere uma nova chave de download diferente da chave de assinatura do aplicativo.
  • Se você quiser testar um APK assinado com uma chave de upload, registre a chave em um serviço ou API que use a assinatura do app para autenticação (como API Google Mapas ou Pacote de Desenvolvedor do Facebook).
  • Se você estiver usando a API do Google, poderá registrar seu certificado de upload no Console do Google Cloud.

O que fazer se a chave for perdida ou hackeada

Se você perdeu o acesso à sua chave de download privada ou ela foi hackeada, pergunte ao proprietário da sua conta. Ao entrar em contato com o suporte, o proprietário da conta deve anexar o arquivo upload_certificate.pem.

Quando a equipe de suporte registrar uma nova chave de download, você receberá um e-mail e poderá atualizar seus armazenamentos de chaves e registrar a chave junto aos provedores de API.

Importante! A redefinição da chave de download não afeta a chave de assinatura do aplicativo, que o Google Play usa para assinar arquivos APK antes de enviá-los aos usuários.

Esta informação foi útil?

Como este artigo pode ser melhorado?

Às vezes, alguns aplicativos no Android não combinam com o usuário de alguma forma. Um exemplo é a publicidade intrusiva. E também acontece que o programa é bom para todos, mas a tradução nele está torta ou totalmente ausente. Ou, por exemplo, o programa é um teste, mas não há como obter a versão completa. Como mudar a situação?

Introdução

Neste artigo falaremos sobre como desmontar um pacote APK com uma aplicação, observar sua estrutura interna, desmontar e descompilar o bytecode, e também tentar fazer diversas alterações nas aplicações que podem nos trazer um benefício ou outro.

Para fazer tudo isso sozinho, você precisará de pelo menos conhecimento básico da linguagem Java, na qual os aplicativos Android são escritos, e da linguagem XML, que é usada em todo o Android - desde a descrição do próprio aplicativo e seus direitos de acesso até o armazenamento de strings que será exibido na tela. Você também precisará usar software de console especializado.

Então, o que é um pacote APK que distribui absolutamente todo o software Android?

Descompilação de aplicativos

Neste artigo, trabalhamos apenas com código de aplicativo desmontado, mas se alterações mais sérias forem feitas em aplicativos grandes, será muito mais difícil entender o código smali. Felizmente, podemos descompilar o código dex em código Java, que, embora não seja original e não seja compilado de volta, é muito mais fácil de ler e entender a lógica do aplicativo. Para fazer isso, precisaremos de duas ferramentas:

  • dex2jar é um tradutor do bytecode Dalvik em bytecode JVM, com base no qual podemos obter código na linguagem Java;
  • jd-gui é um descompilador que permite obter código Java legível do bytecode JVM. Como alternativa, você pode usar Jad (www.varaneckas.com/jad); Embora seja bastante antigo, em alguns casos gera código mais legível que o Jd-gui.

É assim que eles devem ser usados. Primeiro, iniciamos o dex2jar, especificando o caminho para o pacote apk como argumento:

% dex2jar.sh mail.apk

Como resultado, o pacote Java mail.jar aparecerá no diretório atual, que já pode ser aberto no jd-gui para visualizar o código Java.

Organização de pacotes APK e recebimento deles

Saco de plástico Aplicativos Android, na verdade, é um arquivo ZIP normal, nenhuma ferramenta especial é necessária para visualizar o conteúdo e extraí-lo. Basta ter um arquivador - 7zip para Windows ou descompactação de console no Linux. Mas isso é sobre o invólucro. O que há dentro? Em geral, temos a seguinte estrutura interna:

  • META-INF/- contém certificado digital da aplicação, identificando seu criador, e checksums dos arquivos do pacote;
  • res/ - diversos recursos que a aplicação utiliza em seu trabalho, como imagens, descrição declarativa da interface, entre outros dados;
  • AndroidManifest.xml- descrição do aplicativo. Isto inclui, por exemplo, uma lista de permissões necessárias, a versão necessária do Android e a resolução de tela necessária;
  • classes.dex- bytecode de aplicativo compilado para máquina virtual Dalvik;
  • recursos.arsc- também recursos, mas de um tipo diferente - em particular, strings (sim, este arquivo pode ser usado para russificação!).

Os arquivos e diretórios listados estão, se não em todos, talvez na grande maioria dos APKs. No entanto, existem mais alguns arquivos/diretórios não tão comuns que vale a pena mencionar:

  • ativos- análogo de recursos. A principal diferença é que para acessar um recurso é necessário conhecer seu identificador, mas a lista de ativos pode ser obtida dinamicamente utilizando o método AssetManager.list() no código da aplicação;
  • biblioteca- bibliotecas nativas do Linux escritas usando NDK (Native Development Kit).

Este diretório é utilizado por fabricantes de jogos, colocando ali o motor de jogo escrito em C/C++, bem como por criadores de aplicações de alto desempenho (por exemplo, Google Chrome). Nós descobrimos o dispositivo. Mas como você obtém o arquivo do pacote do aplicativo no qual está interessado? Como não é possível obter arquivos APK do dispositivo sem root (eles estão localizados no diretório /data/app), e o root nem sempre é aconselhável, há pelo menos três maneiras de obter o arquivo do aplicativo para o seu computador:

  • Extensão de download de APK para Chrome;
  • Aplicativo APK Leecher real;
  • vários hospedagem de arquivos e Varezniks.

Qual usar é uma questão de gosto; preferimos usar aplicativos separados, por isso descreveremos o uso do Real APK Leecher, especialmente porque ele é escrito em Java e, portanto, funcionará no Windows ou no Nix.

Após iniciar o programa, você precisa preencher três campos: Email, Senha e ID do dispositivo - e selecionar um idioma. Os dois primeiros são o e-mail e a senha da sua conta Google que você usa no aparelho. O terceiro é o identificador do dispositivo, e pode ser obtido digitando o código no discador # #8255## e, em seguida, encontrar a linha Device ID. Ao preencher, basta inserir o ID sem o prefixo android-.

Após preencher e salvar, muitas vezes aparece a mensagem “Erro ao conectar ao servidor”. Não tem nada a ver com o Google Play, então fique à vontade para ignorá-lo e procurar pacotes de seu interesse.

Ver e modificar

Digamos que você encontrou um pacote que lhe interessa, baixou, descompactou... e quando tentou visualizar algum arquivo XML, ficou surpreso ao descobrir que o arquivo não era texto. Como descompilar e como trabalhar com pacotes em geral? É realmente necessário instalar o SDK? Não, não é necessário instalar o SDK. Na verdade, todas as etapas para extrair, modificar e empacotar pacotes APK requerem as seguintes ferramentas:

  • Arquivador ZIP para desembalar e embalar;
  • pequeno- Montador/desmontador de bytecode de máquina virtual Dalvik (code.google.com/p/smali);
  • apto- uma ferramenta para empacotar recursos (por padrão, os recursos são armazenados em formato binário para otimizar o desempenho do aplicativo). Incluído no Android SDK, mas pode ser obtido separadamente;
  • signatário- uma ferramenta para assinar digitalmente um pacote modificado (bit.ly/Rmrv4M).

Você pode usar todas essas ferramentas separadamente, mas isso é inconveniente, por isso é melhor usar software de nível superior construído com base nelas. Se você trabalha em Linux ou Mac OS X, existe uma ferramenta chamada apktool. Ele permite descompactar recursos em sua forma original (incluindo arquivos binários XML e arsc), reconstruir um pacote com recursos alterados, mas não sabe como assinar pacotes, então você terá que executar o utilitário signer manualmente. Apesar de o utilitário ser escrito em Java, sua instalação não é padronizada. Primeiro você precisa obter o próprio arquivo jar:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ export PATH=~/bin:$PATH

Se você trabalha no Windows, existe uma excelente ferramenta chamada Virtuous Ten Studio, que também acumula todas essas ferramentas (incluindo o próprio apktool), mas em vez de uma interface CLI fornece ao usuário uma interface intuitiva GUI, com o qual você pode realizar operações de descompactação, desmontagem e descompilação em poucos cliques. Essa ferramenta é Donation-ware, ou seja, às vezes aparecem janelas solicitando a licença, mas no final isso pode ser tolerado. Não adianta descrevê-lo, pois você pode entender a interface em poucos minutos. Mas o apktool, devido à sua natureza de console, deve ser discutido com mais detalhes.


Vejamos as opções do apktool. Resumindo, existem três comandos básicos: d (decode), b (build) e if (install framework). Se tudo estiver claro com os dois primeiros comandos, então o que a terceira instrução condicional faz? Ele descompacta a estrutura de UI especificada, que é necessária nos casos em que você disseca qualquer pacote do sistema.

Vejamos as opções mais interessantes do primeiro comando:

  • -s- não desmonte arquivos dex;
  • -r- não descompacte recursos;
  • -b- não insira informações de depuração nos resultados da desmontagem do arquivo dex;
  • --frame-caminho- use a estrutura de UI especificada em vez daquela incorporada ao apktool. Agora vamos dar uma olhada em algumas opções para o comando b:
  • -f- montagem forçada sem verificação de alterações;
  • -a- indique o caminho para o aapt (uma ferramenta para construir um arquivo APK), se por algum motivo você quiser usá-lo de outra fonte.

Usar o apktool é muito simples, para isso basta especificar um dos comandos e o caminho para o APK, por exemplo:

$ apktool d mail.apk

Depois disso, todos os arquivos extraídos e desmontados do pacote aparecerão no diretório de correio.

Preparação. Desativando publicidade

A teoria é, obviamente, boa, mas por que é necessária se não sabemos o que fazer com o pacote descompactado? Vamos tentar aplicar a teoria em nosso benefício, ou seja, modificar algum software para que não nos mostre publicidade. Por exemplo, seja Virtual Torch - uma tocha virtual. Este software é ideal para nós, porque está repleto de publicidade irritante e, além disso, é simples o suficiente para não se perder na selva do código.


Portanto, usando um dos métodos acima, baixe o aplicativo do mercado. Se você decidir usar o Virtuous Ten Studio, basta abrir o arquivo APK no aplicativo e descompactá-lo, criar um projeto (Arquivo -> Novo projeto) e selecionar Importar Arquivo no menu de contexto do projeto. Se sua escolha recaiu sobre o apktool, basta executar um comando:

$ apktool d com.kauf.particle.virtualtorch.apk

Depois disso, uma árvore de arquivos semelhante à descrita na seção anterior aparecerá no diretório com.kauf.particle.virtualtorch, mas com um diretório smali adicional em vez de arquivos dex e um arquivo apktool.yml. O primeiro contém o código desmontado do arquivo dex executável do aplicativo, o segundo contém informações de serviço necessárias para que o apktool monte o pacote de volta.

O primeiro lugar que devemos procurar é, obviamente, AndroidManifest.xml. E aqui encontramos imediatamente a seguinte linha:

Não é difícil adivinhar que ele é o responsável por conceder ao aplicativo permissões para usar a conexão com a Internet. Na verdade, se quisermos apenas nos livrar da publicidade, provavelmente precisaremos apenas bloquear o aplicativo da Internet. Vamos tentar fazer isso. Excluímos a linha especificada e tentamos construir o software usando apktool:

$ apktool b com.kauf.particle.virtualtorch

O arquivo APK resultante aparecerá no diretório com.kauf.particle.virtualtorch/build/. Porém, não será possível instalá-lo, pois não possui assinatura digital e checksums de arquivo (simplesmente não possui diretório META-INF/). Devemos assinar o pacote usando o utilitário apk-signer. Lançado. A interface consiste em duas abas - na primeira (Key Generator) criamos chaves, na segunda (APK Signer) assinamos. Para criar nossa chave privada, preencha os seguintes campos:

  • Arquivo de destino- arquivo de saída do armazenamento de chaves; geralmente armazena um par de chaves;
  • Senha E confirme- senha para armazenamento;
  • Alias- nome da chave no armazenamento;
  • Senha do alias E confirme- senha de chave secreta;
  • Validade- período de validade (em anos). O valor padrão é ideal.

Os restantes campos são, em geral, opcionais – mas pelo menos um deve ser preenchido.


AVISO

Para assinar um aplicativo usando o apk-signer, você deve instalar o Android SDK e especificar o caminho completo para ele nas configurações do aplicativo.

Todas as informações são fornecidas apenas para fins informativos. Nem os editores nem o autor são responsáveis ​​por qualquer possível dano causado pelos materiais deste artigo.

Agora você pode assinar o APK com esta chave. Na guia APK Signer, selecione o arquivo recém-gerado, insira a senha, o alias da chave e a senha, encontre o arquivo APK e clique com ousadia no botão “Assinar”. Se tudo correr bem, o pacote será assinado.

INFORMAÇÕES

Como assinamos o pacote com chave própria, ele entrará em conflito com o aplicativo original, o que significa que ao tentarmos atualizar o software através do mercado, receberemos um erro.

Uma assinatura digital só é necessária para software de terceiros, portanto, se você estiver modificando aplicações do sistema, que são instalados copiando para o diretório /system/app/, não é necessário assiná-los.

Depois disso, baixe o pacote para o seu smartphone, instale-o e execute-o. Voila, o anúncio desapareceu! Em vez disso, porém, apareceu uma mensagem informando que não temos Internet ou não temos as permissões apropriadas. Em teoria, isso pode ser suficiente, mas a mensagem parece irritante e, para ser sincero, tivemos sorte com um aplicativo estúpido. O software normalmente escrito provavelmente esclarecerá suas credenciais ou verificará uma conexão com a Internet e, caso contrário, simplesmente se recusará a iniciar. Como estar neste caso? Claro, edite o código.

Normalmente, os autores da aplicação criam classes especiais para exibir anúncios e chamam métodos dessas classes quando a aplicação ou uma de suas “atividades” (em termos simples, telas de aplicação) é iniciada. Vamos tentar encontrar essas classes. Vamos para o diretório smali, depois com (org contém apenas a biblioteca gráfica aberta cocos2d), depois kauf (é aqui que está, porque este é o nome do desenvolvedor e todo o seu código está lá) - e aqui está, o diretório de marketing. Dentro encontramos vários arquivos com a extensão smali. São classes, e a mais notável delas é a classe Ad.smali, cujo nome é fácil de adivinhar que é aquela que exibe publicidade.

Poderíamos mudar a lógica de seu funcionamento, mas seria muito mais fácil simplesmente remover chamadas para qualquer um de seus métodos do próprio aplicativo. Portanto, saímos do diretório de marketing e vamos para o diretório de partículas adjacente e depois para o virtualtorch. O arquivo MainActivity.smali merece atenção especial aqui. Esta é uma classe Android padrão criada pelo Android SDK e instalada como ponto de entrada no aplicativo (análoga à função principal em C). Abra o arquivo para edição.

Dentro há código smali (assembler local). É bastante confuso e difícil de ler devido à sua natureza de baixo nível, por isso não iremos estudá-lo, mas simplesmente encontraremos todas as referências à classe Ad no código e as comentaremos. Entramos na linha “Anúncio” na pesquisa e chegamos à linha 25:

Campo anúncio privado:Lcom/kauf/marketing/Ad;

Aqui, um campo de anúncio é criado para armazenar um objeto da classe Ad. Comentamos colocando um sinal ### na frente da linha. Continuamos a busca. Linha 423:

Nova instância v3, Lcom/kauf/marketing/Ad;

É aqui que ocorre a criação do objeto. Vamos comentar. Continuamos a busca e encontramos nas linhas 433, 435, 466, 468, 738, 740, 800 e 802 chamadas para métodos da classe Ad. Vamos comentar. Parece que é isso. Salvar. Agora o pacote precisa ser montado novamente e verificado quanto à funcionalidade e à presença de publicidade. Para a pureza do experimento, retornamos a linha removida do AndroidManifest.xml, montamos o pacote, assinamos e instalamos.

Nossa cobaia. Publicidade visível

Ops! A publicidade desapareceu apenas enquanto o aplicativo estava em execução, mas permaneceu no menu principal, que vemos quando iniciamos o software. Então espere, mas o ponto de entrada é a classe MainActivity, e o anúncio desapareceu enquanto a aplicação estava rodando, mas permaneceu no menu principal, então o ponto de entrada é diferente? Para identificar o verdadeiro ponto de entrada, reabra o arquivo AndroidManifest.xml. E sim, contém as seguintes linhas:

Eles nos dizem (e, mais importante, ao android) que uma atividade chamada Start deve ser lançada em resposta à geração de uma intenção (evento) android.intent.action.MAIN da categoria android.intent.category.LAUNCHER. Este evento é gerado quando você toca no ícone do aplicativo no launcher, portanto determina o ponto de entrada, ou seja, a classe Start. Muito provavelmente, o programador primeiro escreveu um aplicativo sem um menu principal, cujo ponto de entrada era a classe MainActivity padrão, e então adicionou uma nova janela (atividade) contendo o menu e descrita na classe Start, e fez dela manualmente a entrada apontar.

Abra o arquivo Start.smali e procure novamente a linha “Ad”, encontramos nas linhas 153 e 155 uma menção à classe FirstAd. Também está no código-fonte e, a julgar pelo nome, é responsável por exibir anúncios na tela principal. Vejamos mais adiante, há a criação de uma instância da classe FirstAd e uma intenção que, de acordo com o contexto, está relacionada a esta instância, e depois o rótulo cond_10, cuja transição condicional é realizada exatamente antes de criar uma instância da classe:

If-ne p1, v0, :cond_10 .line 74 nova instância v0, Landroid/content/Intent; ... :cond_10

Muito provavelmente, o programa calcula aleatoriamente se a publicidade deve ser mostrada na tela principal e, se não, vai diretamente para cond_10. Ok, vamos simplificar a tarefa dela e substituir a transição condicional por uma incondicional:

#if-ne p1, v0, :cond_10 vá para:cond_10

Não há mais menções ao FirstAd no código, então fechamos o arquivo e remontamos nossa tocha virtual usando o apktool. Copie para o seu smartphone, instale e execute. Voila, toda a publicidade desapareceu, pelo que parabenizamos a todos nós.

Resultados

Este artigo é apenas uma breve introdução aos métodos de hackear e modificar aplicativos Android. Muitos problemas permaneceram nos bastidores, como remoção de proteção, análise de código ofuscado, tradução e substituição de recursos de aplicativos, bem como modificação de aplicativos escritos usando o Android NDK. Porém, com conhecimentos básicos, é só uma questão de tempo para descobrir tudo.

Visualizações de postagens: 5.618

Estúdio Android oferece amplas oportunidades tanto para o desenvolvimento de aplicativos quanto para aumentar a automação e o conforto na programação.

Se você estiver usando um sistema de compilação Gradle para criar suas aplicações, você também pode configurar diversas opções para criar assinaturas para suas aplicações.

Você provavelmente não deseja publicar suas chaves de assinatura, senhas e nomes de usuário em um repositório público (ou mesmo privado). Portanto você pode definir chave, senha e nome de usuário como propriedades em um arquivo separado.

Antes de começar a assinar seu aplicativo, você precisa criar uma nova propriedade em seu arquivo gradle.properties. Vamos ligar para ele Chaves.repo e, como valor, especifique o caminho para a pasta onde o armazenamento de chaves e o arquivo com propriedades serão posteriormente localizados (por exemplo, C:/Usuários/Nome de usuário/.signing).

Keys.repo=C:/Users/UserName/.signing

Então você precisa criar esta pasta ou, se tiver especificado uma existente, abri-la. Você precisa criar um arquivo nele SeuNomedoProjeto.properties, dentro do qual o caminho para o armazenamento de chaves, o alias da chave e a senha serão escritos como propriedades no seguinte formato.

RELEASE_STORE_FILE=/SeuProjetoNome/KeyStoreName.jks RELEASE_STORE_PASS=****** RELEASE_ALIAS=KeyAlias ​​​​RELEASE_KEY_PASS=******

Como criar um cofre de chaves?

Se você não tiver um keystore, poderá criar um facilmente com usando Android Estúdio. Para fazer isso, selecione o item de menu Construir -> Gerar APK assinado.

Na janela que aparece, você precisa clicar Crie um novo... Como resultado, será aberta uma janela na qual você pode especificar onde o armazenamento de chaves estará localizado (para esta lição, é melhor selecionar imediatamente o caminho que você especificou em SeuNomedoProjeto.properties na propriedade RELEASE_STORE_FILE), bem como informações importantes.

Então você precisa criar uma pasta Seu nome do projeto e mova-o para lá arquivo necessário lojas de chaves.

Agora você pode prosseguir diretamente para o processo de assinatura. Para fazer isso, você precisa abrir o arquivo em seu projeto construir.gradle(localizado na pasta do aplicativo). Dentro dele no bloco andróide você precisa adicionar o seguinte código.

SigningConfigs ( debug ( /* sem alterações aqui */ ) release ( if (project.hasProperty("Keys.repo")) ( def projectPropsFile = file(project.property("Keys.repo") + "/YourProjectName.properties " ) if (projectPropsFile.exists()) ( Properties adereços = new Properties() props.load(new FileInputStream(projectPropsFile)) storeFile file(file(project.property("Keys.repo") + adereços["RELEASE_STORE_FILE"] ) ) storePassword adereços["RELEASE_STORE_PASS"] keyAlias ​​​​props["RELEASE_ALIAS"] keyPassword adereços["RELEASE_KEY_PASS"] ) ) else ( println "====================== = ===================================" println " - Configure o ambiente de compilação de lançamento - por exemplo, em ~/.diretório de assinatura" println "=========================================== ================== ==========" ) ) )

Quais são os diferentes esquemas para obter uma assinatura?

Existem dois esquemas para obter uma assinatura APK: v1 JAR E APK v2 completo.

No primeiro caso é assinado JAR-arquivo, que é caminho tradicional assinando. A assinatura v1 não protege algumas partes do APK, como metadados ZIP. O verificador APK deve lidar com muitas estruturas de dados não confiáveis ​​(ainda não verificadas) e, em seguida, descartar os dados que não estão assinados, deixando muita superfície de ataque. Além disso, o verificador APK deve descompactar todas as entradas compactadas, o que desperdiça muito tempo e memória. Para resolver esses problemas, o segundo esquema v2 Full APK foi desenvolvido.

O esquema v2 foi apresentado em Android 7.0 Nougat (API 25) e funciona a partir da versão Estúdio Android 2.2 E Plug-in Android Gradle 2.2. Este esquema fornece instalação mais rápida de aplicativos e boa proteção contra alterações não autorizadas no APK. O conteúdo do APK é hash e assinado, então o resultado Bloco de assinatura APK inserido no APK.

Durante a verificação, o esquema v2 trata o APK como um blob e executa a verificação de assinatura em todo o arquivo. Qualquer modificação no APK, incluindo modificações nos metadados ZIP, invalida a assinatura. Essa forma de verificação é muito mais rápida e pode detectar mais modificações não autorizadas.

O novo formato é compatível com versões anteriores, portanto, os APKs assinados com o novo esquema podem ser instalados em dispositivos mais antigos (que simplesmente ignorarão a nova assinatura), desde que esses APKs também sejam assinados com o esquema v1.

Por padrão, a assinatura usa ambos os esquemas para que os aplicativos possam ser instalados em qualquer dispositivo. No entanto, se houver necessidade, você pode desabilitar a assinatura v1 ou v2. Para fazer isso, no código acima no bloco liberar Basta adicionar as seguintes linhas.

V1SigningEnabled falso

V2SigningEnabled falso

Também é importante observar que você precisa assinar com o esquema v1 antes de assinar com o esquema v2, pois o APK não passará na verificação no esquema v2 se for assinado com certificados adicionais após assinar com o esquema v2.

Depois que o código for adicionado, inclua-o em um bloco tipos de construção dentro liberar. Por exemplo:

BuildTypes (liberação (minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" SignConfig SigningConfigs.release ) )

Agora você pode com segurança no item de menu Construir escolher Construir APK, tendo previamente alterado o tipo de montagem de depurar sobre liberar. Como você pode ver, este método é conveniente porque é automático, você só precisa configurá-lo uma vez e seus armazenamentos de chaves podem estar seguros.


Principal