Assinando um arquivo .apk usando o utilitário jarsigner. Como assinar um jogo ou aplicativo APK no Android corretamente Como alterar a assinatura de um aplicativo Android

Desde que eu mesmo pesquisei a pergunta como assinar arquivo apk?”, Eu sei que não é tão fácil encontrar uma instrução realmente funcional e compreensível em tudo. É por isso que decidi escrever eu mesmo um material sobre como assinar corretamente seu programa ou jogo no Android.

Como agora é conhecido assinatura digital, sua criação não pode ser colocada no Market, e isso já é sério. Percebi muitos jovens desenvolvedores Android, por assim dizer, iniciantes esquecem completamente de assinar o aplicativo e tentam fazer algo com ele depois e todos se perguntam por que não 't é possível executar esta ou aquela ação com seu arquivo APK.

Portanto, não vamos arrastá-lo e começar imediatamente com como você pode assinar seu arquivo apk e como realmente usá-lo para obter o resultado desejado.

Este método é o mais correto de todos os listados, por isso o descreveremos neste material. Faremos nossas próprias chaves com nossos dados e certificados e as usaremos para assinar o aplicativo que você criou.

Para o trabalho, precisamos de: OpenSSL e SignApk.

Primeiro, vamos criar um certificado e uma chave de assinatura. Instale o OpenSSL. Durante a instalação, o instalador solicitará que você copie os componentes para a pasta Windows, selecione a pasta Bin, que será o local onde você instalará todo o OpenSSL.

Agora abra em nome do administrador do sistema (isso é muito importante!) a linha de comando. Em seguida, na linha de comando, vá para a pasta bin, localizada na pasta onde você instalou o OpenSSL (por exemplo, C:\OpenSSL\bin\ ou C:\Arquivos de Programas\OpenSSL\bin\). Caso não saiba, a movimentação para outra pasta é feita com o comando cd. Ou seja, para ir até a pasta desejada, você deve executar o seguinte comando:

CD C:\OpenSSL\bin\

Quando estiver na pasta Bin, você pode prosseguir diretamente para a criação de um certificado e uma chave.

Passo 1(Realizamos geração de chaves com comprimento de 1024 bits)

Execute o comando:

openssl genrsa -out key.pem 1024

Passo 2(Com base na chave, criamos uma solicitação de certificado)

Execute o comando:

openssl req -new -key key.pem -out request.pem

Nesta etapa, você precisará inserir seus dados, que o identificarão no certificado.

Etapa 3 (Gerar uma chave privada a partir de um certificado)

Execute o comando:

openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem

Passo 4(Realizar geração de chave pública)

Execute o comando:

openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt

Nesta etapa, a criação dos arquivos necessários para assinar seus jogos e aplicativos está finalizada. usando a chave e o certificado gerados, você pode assinar quantos jogos e aplicativos no Android quiser.

E agora, na verdade, vamos começar a assinar o aplicativo. Descompacte o arquivo do SingApk baixado no link acima. Mova da pasta Bin onde criamos o certificado e os arquivos da chave 2: certificado.pem E chave.pk8 para a pasta onde você descompactou o SingApk. O Windows deve exibir uma caixa de diálogo de substituição de arquivo - substituir.

Agora, para assinar o arquivo apk com uma assinatura digital exclusiva que você mesmo criou, basta arrastar o arquivo apk para sign_APK.bat. Para não arrastar o arquivo de uma janela para outra (isso não é conveniente), mova seu arquivo apk para a pasta com SingApk. Após a execução, aparecerá um arquivo na pasta com o SingApk apk_signed.apk, que será seu aplicativo ou jogo assinado.

Com o recurso de assinatura de aplicativo em Google Play O Google pode gerenciar a chave de assinatura do seu app, 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 adulterada.

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

Titulares de contas e usuários com permissões globais de gerenciamento de produção que aceitaram os Termos de Uso podem se registrar. 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 aplicativo no Google Play, suas chaves são armazenadas na mesma infraestrutura que as chaves do Google e protegidas por um serviço especial de gerenciamento de chaves. Informações detalhadas sobre a infraestrutura técnica do Google podem ser encontradas na documentação de segurança do Google Cloud.

