Então, aqui estamos de volta à nossa conhecida VM do Ubuntu.
E o que fizemos até agora foi sempre descompilar um aplicativo, modificá-lo, compilá-lo novamente
e, em seguida, assiná-lo com nosso próprio certificado.
Não seria bom se pudéssemos modificar um aplicativo existente com o certificado original?
Acho que isso depende do ponto de vista, pois isso também significaria que todo o sistema Android
estaria quebrado e que você poderia infectar as pessoas com malware tendo certificados originais.
Então, para mim, eu diria que não, isso não seria tão bom.
Mas para um agressor, é claro que isso seria ridículo.
Legal.
E essa foi a abordagem dessa vulnerabilidade.
Um invasor pode modificar um aplicativo existente com o certificado original explorando um bom comportamento
durante a verificação desse processo.
Mas, antes de começarmos, vamos verificar o que aconteceria se você modificasse um aplicativo existente e,
portanto, eu entraria primeiro no diretório original do aplicativo.
Então, abro o painel de espaço do aplicativo de arquivos e aqui temos o arquivo APK.
Podemos clicar duas vezes ou clicar com o botão direito do mouse para abrir com o Archive Manager e, em seguida, temos o arquivo zip no qual
podemos acessar diretamente esses arquivos.
Então, vamos para o diretório de ativos e usamos um arquivo que não está em formato binário.
Portanto, não há arquivos do Excel.
Vejamos.
Pele.
Seus olhos, sua pele.
Jason, este aqui.
Pronto, agora abriremos este e faremos nossa modificação.
Dizemos, por exemplo, que este um agora é um dois.
Salvamos esse arquivo.
Dizemos atualização?
E agora modificamos esse arquivo APK aqui mesmo e vamos instalar esse aplicativo.
Então, clico com o botão direito do mouse e digo para abrir um novo terminal, pois já estou nesse diretório aqui.
Em seguida, digo que o ADB se conecta e o ADB instala esse aplicativo.
Agora ele diz: "Ah, há uma verificação e a verificação falhou porque".
O manifesto.
O MV tem um resumo inválido, e é por isso que passamos por todo esse processo.
Para que servem esses hashes e coisas desse tipo na seção de decisão imediatamente anterior.
Portanto, sabemos como calcular esse valor e por que o resumo foi alterado neste momento.
Então, vamos fazer isso rapidamente.
Então, entramos no diretório de ativos, vamos para o skin, abrimos o rastreamento do skin da interface do usuário e também
fazemos nossa modificação aqui.
E então usamos esse arquivo para calcular nossa soma SHA1.
Assim, aberto como é l sha one binary ui skin dot chaisson.
Muito bem, agora canalizamos isso pelo base64 e substituímos esse valor no arquivo do pacote.
Então, eu abro isso em um novo painel de espaço de terminal.
Este aqui.
Diretório MI ten.
Manifest MF e procuramos tons de pontos de pele de IU e você não precisa fazer isso porque será um beco sem saída no final,
então você pode sentar e relaxar enquanto eu faço isso.
Agora modificamos este aqui e também precisamos alterar o hash no arquivo de assinatura.
Portanto, copio e colo este aqui.
E, em seguida, usamos o álbum como um comando referente ao nome e um resumo para calcular o hash do arquivo de
assinatura.
Portanto, este é um deles, este aqui.
Se essas coisas forem muito complexas, uma maneira mais fácil seria fazer essa modificação em nosso aplicativo original.
Portanto, descompile esse aplicativo, faça essa modificação e, em seguida, compile-o novamente.
Porque assim todos esses hashes foram atualizados automaticamente e podemos simplesmente copiá-los e colá-los a partir
daí.
Mas, sim, também estamos prontos por enquanto.
Portanto, isso não é realmente mais rápido, mas é muito mais fácil.
Muito bem, aqui temos essa segunda assinatura.
Então, depois de mudarmos esse, eu nos atualizei?
Acho que sim.
Sim.
Vamos verificar isso rapidamente para que eu não bagunce algo durante esse processo de copiar e colar.
Então vocês podem.
É este aqui.
Sim, é isso mesmo.
Tudo bem.
E agora vamos para o arquivo de assinatura.
Este aqui.
Vocês podem e este precisa ser substituído agora mesmo por este aqui.
Por isso, ajustamos esses hashes.
Essa é uma operação normal e todos podem fazer isso.
Vamos ver o que acontece se tentarmos instalar esse aplicativo agora mesmo.
Se clicarmos em atualizar, fecharemos todas essas janelas.
Ops.
E agora dizemos para abrir um novo terminal e dizemos instalador do ADB.
Tudo bem.
Ainda recebemos um erro, mas ele não está mais relacionado ao manifesto EMF.
Trata-se de dois certificados com falha, verificação com falha no arquivo de assinatura.
Aqui.
Portanto, aqui podemos ver que temos um novo erro.
Agora, isso se refere à instalação de certificados de aprovação ou reprovação.
Não é com o EMF manifesto.
Calculamos esses hashes.
Correto.
E também os colocamos na posição correta.
Portanto, essa parte foi bem-sucedida, mas agora ele diz para instalar o certificado de aprovação ou reprovação ajustando esses
arquivos ou modificando esses arquivos.
De fato, quebramos a assinatura desse APK e isso é algo que ainda não podemos corrigir, pois é algo que somente
o desenvolvedor pode fazer por ter a chave privada.
Portanto, não temos a chave privada e não podemos modificar esses arquivos.
Então, como essa exploração foi possível para contornar esse problema?
Bem, ele não contornou o processo de assinatura porque é bastante estável e você provavelmente o criou.
Portanto, não há nenhum problema no processo de assinatura.
Mas há um problema no processo de verificação.
E isso é algo que eu gostaria de mostrar a você agora mesmo.
Está bem.
Portanto, aqui eu restaurei a versão original porque modificamos a última.
Portanto, temos uma base limpa e podemos instalar esse aplicativo apenas para ter certeza de que
é o original e podemos instalá-lo.
Sim.
Sucesso.
Está bem.
Portanto, se você abrir isso, não poderemos modificar esses arquivos.
Mas e quanto a adicionar um arquivo?
Bem, vamos ver.
Vejamos, por exemplo.
Este aqui, o APK para medir as informações.
Tudo bem.
Ele foi incluído no arquivo.
Agora vamos tentar instalar este.
Aqui temos o erro de que não há nenhuma entrada para esse arquivo disponível no aplicativo.
Portanto, adicionar arquivos completamente novos não funciona.
Mas o que acontece se adicionarmos um arquivo com exatamente o mesmo nome?
Por exemplo, se adicionarmos um novo arquivo de texto de classe.
Então, vamos descobrir isso.
Primeiro, vou excluir esse arquivo para recuperar o estado original e agora adicionar um novo arquivo de texto de classe
com exatamente o mesmo nome.
Então, vamos ver o que acontece.
E aqui temos essa classe de texto armazenado.
Então, vamos ver o que acontece se arrastarmos e soltarmos este aqui.
Podemos ver que o tamanho do arquivo foi alterado, portanto, esse arquivo foi sobrescrito.
Também não está funcionando dessa forma, portanto, não podemos adicionar arquivos com o mesmo nome exato em um único
diretório zip.
O que podemos fazer.
Bem, deixe-me obter o estado original aqui e agora.
Sim, vamos dar uma olhada em como isso funcionaria.
Tudo bem.
Aqui eu restaurei o valor original novamente.
Podemos ver que a data é a mesma e também 2. 1 e B, portanto, essa é a classe original, o arquivo de texto desse
aplicativo pagador básico aqui.
Volto ao nosso aplicativo CIF aqui e depois.
Renomeei esse arquivo porque é possível adicionar novos arquivos com novos nomes de arquivo.
Portanto, renomeamos a lista para class com set no final.
E agora colocamos isso aqui e podemos ver que, sim, temos ambas as classes, texto e classes com set no
final.
Agora, vamos abrir esse arquivo zip em um editor hexadecimal.
Então, volto ao aplicativo de patente espacial, este aqui, e digo para abrir as bochechas
do terminal e este aplicativo aqui, já podemos ver esses cinco nomes.
Portanto, estamos procurando.
A aula começa com o conjunto ponto x, e aqui temos um.
E o que fazemos agora é simplesmente alterar esse conteúdo binário pressionando esse conjunto e substituindo-o
por um SSE.
Tudo bem.
Agora encontre o próximo.
Aqui está um novamente.
E o próximo, só isso.
Agora, vamos salvar esse arquivo e abri-lo novamente para ver o que foi alterado.
Então, eu o abro e pronto, temos cinco nomes exatos em um arquivo zip.
Agora, a pergunta é: o que aconteceria se instalássemos esse aplicativo?
Quais classes?
O texto será instalado?
Bem, a resposta é a última que foi adicionada pelo invasor, e essa foi a vulnerabilidade exata.
Portanto, como é necessário especificar cinco nomes no arquivo zip, o último é instalado e não o anterior.
E esse também não é verificado.
Portanto, no último caso, o invasor é capaz de fornecer um novo código-fonte completo para esse aplicativo.
Pode ser o aplicativo original que foi modificado ou até mesmo um aplicativo completamente diferente.
E ter o certificado original e isso é ridículo, incrível, porque é como, sim, a evasão
do problema de segurança é muito genial.
Estou muito empolgado com isso.
É disso que se trata o hacking.
E, sim, isso é algo que se consegue com muita prática e pensamento criativo, e talvez seja útil
para outros aplicativos.
Então, vamos supor que você tenha um aplicativo de cliente e que ele realize a verificação
da mesma forma que o sistema Android fez em 2013.
Portanto, você pode contornar isso com essa verificação ou, pelo menos, talvez você possa contornar isso.
Isso é algo que você deve experimentar nesse momento, depois de uma sessão de relaxamento.
Agora você suja suas mãos.
Você precisa hackear esse aplicativo.
Portanto, vamos enfrentar o desafio e modificar esse aplicativo.