Como abrir o APK e como editar? Usando apktool Um programa para desmontar e montar um arquivo apk

À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

Um pacote de aplicativo Android é essencialmente um arquivo ZIP normal que não requer nenhuma ferramenta especial para visualizar seu conteúdo ou 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 aplicação 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, 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 é usado por produtores de jogos que ali colocam seus motores de jogos escritos em C/C++, bem como por criadores de aplicativos 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ê estiver executando 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 gráfica intuitiva com a qual você pode execute 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 no 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 fazer 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 é necessária apenas para software de terceiros, portanto, se você estiver modificando aplicativos do sistema instalados, copiando-os para o diretório /system/app/, não será 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 de aplicativos criam classes especiais para exibir anúncios e chamam métodos dessas classes quando o aplicativo ou uma de suas “atividades” (em termos simples, telas de aplicativos) é 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 para o 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.

Neste artigo você aprenderá em que consiste um aplicativo Android, como abrir um arquivo APK e com quais programas.

O que é um arquivo APK?

APK é um formato do sistema operacional Android usado para arquivos de aplicativos executáveis ​​​​arquivados, e o nome do arquivo em si pode ser qualquer coisa, mas a extensão deve ser apenas assim.apk. Os análogos do APK em outros sistemas operacionais são .msi no Windows, .sis no Symbian, .rpm ou .deb no Linux.

Vamos ver o que tem dentro
Na verdade, .apk é um arquivo ZIP, então você pode visualizar o dispositivo interno usando qualquer gerenciador de arquivos ou arquivador, por exemplo WinRAR ou o aplicativo móvel X-plore.




Vale lembrar que você só tem acesso visual aos recursos internos;

Vejamos a estrutura
Dentro do .apk vemos vários arquivos e pastas, vamos descobrir para que servem:

  • AndroidManifest.xml é uma espécie de “passaporte” da aplicação onde você pode descobrir todos os pontos principais, requisitos, versão, permissões, etc.
  • META-INF este arquivo contém metadados, ou seja, dados sobre dados, somas de verificação, caminhos para dados, caminhos e somas de verificação de recursos, certificados. Você pode abrir este arquivo com qualquer editor de texto, mas é recomendado usar o Notepad++.
  • A pasta res contém todos os recursos gráficos do programa, como ícones, imagens, texto e elementos da interface gráfica. Você também pode acessar facilmente a pasta.
  • classes.dex é o código do programa aplicativo direto executado pela máquina virtual Dalvik VM, você pode ver o que está dentro deste arquivo apenas descompilando o .apk; resources.arsc - arquivo XML compilado, este arquivo contém dados sobre todos os recursos envolvidos no programa.
  • lib - uma pasta com bibliotecas nativas, cujos recursos só podem ser acessados ​​​​por meio de programas especializados. Também no APK pode haver arquivos e pastas como com, org, udk, mas nem sempre.

Agora vamos examinar a estrutura interna com mais detalhes; para isso, precisamos de um programa de descompilação, Java e um arquivo APK. A principal ferramenta para desmontar .apk é o Apktool, mas este programa só funciona a partir da linha, o que não é muito conveniente. Para uma análise mais rápida e conveniente, você pode usar APKing, ainda é o mesmo Apktool, mas com a capacidade de funcionar a partir do menu de contexto.


E assim instalamos o APKing como qualquer aplicativo para Windows e, tendo selecionado .apk, clicamos nele com o botão direito do mouse e Shift ao mesmo tempo, após o que veremos o seguinte:



E selecione a ação desejada, por exemplo, descompilar completamente, então o programa completará a operação e criará uma pasta com o mesmo nome.



Ao abrir a pasta teremos acesso a todos os recursos do arquivo APK.



Agora todos os arquivos de texto podem ser editados, observando as regras básicas, você pode usar o popular programa Notepad++, por exemplo, considere AndroidManifest.xml

Mencionei o aplicativo SmartAPKTool. Ele pode extrair, compactar e assinar arquivos apk modificados. Sua vantagem é a presença de uma interface gráfica. No entanto, existe uma séria desvantagem. O SmartAPKTool não é atualizado há muito tempo e o programa não descompacta e compacta corretamente os aplicativos para as versões mais recentes do Android. Portanto, aqui tentarei explicar como utilizar o aplicativo para esses fins apktool.

Nota 1.
O programa SmartAPKTool ainda é conveniente para assinar arquivos apk coletados.
Nota 2.
Os links para os programas mencionados no artigo são ↓

Programa apktool não possui interface gráfica. Esta é uma desvantagem para quem não está acostumado a trabalhar com linha de comando. Mas também há uma vantagem: ao contrário do SmartAPKTool, veremos todos os erros, o que significa que saberemos o que corrigir.

Vamos baixar dois arquivos: um comum para todos os sistemas, outro para o nosso sistema (Windows no exemplo):

Vamos descompactar ambos os arquivos na mesma pasta vazia (no nosso exemplo, C:\apktool\). Seu conteúdo deverá ficar assim:

A partir de agora podemos usar o programa apktool.

Nota 3.
Usuários de versões de 64 bits do Linux precisarão instalar o pacote ia32-libs:

sudo apt-get install ia32-libs