Os aplicativos Android são assinados com uma chave privada. Associado a cada uma dessas chaves está um certificado público que os dispositivos e serviços podem usar para verificar a segurança dos aplicativos e suas atualizações. Somente essas atualizações são instaladas em dispositivos cuja assinatura corresponde à assinatura aplicativo instalado. Se você permitir que o Google gerencie sua chave de assinatura do app, o processo será mais seguro.

Observação.É opcional usar o recurso de assinatura de aplicativo no Google Play. Você pode fazer upload de APKs e gerenciar suas próprias chaves sem usar App Bundles. No entanto, se você perder o acesso ao keystore ou se ele for comprometido, não será possível atualizar seu aplicativo e será necessário publicá-lo novamente 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 aplicativos no Google Play, você pode fazer upload de uma chave de assinatura existente ou permitir que o Google gere uma nova.

Chave de download

Há duas maneiras de gerar uma chave de upload:

  • 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 upload separada. Se você enviou sua própria chave de assinatura do aplicativo quando se inscreveu no programa, pode gerar uma nova chave de upload por segurança. Se você não quiser fazer isso, use a chave de assinatura do aplicativo como sua 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 proprietário. O certificado de chave pública permite que qualquer pessoa saiba quem assinou o App Bundle ou o arquivo APK. Este certificado pode ser compartilhado porque não inclui uma chave privada.

Para registrar chaves com provedores de API, você pode baixar o certificado público para a chave de assinatura do aplicativo na página Assinatura do aplicativo no Play Console. O certificado de chave pública pode ser compartilhado com todos porque não inclui a chave privada.

Impressão digital do certificado

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

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

