Convite "Receber" para o assistente de voz Hound



Muitos viram um vídeo de demonstração do assistente pessoal Hound, que é o mais poderoso possível e está à frente de aplicativos conhecidos como Google Now e Siri. O Hound também está disponível para download gratuito no Google Play (nos EUA), mas, infelizmente, está em desenvolvimento e requer um convite na inicialização.

Imediatamente minhas mãos foram vasculhadas urgentemente para testar esse milagre e, cansada de esperar por um convite por correio (cerca de um minuto depois), peguei o depurador ... o que eu nunca precisava, porque tudo parecia mais simples, mas sobre isso em ordem.

Nota: Eu não sou um desenvolvedor profissional de Android, cracker etc., tudo é feito para satisfazer minha própria curiosidade e por meu próprio risco. Relate quaisquer imprecisões nos comentários ou em mensagens privadas.

Primeiro de tudo, você precisa obter o arquivo apk com o aplicativo. Você pode pesquisar na Internet, mas não estamos procurando maneiras fáceis. Baixei a versão mais recente do Google Play e retirei o aplicativo da pasta /data/app/com.hound.android.app-1 (requer direitos de administrador, ou seja, root).

Qualquer aplicativo para Andoid é um arquivo apk, que na verdade é um arquivo zip renomeado. Se você o abrir com qualquer arquivador, veremos a seguinte figura:



Considere o conteúdo com mais detalhes:
  • assets — , , ,
  • lib — .so .
  • META-INF — apk , SHA1 . , , . , , Android , .
  • res — , xml , .
  • AndroidManifest.xml — , , .
  • classes.dex — , (), Java.
  • resources.arsc — , , , res, .

Temos a sorte de que quase todo o aplicativo, com exceção das bibliotecas de terceiros, seja escrito em Java, o que significa que não precisamos ficar no depurador e desmontar o código de baixo nível.

Agora você precisa descompactar o classes.dex e tentar obter o código dele. Para isso, usamos o Apktool . Na página “Instalar”, baixe o arquivo jar executável, bem como um wrapper para usá-lo na linha de comando. Basta copiar os dois arquivos para a pasta do aplicativo (ou adicionar à variável de ambiente) e executar o seguinte comando:

apktool -r decode _.apk

A opção -r é necessária para não perder tempo descompactando recursos que não editaremos.

Agora, na pasta com o mesmo nome do aplicativo, já vemos um pouco mais do que no arquivador. O arquivo classes.dex agora está ausente e, em vez disso, é exibida a pasta smali, na qual as classes são armazenadas como arquivos de texto. Mas ei, onde está o Java? Existem alguns arquivos com a extensão .smali, que armazenam algo remotamente semelhante ao assembler.

Essa é a linguagem do opcode da Dalvik na qual o código Java é compilado. Existem aplicativos que podem tentar restaurar o código-fonte desses arquivos, mas você precisa alterá-lo posteriormente, e a reconstrução do código Java é uma tarefa ingrata. Portanto, entenderemos o código smali, já que é bastante compreensível, e também os nomes das funções permaneceram intactos nele. Que vamos usar.

Encontre o código responsável pelo acesso ao aplicativo. Conhecendo o nome do aplicativo e o idioma inglês, fica claro que as principais classes do aplicativo estão na pasta smali / com / hound / android / appcommon . O problema é encontrar o local em que o convite está marcado. A pesquisa de arquivos nos ajudará, por exemplo, no Windows, você pode usar o comando:

findstr /s /i /m _ *.*

O código pode conter "convite" ou "convite", portanto, removeremos a última letra da palavra e procuraremos "convite". Bingo, aqui está, o método isInvitationComplete () no arquivo smali / com / hound / android / appcommon / app / Config.smali :

.method public isInvitationComplete()Z
    .locals 2

    .prologue
    .line 578
    const v0, 0x7f080174

    const v1, 0x7f0b001f

    invoke-direct {p0, v0, v1}, Lcom/hound/android/appcommon/app/Config;->getBoolean(II)Z

    move-result v0

    return v0
.end method

Ele solicita uma variável booleana dos parâmetros do aplicativo e retorna seu valor. Mas por que precisamos de tais dificuldades! Vamos sempre voltar verdadeiro . Substitua “move-result v0” por “const / 4 v0, 0x1” e salve o arquivo. Vamos torcer para que todo o aplicativo dependa dessa pequena função, que a partir de agora nos considerará testadores beta completos.

Resta apenas montar o aplicativo novamente. Usamos o maravilhoso utilitário Apktool novamente:

apktool -r build _

Não esqueça que precisamos descompactar toda a pasta antes disso, e não apenas smali . Depois que o apktool terminar o trabalho, vá para esta pasta e depois para dist , onde o arquivo apk montado está localizado.

E não vai funcionar, ou melhor, não será instalado. Alteramos o conteúdo do aplicativo, o que significa que a assinatura agora é inválida. Você deve assinar novamente o aplicativo. Se você é um desenvolvedor do Android, pode usar sua própria assinatura e o SDK do Android. Mas muitos não têm nenhum deles, eles podem usar uma assinatura de teste e extraídos separadamente do utilitário SDK signapk.jar. Há também um utilitário sign.jar que já possui uma assinatura incorporada. Basta executar o seguinte comando:

java -jar sign.jar _.apk

A seguir, aparece o arquivo file_name.s.apk , que será o aplicativo assinado. Fazemos o upload para o dispositivo, instalamos e desfrutamos do aplicativo totalmente funcional!



E você pode simplesmente encontrar na Internet uma versão corrigida que alguém postou recentemente.

All Articles