Muito bem, pessoal, vamos à nossa seção final.
Portanto, a última coisa que precisamos fazer é saber como assinar um aplicativo e, portanto, precisamos
entender por que temos que assinar um aplicativo.
E é isso que vamos aprender nesta seção aqui.
Tudo bem.
Aqui temos nosso smartphone com os dois aplicativos a seguir.
Temos o exemplo de e-mail com e temos o exemplo de verificações com.
Agora, o e-mail de exemplo com deseja verificar se há alguma atualização disponível na Google Play Store e na Google
Play Store correspondente à nova atualização de sua versão.
Portanto, a nova versão do pacote agora é uma questão de como podemos ter certeza de que essa atualização está relacionada
a esse aplicativo?
Bem, essa parece ser uma pergunta bem fácil, certo, porque temos esse nome de pacote e esse nome
de pacote é um identificador exclusivo para esse aplicativo.
Sim, isso é verdade.
Mas o nome do pacote é apenas um identificador exclusivo para esse aplicativo nesse dispositivo, não para a Google Play
Store.
Então, como podemos ter certeza de que os dois aplicativos são realmente do mesmo desenvolvedor?
Porque posso simplesmente abrir o Android Studio e criar um nome de pacote próprio com com example dot main.
E isso seria bastante ridículo se esse aplicativo agora buscasse atualizações de um desenvolvedor diferente
com base nesse nome de pacote.
E esse é o problema da fonte de assinatura.
Portanto, o desenvolvedor está criando uma chave privada e agora pode assinar o aplicativo com essa chave
privada.
Portanto, trata-se de uma operação baseada em criptografia pública e privada.
É como escrever sua assinatura nesse aplicativo.
E agora a Google Play Store tem o aplicativo assinado pelo desenvolvedor, e o aplicativo também está perguntando
à Google Play Store se há alguma atualização disponível.
E agora a Google Play Store pode verificar.
Ah, sim, ambos os aplicativos foram assinados com a mesma chave, portanto, são do mesmo desenvolvedor
e têm o mesmo nome de pacote.
O que está na Google Play Store tem a versão superior como o aplicativo no dispositivo.
Portanto, esta é uma atualização para esse aplicativo no dispositivo.
Então, vamos imaginar que você perdeu essa chave privada do seu aplicativo.
Isso significa que o invasor que obteve essa chave privada tem a possibilidade de atualizar seu aplicativo para que ele possa
assinar uma nova versão do seu aplicativo e todos os outros aplicativos serão atualizados para que o invasor
possa inserir algum malware.
Portanto, certifique-se de manter sua chave privada armazenada em algum software seguro ou até
mesmo em algum hardware seguro.
Também presumi que as grandes empresas de tecnologia armazenam suas chaves privadas.
Por exemplo, sim, outras empresas são diamantes ou coisas do gênero.
Porque se um invasor conseguir obter essa chave privada, isso seria muito ruim para a empresa.
Tudo bem.
Além de assinar um aplicativo, podemos fazer ainda mais coisas porque todo esse processo verifica o
autor do aplicativo, e podemos usar isso para recursos mais avançados.
Vimos que, às vezes, os aplicativos precisam compartilhar dados entre si.
Vamos supor que temos esse exemplo de aplicativo de correio eletrônico e o exemplo de aplicativo de calendário
eletrônico.
Seria bom se o calendário pudesse ser mantido ou se o aplicativo de e-mail pudesse acessar esse calendário.
E sim, agendar reuniões e coisas do gênero.
Vimos que podemos exportar essas atividades, provedores de conteúdo ou qualquer outra coisa que escolhermos nesse
caso, mas também vimos que essa é uma ideia muito ruim, porque todos os outros aplicativos também podem acessá-los,
de modo que o desenvolvedor pode declarar essas atividades, provedores de conteúdo ou outros componentes com uma tecnologia própria,
o que significa que, se esse aplicativo for assinado pelo mesmo certificado, esses dois aplicativos poderão compartilhar
esses dados entre essa conexão.
Isso significa que essas atividades, provedores de conteúdo ou o que quer que estejamos falando não estão expostos ao
mundo inteiro.
Eles são apenas exportados para o aplicativo que foi assinado por esse desenvolvedor.
E isso é muito bom porque a troca de dados pode acontecer e também não há vulnerabilidade de segurança
até que o invasor tenha a chave privada, mas então todo o sistema ficará bagunçado.
Portanto, essa é uma maneira segura de trocar esses dados com base no processo de assinatura.
Portanto, não precisamos disso durante este curso para trocar dados com base no mesmo certificado de assinatura.
Mas é bom saber que essa opção existe porque, se você for um desenvolvedor, use-a em vez
de exportar suas atividades para o mundo exterior.
Falamos muito sobre a assinatura de um aplicativo e também falamos um pouco sobre os recursos úteis que acompanham
essa assinatura ou assinatura de um aplicativo.
Agora, queremos finalmente ver como assinar um aplicativo, pois essa é a última etapa necessária
para o nosso desafio final no final desta seção.
Então, vamos fazer uma rápida recapitulação.
Então, temos o APK do jogo.
Esse é o aplicativo que queremos modificar e nosso objetivo é o modo de jogo.
APK A versão modificada que está na cor roxa ou como você chama essa versão colorida.
O que temos que fazer é descompilar ou decodificar esse aplicativo primeiro.
Em seguida, obtemos a estrutura de diretórios, com a qual já estamos bastante familiarizados.
Conhecemos a finalidade desses arquivos e podemos fazer nossas modificações.
Por exemplo, se quisermos alterar o código-fonte, poderemos modificar os arquivos de smiley ou até mesmo os recursos.
Diretório de ativos e coisas do gênero.
Depois de fazermos a modificação, precisamos criar novamente essa estrutura de diretórios em um aplicativo.
E é isso que a APK Tool B faz.
Esse é o ponto em que estamos agora.
Portanto, agora precisamos assinar esse aplicativo para que possamos instalá-lo e o design pode ser feito com o sinal
de char.
Essa foi minha abordagem nos últimos sete anos, portanto, usando o assinador de caracteres, podemos assinar esse aplicativo.
Mas isso não está mais funcionando na versão 11 do Android.
Deparei-me com isso durante a preparação deste curso e fiquei muito assustado.
Por que ele não está mais funcionando?
O quê?
O que eles mudaram?
E coisas como essa.
Está bem.
E então descobri que eles mudaram o processo de design.
Portanto, o layout é um pouco diferente e é com isso que Char Sinha não está mais lidando.
Portanto, temos uma nova abordagem para isso, mas ela também não é tão complicada.
Basta usar primeiro a linha simples e depois o assinador de APK.
O que o zip line faz é preparar algumas compensações, alguns animais de estimação para o certificado, para que o aplicativo
tenha o certificado no local correto.
Portanto, se o certificado for maior ou menor, ele se encaixará no local correto neste momento e o aplicativo poderá fazer
referência a isso e instalar o certificado com êxito.
E, sim, é assim que podemos assinar um aplicativo agora para a versão 11 do Android, porque essa é
a versão mais atualizada e é isso que você merece ao adquirir este curso.
Uma solução funcional para a versão mais atualizada no momento.
Tudo bem.
Vamos ver como podemos fazer isso, pois a assinatura requer um certificado e uma chave privada.
Então, como podemos criar isso?
Portanto, nossos certificados precisam ser armazenados em um repositório de chaves, que é uma espécie de armazenamento.
E podemos criar um novo armazenamento de chaves abrindo um terminal usando a ferramenta de chaves e fornecendo os seguintes
parâmetros.
Parece um pouco complicado, sou totalmente honesto com você, mas vamos até o fim e você
descobrirá que podemos lidar com isso.
Portanto, o primeiro parâmetro é gerar uma nova chave, dash chain key, e isso simplesmente gera uma nova chave privada.
Depois, temos uma opção com traço V que não é detalhada.
É a impressão de um certificado em um formato legível por humanos.
Portanto, normalmente seu certificado será armazenado em um formato binário, mas com a opção dash li, podemos
dizer que ele é legível por humanos, o que é um pouco mais fácil depois.
Em seguida, precisamos fornecer um novo arquivo, e esse é o armazenamento de chaves.
Nesse caso, estamos criando um novo armazenamento de chaves porque esse arquivo não existe.
Em seguida, temos que fornecer um nome de alias, que é a referência ao nosso certificado.
Nesse caso, é apenas o nome de sublinhado do alias, mas podemos escolher o que quisermos.
Por exemplo, teste de Utme ou EpiPen ou certificado de hacking, coisas desse tipo.
Só precisamos nos lembrar desse nome de alias, mas também podemos imprimi-lo mais tarde.
É claro que, em seguida, usamos os algoritmos de chave, que é o RSA, um tamanho de chave.
Usamos o 2048 porque é apenas um certificado de hacking e não precisa ser tão seguro.
E depois temos a validade, uma palavra muito difícil de ser entendida como validade.
Sim, é isso mesmo.
Que simplesmente descreve quantos dias o certificado é válido.
Portanto, nesse caso, ele é válido por um ano e é tudo.
Em seguida, criamos nosso armazenamento de chaves.
Portanto, a próxima etapa agora é usar esse armazenamento de chaves, o certificado dentro desse armazenamento de chaves para assinar esse aplicativo.
E é aqui que o Sha signer foi usado no passado.
Podemos usar o char sign signer com os parâmetros que fornecemos.
Só precisamos fazer referência ao nome do alias.
Portanto, o nome de alias que está em laranja aqui é o nome de alias que foi definido como a referência para o
certificado no armazenamento de chaves.
Portanto, esses nomes precisam ser semelhantes, é claro.
Caso contrário, o char sign não consegue encontrar o certificado no armazenamento de chaves e é isso.
E depois de usar o char signer, também podemos usar o zip align para atender a esses deslocamentos.
Mas isso não foi tão necessário no passado.
Às vezes era necessário, mas é muito raro.
Então, acho que usei, digamos, de cinco a dez vezes nos últimos sete anos, o alinhamento do CEP para obter
o certificado correto.
Mas isso mudou agora.
Portanto, agora temos que fazer a abordagem para a versão 11 do Android.
E o mesmo ocorre com relação ao arquivo de armazenamento de chaves.
Portanto, estamos criando um novo armazenamento de chaves e, depois de criar esse armazenamento de chaves, agora usamos o alinhamento de zip primeiro
e, depois, simplesmente usamos o APK Signer e fornecemos o arquivo do armazenamento de chaves e o arquivo APK, e isso é tudo.
Portanto, eu recomendaria que déssemos uma olhada nessa abordagem e mantivéssemos essa abordagem, e não a outra,
porque essa é a mais atualizada e funcionará em todas as versões.
Tudo bem.
Então, vamos fazer isso agora na prática.
Tudo bem.
Bem-vindo de volta.
Toda essa teoria pode ser um pouco confusa, portanto, vamos fazer isso na prática e então você
verá.
Ok, não é tão difícil assim.
Agora, criamos nosso próprio armazenamento de chaves e assinamos um aplicativo com um certificado que está armazenado nesse armazenamento
de chaves.
Então vamos lá.
Abrimos um novo terminal, o tornamos um pouco maior e...
Em seguida, usamos esse comando de ferramenta principal.
Mas antes.
Vamos nos certificar disso.
Está bem.
Não há nenhuma loja de chaves disponível aqui.
Coloquei-o no diretório home, mas você pode colocá-lo onde quiser.
Você só precisa se lembrar da referência, é claro.
Portanto, estou usando o comando key tool aqui.
E você também pode encontrar isso na folha de dicas em PDF anexada a este curso.
Portanto, se você quiser copiar e colar isso, fique à vontade.
Caso contrário, analisaremos os parâmetros e você também poderá digitá-los.
Agora temos esse alias de ferramenta principal.
Esse é o nome do alias e é a referência ao certificado que será armazenado nesse armazenamento de chaves posteriormente.
Portanto, estamos criando um novo armazenamento de chaves e um novo certificado de assinatura em uma única etapa.
Isso é feito com o parâmetro chain key aqui.
O erro dos algoritmos de chave é o tamanho da chave e este aqui é agora o arquivo de armazenamento de chaves.
Então, coloquei isso no diretório atual com o nome Android Dash app dash dash key store signature
algorithms sha one e a validade, que ainda é uma palavra difícil, é de 365 dias.
Em seguida, temos o painel contra quatro.
Faça com que o certificado seja legível por humanos e não seja detalhado.
Esse não é um sinalizador detalhado.
Isso torna o certificado legível para humanos.
Agora, precisamos terminar nossa senha.
Por quê?
Porque é uma loja de chaves.
E esse armazenamento de chaves é um tipo de cofre.
E esse cofre deve ser protegido por uma senha.
A senha padrão para aplicativos Java ou armazenamentos de chaves Java é alterá-la.
E eu me atenho a isso, mas você pode escolher o que quiser aqui.
Tenho que digitar isso novamente e agora precisamos definir os parâmetros do nosso certificado de assinatura.
Portanto, temos que fornecer o nome e o sobrenome e podemos pegar o que quisermos.
Podemos deixá-los desconhecidos ou definir valores porque este é um certificado autoassinado e não nos importamos
com isso.
Portanto, sim, podemos colocar os valores que quisermos.
Tudo bem.
Escolhi aqui a Udemy, por exemplo, e aqui o hacking.
E isso é desconhecido.
Isso é desconhecido, isso é desconhecido.
Isso é desconhecido.
E esta é a última pergunta principal: se você passou no teste, porque se você pressionar Enter,
terá que repetir a etapa agora.
Portanto, aqui o arquivo de armazenamento de chaves está verificando se todos esses valores estão corretos.
E, sim, no meu caso, eu digitei nosso nome.
Sim.
Em seguida, digite e o armazenamento de chaves será gerado.
Se você se deparou com essa mensagem e já respondeu "não", repita a etapa até chegar aqui novamente.
Tudo bem.
Ele diz que um novo certificado foi gerado e também um novo armazenamento de chaves que está aqui agora.
Vamos verificar isso.
Temos um novo arquivo e este é o Android Key Store.
Se você quiser imprimir esses valores, deixe-me limpar isso rapidamente.
Podemos usar a ferramenta de chave com o comando Dash L list.
Em seguida, precisamos fornecer o arquivo de armazenamento de chaves, aplicativo Android, armazenamento de chaves, e então podemos listar esses
certificados.
É claro que precisamos fornecer a senha correta para isso.
E aqui podemos ver que temos um certificado que é referenciado pelo nome de sublinhado Alias.
Esta é a impressão digital e aqui estão alguns recursos.
Ele é assinado com SHA1, com RSA e coisas do gênero.
Agora, se você quiser adicionar um novo certificado a esse armazenamento de chaves, podemos usar o mesmo comando.
Portanto, com a mesma tecla do comando, você pode usar as teclas de seta do teclado para navegar no histórico.
Portanto, use as teclas de seta para cima três ou quatro vezes.
Em seguida, você recebe o comando de volta.
A única coisa que precisamos alterar é, obviamente, o nome do alias, porque essa é a referência
ao certificado e, nesse caso, escolhi a Udemy.
Agora, você não precisa fazer isso.
Estou apenas mostrando isso para que você entenda o que está acontecendo aqui.
Também faço uma boa explicação.
Espero que depois seja agradável com minha prancheta.
Portanto, sim.
Sente-se e relaxe.
Limite-se a um único certificado.
Você ficará bem com isso.
Está bem.
E um passaporte de loja de chaves.
Para mim, isso mudou.
Agora eu digo que sou um desenvolvedor.
A Aptiv e esses dados estão corretos.
Agora, o segundo certificado foi adicionado.
Limpe a tela.
Vamos verificar isso.
Tudo bem.
Podemos ver duas entradas.
Temos um nome de alias e agora temos a Udemy.
E essa Udemy agora tem apenas o status de certificado de desenvolvedor.
Ok, deixe-me mostrar a minha prancheta de desenho e mostrar o que fizemos até agora para que você possa acompanhar isso com um pouco
mais de facilidade.
Portanto, aqui estamos no diretório home e o que fizemos foi criar um novo armazenamento de chaves com o comando generate
new key.
Também adicionamos novos certificados.
No nosso caso, agora existem dois certificados.
Um é referenciado pelo nome de sublinhado do alias e o outro é referenciado com o alias chamado Udemy.
Portanto, agora ambos estão armazenados nesse armazenamento de chaves.
E, se você quiser usar um deles, será necessário fornecer o nome de alias correto.
É claro que, para isso, temos que fornecer o nome do alias.
E, para isso, temos que fornecer a Udemy.
Isso é o que fizemos até agora.
Muito bem, agora vamos assinar nosso aplicativo.
Compilamos e editamos os contatos anteriormente em um aplicativo de painel espacial.
Então, deixe-me mostrar isso rapidamente para você.
Aqui estamos, espaço pagando a descompilação.
Aqui temos espaço e aqui temos o exemplo de manifesto do Android com a permissão recém-adicionada bem
aqui.
Em seguida, compilamos novamente esse aplicativo e temos esse destino e aqui temos nosso APK básico. Agora, queremos
atribuir esse APK e instalá-lo em nosso dispositivo virtual.
Mas antes de fazermos isso, deixe-me mostrar algo bem rápido, pois esse aplicativo não foi assinado
até o momento.
Eu lhe mostrarei.
Eu uso o ADB Shell.
Bem, não, eu sou um escritor.
Tenho que iniciar o emulador primeiro.
Então, iniciei esse emulador agora mesmo, vejamos, ADB, Shell, sem dispositivos.
É claro que eu me conectei a isso primeiro.
Tudo bem.
Agora ele está funcionando e eu uso o ADB para instalar o APK básico.
E isso diz: não, não vou instalar esse aplicativo porque ele não tem certificado de assinatura.
Vamos descompilar e verificar isso.
Portanto, a ferramenta apk é baseada no apk básico, que é o código.
Mas eu digo descompilar.
Vamos abrir isso em um diretório.
E, no diretório original, deveria haver esse diretório meta inf, mas ele está ausente.
E o diretório meta info contém todas as informações de design do arquivo de assinatura, do arquivo de manifesto
e também da própria assinatura.
Portanto, esse não foi adicionado no momento.
Se agora assinarmos esse aplicativo e ele for compilado posteriormente, deverá haver um diretório meta
inf correspondente ao nosso certificado.
Então, vamos fazer isso.
Vou excluir o diretório base.
Se você já me seguiu até agora, tome cuidado para não excluir a base.
AP Ok, tudo bem.
E agora usamos a linha zip primeiro para garantir que o alinhamento e os deslocamentos estejam corretos depois.
Então, vamos dar uma olhada nos parâmetros da tirolesa.
Temos uma linha zip e, em seguida, deve haver uma saída detalhada e temos que usar um alinhamento que, nos aplicativos
Android, é sempre para bytes.
Agora, precisamos fornecer um arquivo de entrada, que é o nosso APK básico, e um arquivo de saída, porque o alinhamento
do zip não está fazendo essa operação no mesmo arquivo.
Por isso, chamamos esse APK de exemplo.
Ele salva a verificação com êxito.
Portanto, esse aplicativo já foi assinado.
Usamos o assinador de APK para instalar esse aplicativo agora mesmo.
Portanto, registre-se no APK.
Dizemos que assinamos usando esse armazenamento de chaves e usamos nosso arquivo APK externo.
O passaporte foi alterado.
E agora, no meu caso, ele diz: "Ooh, há mais de uma entrada de certificado".
Temos que escolher qual deles queremos usar.
Se você tiver apenas um certificado em sua keystone, será multado.
Ele usará automaticamente este.
Nesse caso, eu simplesmente digo dash, dash keys, key alias.
E, no meu caso, uso, por exemplo, Udemy, ou agora digamos que uso o alias underscore name.
Então, somos equivalentes e temos o certificado semelhante e coisas do gênero.
Não um certificado semelhante, mas o nome de alias semelhante.
Ah, e certifique-se de que os parâmetros estejam no local correto em seus argumentos para que isso não seja possível
depois.
Temos que fazer isso antes.
Tudo bem.
Agora preciso usar a senha novamente e, sim, não há mensagem de erro.
Portanto, presumo que esse aplicativo já tenha sido assinado.
E aqui podemos ver nosso novo arquivo APK e esse arquivo pode ser simplesmente ignorado.
Portanto, agora podemos dizer adb install out APK.
E recebemos um erro porque a assinatura do nome do pacote não corresponde à versão instalada anteriormente.
Já instruímos o aplicativo space ping anteriormente e agora queremos atualizar esse aplicativo com uma assinatura
diferente.
Foi nesse caso que falamos sobre o processo de design.
Não podemos atualizar um aplicativo com base no mesmo nome de pacote, mas com um certificado diferente.
Portanto, temos que desinstalar isso primeiro ou temos que fazê-lo.
Também podemos usar a instalação do ADB para substituir esse arquivo, mas a desinstalação é muito mais limpa.
Portanto, vamos desinstalar esse aplicativo.
Então, eu pego isso.
Mantenho-o pressionado por muito tempo com o botão esquerdo do mouse e, em seguida, simplesmente arrasto-o para desinstalar.
Tudo bem.
Painel de espaço desinstalado.
Agora, vamos instalar nossa versão modificada com a permissão de contexto.
Portanto, se o processo de instalação estiver travado neste momento, dê uma olhada na máquina virtual, porque aqui podemos
ver, oh, está bloqueado pelo play protect porque não inclui as proteções de privacidade mais recentes, mas podemos
dizer para instalar mesmo assim.
E não queremos enviar notificações ao Google.
Portanto, agora devemos ter esse aplicativo instalado.
Portanto, agora temos esse aplicativo instalado e, se você clicar nele.
Podemos ver que está funcionando.
Portanto, agora podemos começar a jogar esse jogo.
Mas sim, já fizemos isso.
Mas se você quiser se familiarizar com ele, fique à vontade para continuar.
Vou parar e dar uma olhada nas configurações e nas permissões desse aplicativo.
Portanto, aplicativos.
SpaceX ping a permission.
Não.
Este aqui.
E aqui podemos dizer que podemos ver os registros de chamadas e os contatos.
Portanto, agora temos duas permissões adicionadas ao lado da evaporação.
O Evaporate não está listado aqui porque esse aplicativo não solicita a permissão em uma máquina virtual.
Mas aqui podemos ver que nossa modificação foi bem-sucedida.
Adicionamos permissão a esse aplicativo, o que é ótimo.
No próximo vídeo, daremos uma olhada no diretório de meta informações, pois ele está faltando agora em
nossa estrutura do Android.