Java keystore (.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 envio ao Google Play.

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

Processo de assinatura do aplicativo

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

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

  1. Você assina um App Bundle ou APK e faz o 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 APKs no App Bundle e os assina com a App Signing Key.
    • Arquivo APK assinado com a chave de upload. O Google verifica sua assinatura, remove-a e assina novamente os APKs com a chave de assinatura do app.
    • Um arquivo APK assinado com uma chave de assinatura de aplicativo. 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: criar uma chave de upload

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

Etapa 2: preparar o lançamento

  1. seguindo as instruções.
  2. Depois de selecionar um tipo de versão, configure as opçõ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 upload que será usada para assinar versões futuras. Você também pode escolher entre os seguintes Configurações avançadas:
    • Use uma chave para diferentes aplicativos na conta do desenvolvedor (opção 2).
    • Carregue a chave de assinatura de um aplicativo existente (opção 2, 3 e 4) escolhendo o método de exportação e upload que melhor lhe convier. Depois de carregar a chave de assinatura do aplicativo e seu certificado público, você pode usar a chave de assinatura do aplicativo como a chave de assinatura do aplicativo.

Observação. Para continuar, você deve aceitar os Termos de Uso e se inscrever no App Signing Program.

Etapa 3: registrar sua chave de assinatura do app com provedores de API

Se seu aplicativo usa uma API, para autenticar, você provavelmente precisará registrar um certificado de chave com o qual o Google assina 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 em Aceitar.

Etapa 2 Envie a chave original para o Google e gere uma chave de upload

  1. Encontre a chave de assinatura do aplicativo original.
  2. Faça login no Play Console.
  3. Selecione um aplicativo.
  4. No menu à esquerda, selecione Gerenciamento de liberação > Assinaturas de aplicativos.
  5. Carregue sua chave de assinatura de aplicativo existente da maneira mais adequada 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 a chave de upload.
  2. Copie as impressões digitais (MD5, SHA-1 e SHA-256) do certificado de assinatura do aplicativo.
    • Para fins de teste, pode ser necessário registrar um certificado de chave de upload com o provedor de API usando a impressão digital do certificado e a chave de assinatura do aplicativo.

Etapa 4: assine a próxima atualização do seu aplicativo com uma chave de upload

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

Como gerar uma chave de upload e atualizar keystores

Você pode gerar uma chave de upload ao se inscrever no programa de assinatura de aplicativos no Google Play ou pode gerar uma posteriormente na seção Gerenciamento de liberação > Assinaturas de aplicativos.

Para criar uma chave de upload, siga estas etapas:

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

Se você estiver usando uma chave de upload:

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

Depois de criar sua chave de inicialização, verifique e atualize os seguintes locais conforme necessário:

  • sistema local;
  • servidor local seguro (com várias listas de controle de acesso);
  • sistema em nuvem (com diversas listas de controle de acesso);
  • serviços especiais para gerenciamento de chaves;
  • Repositórios Git.

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

Em alguns casos, você pode 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, enquanto a chave herdada será usada para atualizar as versões assinadas que os usuários já instalaram.

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

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

  • Você precisa de uma chave criptograficamente mais forte.
  • A chave de assinatura do app foi comprometida.

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

Observações importantes sobre a atualização de chaves

Antes de solicitar uma atualização de chave, é importante entender quais mudanças isso acarretará.

  • Se você estiver usando 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, certifique-se de registrar os certificados para as chaves de assinatura de aplicativos novos e legados com o provedor de API antes de atualizá-lo. Os certificados estão disponíveis na página Assinatura do aplicativo Jogar Consola.
  • Se muitos usuários de 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 Solicitar atualização de chave.
  5. Escolha o que fazer com o dispositivo.
    • Dependendo da opção escolhida, pode ser necessário entrar em contato com o suporte para concluir sua solicitação.
  6. Deixe o Google Play gerar uma nova chave de assinatura do app (recomendado) ou faça o download de uma.
    • Depois de atualizar a chave de assinatura do aplicativo, se a chave for a mesma que a chave de upload, você pode continuar a usar a chave de assinatura do aplicativo antigo como a chave de upload ou criar uma nova.
  • Se você também publicou seu aplicativo fora do Google Play, ou pretende fazê-lo, pode gerar uma chave de assinatura de aplicativo pré-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 um App Bundle é publicado em uma versão de teste ou produção, você pode abrir o App Bundle Browser e baixar o arquivo ZIP contendo todos os APKs para um dispositivo específico. Esses APKs já estão assinados com a chave de assinatura do app. Você pode instalá-los no dispositivo a partir de um arquivo ZIP usando o utilitário linha de comando bundletool.
  • Para maior segurança, gere uma nova chave de upload diferente da chave de assinatura do app.
  • Se quiser testar um APK assinado com uma chave de upload, registre a chave em um serviço ou API que use a assinatura do aplicativo para autenticação (como a API do Google Maps ou o SDK do Facebook).
  • Se você estiver usando as APIs do Google, poderá registrar o certificado de upload no Google Cloud Console .

O que fazer se a chave for perdida ou hackeada

Se você perdeu o acesso à sua chave de upload privada ou se ela foi hackeada, pergunte ao proprietário da 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 upload, você receberá um e-mail e poderá atualizar os keystores e registrar a chave com os provedores de API.

Importante! A redefinição da chave de upload não afeta a chave de assinatura do app que o Google Play usa para assinar arquivos APK antes de serem enviados aos usuários.

Esta informação foi útil?

Como este artigo pode ser melhorado?

Às vezes, alguns aplicativos no Android não são adequados para o usuário por algum motivo. Um exemplo são os anúncios irritantes. E acontece assim - todo mundo é bom no programa, mas apenas a tradução nele está torta ou completamente ausente. Ou, por exemplo, o programa é de 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 APK com um aplicativo, observar sua estrutura interna, desmontar e descompilar o bytecode e também tentar fazer várias alterações nos aplicativos que podem nos trazer este ou aquele benefício.

Para fazer tudo isso sozinho, você precisará de pelo menos um conhecimento básico da linguagem Java, na qual os aplicativos Android são escritos, e da linguagem XML, 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á da capacidade de lidar com software de console especializado.

Então, qual é o pacote APK no qual absolutamente todos os softwares para Android são distribuídos?

descompilação do aplicativo

No artigo, trabalhamos apenas com o código do aplicativo desmontado; no entanto, se você fizer alterações mais sérias 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 compilável de volta, é muito mais fácil de ler e entender a lógica do aplicativo. Para fazer isso, precisamos de duas ferramentas:

  • dex2jar - tradutor de bytecode Dalvik para bytecode JVM, com base no qual podemos obter o código Java;
  • O jd-gui é um descompilador que permite que você obtenha código Java legível a partir do bytecode da JVM. Alternativamente, você pode usar Jad (www.varanecas.com/jad); embora seja bastante antigo, em alguns casos gera código mais legível que o Jd-gui.

Eles devem ser usados ​​assim. 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.

Organizando pacotes APK e obtendo-os

Um pacote de aplicativo Android é essencialmente um arquivo ZIP regular que não requer nenhuma ferramenta especial para visualizar o conteúdo e descompactar. Basta ter um arquivador - 7zip para Windows ou console descompactado no Linux. Mas isso é sobre o invólucro. O que há dentro? Por dentro, geralmente temos a seguinte estrutura:

  • META-INF/- contém certificado digital do aplicativo, atestando seu criador, e checksums dos arquivos do pacote;
  • res/ - vários recursos que o aplicativo utiliza em seu trabalho, como imagens, descrição declarativa da interface e outros dados;
  • AndroidManifest.xml- descrição do aplicativo. Isso inclui, por exemplo, a 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 a 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, então, talvez, na grande maioria dos APKs. No entanto, existem alguns arquivos/diretórios menos 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, enquanto a lista de ativos pode ser obtida dinamicamente através do método AssetManager.list() no código da aplicação;
  • lib- bibliotecas nativas do Linux escritas com a ajuda do NDK (Native Development Kit).

Este diretório é usado por fabricantes de jogos para colocar seu mecanismo de jogo escrito em C/C++ lá, bem como por criadores de aplicativos de alto desempenho (por exemplo, Google Chrome). Entendi o aparelho. Mas como obter o arquivo package da aplicação de seu interesse? Como não é possível obter arquivos APK do dispositivo sem fazer root (eles estão no diretório / data / app) e nem sempre é aconselhável fazer root, existem pelo menos três maneiras de obter o arquivo do aplicativo no computador:

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

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

Depois de iniciar o programa, você precisa preencher três campos: E-mail, Senha e ID do dispositivo - e selecionar um idioma. Os dois primeiros são o e-mail e a senha da sua conta do Google que você usa no aparelho. O terceiro é o ID do dispositivo e você pode obtê-lo discando o código no discador # #8255## e, em seguida, encontrando a linha Device ID. Ao preencher, você precisa inserir apenas o ID sem o prefixo android-.

Depois de preencher e salvar, a mensagem “Erro ao conectar ao servidor” geralmente aparece. Não tem nada a ver com o Google Play, então fique à vontade para ignorá-lo e procurar pacotes que lhe interessem.

Revisão e modificação

Digamos que você encontrou um pacote de seu interesse, baixou, descompactou ... e quando tentou visualizar algum arquivo XML, ficou surpreso ao descobrir que o arquivo não é um arquivo de texto. Como descompilar e como trabalhar com pacotes em geral? É realmente necessário instalar o SDK? Não, você não precisa instalar o SDK. De fato, para todas as etapas de descompactação, modificação e empacotamento de pacotes APK, são necessárias as seguintes ferramentas:

  • compactador ZIP para desembalar e embalar;
  • pequeno- montador/desmontador do bytecode da máquina virtual Dalvik (code.google.com/p/smali);
  • apto- uma ferramenta para compactar 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;
  • Assinante- uma ferramenta para assinar digitalmente um pacote modificado (bit.ly/Rmrv4M).

Você pode usar todas essas ferramentas separadamente, mas isso é inconveniente; portanto, é melhor usar um software de nível superior criado com base nelas. Se você usa Linux ou Mac OS X, existe uma ferramenta chamada apktool . Ele permite que você descompacte recursos em sua forma original (incluindo arquivos binários XML e arsc), reconstrua o pacote com recursos modificados, mas não sabe como assinar pacotes, então você terá que executar o utilitário signer manualmente. Apesar do utilitário ser escrito em Java, sua instalação não é padrão. 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 Virtual 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 gráfica intuitiva com a qual execute operações para descompactar, desmontar e descompilar em poucos cliques. Essa ferramenta é Donation-ware, ou seja, às vezes aparecem janelas com uma proposta para obter uma licença, mas isso, no final das contas, pode ser tolerado. Não faz sentido descrevê-lo, porque você pode entender a interface em poucos minutos. Mas o apktool, devido à sua natureza de console, deve ser discutido com mais detalhes.


Considere as opções do apktool. Resumindo, existem três comandos principais: d (decodificar), b (construir) e if (instalar framework). Se tudo está claro com os dois primeiros comandos, o que faz o terceiro, o operador condicional? Ele descompacta a estrutura de interface do usuário especificada, que é necessária quando você disseca um pacote de sistema.

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

  • -s- não desmonte arquivos dex;
  • -r- não desempacote recursos;
  • -b- não insira informações de depuração nos resultados da desmontagem do arquivo dex;
  • --frame-path- use a estrutura de interface do usuário especificada em vez do apktool integrado. Agora considere algumas opções para o comando b:
  • -f- montagem forçada sem verificação de alterações;
  • -a- especifique o caminho para o aapt (a ferramenta para criar o arquivo APK) se, por algum motivo, você quiser usá-lo de outra fonte.

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

$ apktool d mail.apk

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

Preparação. Desativar anúncios

A teoria é, claro, boa, mas por que ela é necessária se não sabemos o que fazer com o pacote desempacotado? Vamos tentar aplicar a teoria em nosso próprio benefício, ou seja, modificamos algum software para que não nos mostre anúncios. Por exemplo, que seja Virtual Torch - uma tocha virtual. Para nós, este software é perfeito, porque está cheio de anúncios irritantes e é simples o suficiente para não nos perdermos 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, para o qual crie um projeto (Arquivo -> Novo projeto), depois em menu contextual projeto, selecione Importar arquivo. Se a sua escolha recaiu sobre o apktool, basta executar um comando:

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

Depois disso, uma árvore de arquivos aparecerá no diretório com.kauf.particle.virtualtorch, semelhante à descrita na seção anterior, 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 as informações de serviço necessárias para o apktool montar o pacote de volta.

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

É fácil adivinhar que ela é a responsável por conceder ao aplicativo permissões para usar a conexão com a Internet. Na verdade, se quisermos apenas nos livrar dos anúncios, provavelmente será suficiente banir o aplicativo da Internet. Vamos tentar fazer isso. Exclua a linha especificada e tente compilar o software usando o apktool:

$ apktool b com.kauf.particle.virtualtorch

O arquivo APK resultante aparecerá no diretório com.kauf.particle.virtualtorch/build/. No entanto, ele não pode ser instalado porque não possui uma assinatura digital e somas de verificação de arquivo (simplesmente não possui um diretório META-INF/). Temos que assinar o pacote com o utilitário apk-signer. Lançado. A interface consiste em duas guias - na primeira (Gerador de chaves) criamos as chaves, na segunda (Assinante do APK) assinamos. Para criar nossa chave privada, preencha os seguintes campos:

  • Arquivo de destino- arquivo de saída do keystore; geralmente armazena um par de chaves;
  • Senha E confirme- senha para armazenamento;
  • Pseudônimo- nome da chave no repositório;
  • Senha de pseudônimo E confirme- senha de chave secreta;
  • Validade- Período de validade (em anos). O valor padrão é ideal.

Os demais campos, em geral, são opcionais - mas você deve preencher pelo menos um.


AVISO

Para assinar um aplicativo com 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, digite a senha, o alias da chave e a senha dele, encontre o arquivo APK e clique no botão "Assinar". Se tudo correr bem, o pacote será assinado.

INFORMAÇÕES

Como assinamos o pacote com nossa própria chave, ele entrará em conflito com o aplicativo original, o que significa que, quando tentarmos atualizar o software pelo mercado, obteremos um erro.

Apenas o software de terceiros precisa de uma assinatura digital, portanto, se você estiver modificando os aplicativos do sistema instalados copiando-os para o diretório /system/app/, não será necessário assiná-los.

Depois disso, colocamos o pacote no smartphone, instalamos e executamos. Pronto, o anúncio acabou! 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 poderia ser suficiente, mas a mensagem parece irritante e, para ser sincero, tivemos sorte com um aplicativo estúpido. Um software bem escrito provavelmente esclarecerá suas credenciais ou verificará uma conexão com a Internet e simplesmente se recusará a iniciar. Como ser neste caso? Claro, edite o código.

Normalmente, os autores de aplicativos criam classes especiais para exibir anúncios e chamam métodos dessas classes durante o lançamento do aplicativo ou uma de suas "atividades" (em termos simples, telas de aplicativos). Vamos tentar encontrar essas classes. Vamos ao diretório smali, depois com (em org existe apenas a biblioteca gráfica aberta cocos2d), depois kauf (exatamente lá, porque esse é o nome do desenvolvedor e todo o código dele 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 adivinhar que exibe anúncios.

Poderíamos mudar a lógica de seu funcionamento, mas seria muito mais fácil remover estupidamente chamadas a 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 vizinho e, em seguida, para o virtualtorch. O arquivo MainActivity.smali merece atenção especial aqui. Esta é uma classe Android padrão que é gerada pelo Android SDK e definida como ponto de entrada para o aplicativo (análogo à função principal em C). Abra o arquivo para edição.

Dentro está o código smali (assembler local). É bastante confuso e difícil de ler devido à sua natureza de baixo nível, por isso não vamos estudá-lo, mas simplesmente encontrar todas as menções da classe Ad no código e comentá-las. Dirigimos a string "Anúncio" na pesquisa e chegamos à linha 25:

Anúncio privado de campo:Lcom/kauf/marketing/Ad;

Aqui, um campo ad é criado para armazenar um objeto da classe Ad. Nós comentamos colocando o sinal ### na frente da linha. Continuamos a busca. Linha 423:

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

É aqui que o objeto é criado. Nós comentamos. Continuamos a busca e encontramos nas linhas 433, 435, 466, 468, 738, 740, 800 e 802 chamadas aos métodos da classe Ad. Nós comentamos. Parece que é isso. Nós economizamos. Agora a embalagem precisa ser remontada e verificada quanto ao desempenho e à presença de publicidade. Para a pureza do experimento, retornamos a linha removida do AndroidManifest.xml, coletamos o pacote, assinamos e instalamos.

Nossa cobaia. Publicidade visível

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

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

Abrimos o arquivo Start.smali e procuramos novamente a linha "Ad", encontramos nas linhas 153 e 155 a menção da classe FirstAd. Também está no código-fonte e, a julgar pelo nome, é responsável por exibir anúncios na tela principal. Observamos ainda, há a criação de uma instância da classe FirstAd e um intent, de acordo com o contexto relacionado a esta instância, e então o rótulo cond_10, cuja transição condicional é realizada exatamente antes da criação de uma instância da classe :

If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

Provavelmente, o programa de alguma forma calcula aleatoriamente se é necessário exibir anúncios na tela principal e, caso contrário, pula 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 ir para:cond_10

Não há mais menções de FirstAd no código, então fechamos o arquivo e remontamos nossa tocha virtual usando apktool. Copie para o smartphone, instale, execute. Voila, todos os anúncios sumiram, parabéns a todos nós.

Resultados

Este artigo é apenas uma breve introdução aos métodos de abertura e modificação de 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 com usando android NDK. No entanto, tendo conhecimento básico, entender tudo isso é apenas uma questão de tempo.

Visualizações de postagem: 5 618

estúdio android oferece amplas oportunidades tanto para o desenvolvimento de aplicativos quanto para aumentar a automação e o conforto durante a programação.

Se você estiver usando o sistema de compilação gradle para criar seus próprios aplicativos, você também pode configurar algumas opções para criar assinaturas para seus aplicativos.

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 a chave, a senha e o nome de usuário como propriedades em um arquivo separado.

Antes de começar a assinar o aplicativo, você precisa criar uma nova propriedade no arquivo gradle.properties. vamos chamá-lo keys.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:/Users/UserName/.signing).

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

Então você precisa criar esta pasta ou, se você especificou uma existente, abri-la. Ele precisa criar um arquivo YourProjectName.properties, dentro do qual o caminho para o armazenamento de chaves, alias de chave e senha serão gravados como propriedades no seguinte formulário.

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

Como criar um armazenamento de chaves?

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

Na janela que aparece, clique em Crie um novo... Como resultado, será aberta uma janela na qual você pode especificar onde o keystore estará localizado (para esta lição, é melhor selecionar imediatamente o caminho que você especificou em YourProjectName.properties na propriedade RELEASE_STORE_FILE), bem como dados sobre a chave.

Então você precisa criar uma pasta YourProjectName e transfira o arquivo keystore desejado para lá.

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

SigningConfigs ( debug ( /* nenhuma alteração aqui */ ) release ( if (project.hasProperty("Keys.repo")) ( def projectPropsFile = file(project.property("Keys.repo") + "/YourProjectName.properties " ) if (projectPropsFile.exists()) ( Properties props = new Properties() props.load(new FileInputStream(projectPropsFile)) storeFile file(file(project.property("Keys.repo") + props["RELEASE_STORE_FILE"] ) ) storePassword props["RELEASE_STORE_PASS"] keyAlias ​​​​props["RELEASE_ALIAS"] keyPassword props["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 esquemas de assinatura?

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

No primeiro caso, assine JAR-file, que é a forma tradicional de assinatura. A assinatura v1 não protege algumas partes do APK, como os metadados ZIP. O verificador de APK precisa lidar com muitas estruturas de dados não confiáveis ​​(ainda não verificadas) e descartar os dados que não estão assinados, deixando muito espaço para ataques. Além disso, o verificador do APK precisa descompactar todos os registros compactados, o que desperdiça muito tempo e memória. Para resolver esses problemas, um segundo esquema v2 Full APK foi desenvolvido.

O esquema v2 foi introduzido em Android 7.0 Nougat (API 25) e funciona desde a versão Android Studio 2.2 E Plug-in Android Gradle 2.2. Esse esquema fornece instalação de aplicativo mais rápida e boa proteção contra alterações não autorizadas no APK. O conteúdo do APK é criptografado e assinado e, em seguida, recebido Bloco de assinatura do APK inserido no APK.

Durante a validaçã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. Esta forma de verificação é muito mais rápida e permite que mais modificações não autorizadas sejam detectadas.

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.

A assinatura usa ambos os esquemas por padrão para que os aplicativos possam ser instalados em qualquer dispositivo. No entanto, se necessário, você pode desativar a assinatura v1 ou v2. Para fazer isso, no código acima no bloco liberar basta adicionar as seguintes linhas.

V1SigningEnabled false

V2SigningEnabled falso

Também é importante observar que você deve assinar com o esquema v1 antes de assinar com o esquema v2, porque o APK não passará pela v2 se for assinado com certificados adicionais depois de ter sido assinado com o esquema v2.

Depois que o código for adicionado, indique esse código no bloco buildTypes dentro liberar. Por exemplo:

BuildTypes ( release ( minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" signatureConfig signatureConfigs.release ) )

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

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

Um pré-requisito para isso é a presença de um arquivo APK assinado. Como assinar um arquivo apk, você aprenderá com este artigo.

pequena digressão

Quando meu projeto de estimação estava próximo do lançamento, comecei a procurar informações sobre como publicar um aplicativo de forma rápida e indolor. 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, são vários recursos. O processo de assinatura é descrito neste artigo, pontos importantes são destacados.

Dados iniciais

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

Ir

Primeiro, você precisa criar um build 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 plug-in que imprima informações de depuração no console. Vamos removê-lo:

$ plugin cordova rm cordova-plugin-console
Para gerar um build de lançamento para Android, use o comando construir com bandeira --liberar:

$ cordova build --liberar android
Este comando irá 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 precisamos assinar este arquivo e executar o utilitário zipalign para otimizar e preparar o arquivo para o Google Play.

Um certificado é necessário para assinar um arquivo. 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 -validity 10000
Importante

O valor do parâmetro -alias deve ser lembrado, mas é melhor anotá-lo. No exemplo acima, é igual a lcf (pelas primeiras letras do nome do aplicativo Loyal Client Free). Não vou dar detalhes aqui, se você estiver interessado, escreva nos comentários, vou te contar mais.

Alias ​​​​é usado sempre ao assinar * 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 a cada lançamento de atualizações

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

perguntas-chave e exemplos de respostas

1. Digite a senha do armazenamento de chaves:
Aqui você precisa inserir uma senha para o arquivo (pelo menos 6 caracteres). A senha digitada deve ser anotada em local seguro, é necessária sempre ao assinar o aplicativo.

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

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

4. Qual é o nome da sua unidade organizacional?
: ISTO
O nome da divisão da sua empresa. Você pode deixar em branco, eu especifico IT.

5. Qual é o nome da sua organização?
: 2 desenvolvedores
O nome da sua organização. Especifique se houver.

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

7. Qual é o nome do seu estado ou província?
: MO
Nome da região

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

: y

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


Ao final, aparecerá uma mensagem sobre a geração bem-sucedida da chave. Você será solicitado a definir uma senha para a chave privada (se quiser deixar a mesma do certificado, pressione Enter):

Gerando 2 pares de chaves RSA de 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 (RETORNE se for igual à senha do keystore):
O 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 os códigos-fonte do aplicativo. Em geral, é melhor armazenar certificados separadamente. Se você perder seu certificado, não poderá liberar atualizações de aplicativos.

Faltam duas etapas e você terá um arquivo APK pronto para distribuição. Prosseguimos diretamente 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 é especificado após o parâmetro -keystore, alias - após o nome do arquivo.

Finalmente, 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á para o Google Play.

Importante.

Utilitário zipalign faz parte do Android SDK Tools 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 do seu aplicativo e fique à vontade para clicar em "Publicar".
 
Artigos Por tema:
Baixe a versão de avaliação do antivírus Yandex
Os produtos da Kaspersky Lab são conhecidos por muitos e são muito populares. No entanto, o alto custo dos programas assusta a maioria dos usuários que simplesmente não estão dispostos a pagar por um "porco na cara" - por aplicativos, funcionalidade e eficiência.
Como descobrir o bitness do sistema operacional e do processador no Windows
Depois de comprar um novo laptop ou montar um computador de mesa, muitos usuários se deparam com a pergunta: 32 ou 64 bits, qual sistema instalar? O tema é muito interessante, e nesta publicação vamos considerar em detalhes todas as nuances relacionadas a
Converter de djvu para pdf
Como converter djvu para pdf para que o texto do documento permaneça o mais legível possível? Para fazer isso, você precisa usar programas e serviços comprovados. Esses documentos podem ser visualizados em computadores, telefones, smartphones, porque há um grande número de
Redes cpa russas.  Redes CPA - o que é?  Programas afiliados Redes CPA: classificação, descrição e comentários.  O que são redes CPA
Quase todo usuário se depara com as palavras queridas CPA na Internet, mas nem todo mundo sabe o que é. Neste artigo, vou contar o que é CPA e com o que se come, e aqui você também conhecerá as 13 melhores redes de CPA em Runet. O que é CPA e CPA