Na mesma pasta colocamos o arquivo que precisamos descompactar. Por exemplo, deixe-o ser chamado de orig.apk
Pressione e segure a tecla Shift e clique com o botão direito em qualquer espaço vazio da pasta (não clique nos arquivos!). Depois disso, selecione “Abrir janela de comando”. No console que aparece, digite:

apktool decode orig.apk

O arquivo será descompactado:

Agora temos uma pasta com o aplicativo descompactado no diretório C:\apktool\. É chamado da mesma forma que o arquivo de origem, menos a extensão: C:\apktool\orig\ . Podemos alterar os arquivos de origem conforme descrito no artigo Android: como instalar dois aplicativos idênticos em um telefone. Depois de fazermos as alterações, coletaremos uma cópia do aplicativo empacotando os arquivos de origem em um apk:

apktool build orig resultado.apk

Aqui result.apk é o nome do arquivo que criamos para a construção da cópia. Se não houver erros, o arquivo será montado:

O resto está além do escopo do artigo:

  1. Se houver erros durante a montagem, você precisará encontrar a causa e corrigi-los.
  2. Resta apenas assinar o arquivo result.apk resultante. Isso pode ser feito usando SmartAPKTool conforme mencionado acima; Tudo nele é intuitivo. Existem também outras maneiras de assinar um arquivo apk.
  3. Erros também podem ocorrer durante a instalação de uma cópia, durante sua inicialização ou operação. Eles precisam ser capturados usando o utilitário adb incluído no Android SDK.

Você deve assinar o aplicativo, caso contrário ele não será instalado. Os erros não ocorrem com tanta frequência e os problemas mais comuns que os causam estão descritos no artigo

No processo de utilização de vários firmware para dispositivos Android, às vezes torna-se necessário alterar de uma forma ou de outra os aplicativos do sistema integrados ao sistema operacional. Neste material consideraremos esse assunto em detalhes.

Naturalmente, você precisa desmontar e remontar o arquivo APK do sistema para que funcione de maneira adequada e estável. Vamos descobrir passo a passo o que precisa ser feito para isso.

Primeiro, você precisa realizar o processo de desodexação dos arquivos APK do sistema. Nós lhe diremos como fazer isso.

Portanto, o arquivo .apk foi desodexado e descompilado. Vamos analisar o aplicativo que nos interessa, deixe-o ter o nome, para maior clareza do exemplo, estrutura- resolução. APK. Lembramos disso em nossas cabeças como o aplicativo original.

Digamos que fizemos todas as alterações necessárias no aplicativo. Falaremos mais sobre todos os aspectos dos arquivos APK em. Agora você precisa embalá-lo de volta. Vamos lembrar o aplicativo empacotado finalizado em nossas mentes como o aplicativo 2 modificado.

Agora explicaremos porque foi necessário lembrar mentalmente os aplicativos como originais e modificados 2. O aplicativo compilado pelo programa ApkTool (ou usando uma extensão de interface gráfica do usuário como SmartApkTool) não funcionará, mas isso não é um problema. Realizamos as seguintes ações:

Coletar esses arquivos de volta no APK é bastante simples. Para fazer isso, você precisa executar o apktool com o sinalizador de compilação apropriado e passar o caminho para a pasta com o aplicativo descompilado dentro. Por exemplo, se tivermos uma pasta de aplicativo localizada no mesmo diretório do apktool, o comando ficaria assim:

Concha

aplicativo java -jar apktool.jar b

java - jar apktool .jar b aplicativo

Após a montagem, o arquivo APK finalizado estará localizado no diretório aplicativo/compilação. Em seguida, você precisa assinar o APK. Isso é feito para garantir que o aplicativo funcione em dispositivos onde a depuração é proibida. Ou seja, é proibido lançar aplicativos não assinados em tais dispositivos. Você pode ler mais sobre certificados digitais e o procedimento de assinatura de arquivos aqui.

Assinar um arquivo é muito simples: existe um utilitário especial para isso chamado signapk. Deve ser iniciado passando primeiro os certificados como argumentos, depois o caminho para o aplicativo e, finalmente, o caminho para o aplicativo assinado (o resultado, onde salvá-lo). Parece algo assim:

Concha

java -jar signapk.jar testkey.x509.pem testkey.pk8 *.apk apk_signed.apk

java - jar signapk .jar testkey .x509 .pem testkey .pk8 * .apk apk_signed .apk

Onde você pode obter esse certificado, você pergunta? Os certificados podem ser encontrados na Internet. Ou gere você mesmo. Instruções detalhadas sobre como configurar e gerar todos os arquivos necessários podem ser encontradas, por exemplo, .

Conclusão

Como você pode ver, descompilar e montar arquivos APK é um processo bastante simples, que, além disso, pode ser automatizado, facilitando o trabalho do pesquisador. A própria máquina virtual Dalvik também é fácil de aprender e abrir, o que, por um lado, reduz a barreira de entrada de desenvolvedores, por outro, é o principal motivo de um percentual tão grande de pirataria na plataforma Android. Em parte, é por isso que os desenvolvedores de jogos, por exemplo, geralmente não estão interessados ​​em lançar jogos interessantes com enredo. É muito mais lucrativo, dada a atitude atual dos usuários, rebitar fazendas com doações surpreendentemente semelhantes entre si. Portanto, compramos aplicativos, apoiamos desenvolvedores e, como resultado, obtemos conteúdos interessantes. Mas não há absolutamente nenhuma necessidade de doar!

Obrigado a todos, até mais.