Em uma tarde lânguida e já bastante entediante, eu, folheando o aplicativo oficial do Habr, mais uma vez torci os dedos, um para cada recurso ocioso. Aqui, por exemplo, é impossível comentar, eles têm o direito de votar e, em geral, por que as fórmulas não são visíveis na tela?
Foi decidido: você precisa de algo confortável, agradável, seu. E o seu aplicativo para Habr?
Vamos fazer algumas capturas de tela para entender a situação.
De alguma forma, parece com isso - de. aplicação habr.comA lista de "inconvenientes"- Você não pode avaliar uma publicação cuja classificação seja diferente de 0
- Nem sempre é possível escrever um comentário
- Pesquisas não funcionam
- As fórmulas não são visíveis no tópico escuro (preto no preto)
- Nem todos os favoritos estão disponíveis
Sim, o aplicativo não foi atualizado desde agosto passado, mas ainda está ruim. Em geral, você precisa corrigi-lo.
Parte I Em busca de acesso.
Uma solicitação rápida para a "API habrahabr" do Google já foi emitida pelo obsoleto repositório do github, que não é atualizado desde 21 de novembro de 2016 , e isso, por um minuto, dura dois anos e meio .
Ignorando o fato de que isso é PHP, role para baixo e leia:
Obter ID do aplicativo
Usando este formulário no Habrahabr, você precisa descrever brevemente a essência do novo aplicativo e o objetivo para o qual ele precisa de uma API.
Não é uma pergunta se você precisa obter acesso, então precisa. Escrevemos uma carta (em abreviação):
Uma cartaHá um desejo de fazer um pedido de Habr baseado no PWA. Existem várias razões para isso.
O primeiro e mais compreensível: o aplicativo Android não atende aos meus requisitos pessoais.
Segundo: não há notificações nativas suficientes sobre todos os tipos de coisas que geralmente chegam aos correios (comentários, por exemplo).
Terceiro: resumos pessoais (em perspectiva) para as pessoas / centros que me interessam, dados meus interesses.
A resposta, é claro, não foi muito agradável, mas pelo menos honesta:
Infelizmente, o acesso à nossa API não está disponível no momento. Planejamos retomar o acesso depois de concluir a finalização da API, mas ainda não temos datas exatas, porque no momento, estamos ocupados resolvendo outras tarefas prioritárias.
"Ok, isso não importa! Nós vamos criar algo! " Eu disse a mim mesma e comecei a procurar.
Parte Dois Escavação profunda.
Com base na lógica, se o aplicativo funcionar, ele terá acesso à API e será conectado ao aplicativo. Vamos analisar.
Como estamos lidando com tráfego, o Wireshark é a nossa escolha. Não sem tormento, conectando o telefone à Internet através de um computador estacionário, abra o aplicativo e observe as solicitações:
Claro que nada está claroSim, tudo está criptografado, mas não quero mexer com criptografia. Então você precisa olhar dentro do próprio aplicativo.
Tendo descompilado .apk , começamos a pesquisar. Do que qualquer API precisa? É isso mesmo, ponto final , o lugar onde todas as solicitações vão. Provavelmente é http, tente encontrar "https: //":
No arquivo AuthLinkManager.smali
, encontramos
.field OAUTH:Ljava/lang/String; = "https://habrahabr.ru/auth/o/%s/" .field OAUTH_PARAMS:Ljava/lang/String; = "?client_id=%s&response_type=token&redirect_uri=%s" .field OAUTH_REDIRECT_URL:Ljava/lang/String; = "http://cleverpumpkin.ru"
Este é o código para a máquina virtual Android ( Dalvik VM ), não muito claro para os seres humanos, mas ainda bastante informativo. Essas três constantes, a julgar por seu conteúdo e nome, assim como o repositório GitHub, são usadas para solicitar um token de acesso usando o método GET
.
Nós olhamos mais longe. O próximo arquivo NetworkModule.smali
que você encontra na sua pesquisa:
const-string v0, "https://habr.com/api/v1/"
E aqui é o lugar para ir com pedidos!
Há apenas uma coisa a descobrir para o cliente client_id
funcionar corretamente - client_id
, que provavelmente é um identificador exclusivo para o aplicativo.
No entanto, as pesquisas deste texto nas fontes não levaram a encontrar informações relevantes ...
Mas de repente, em um arquivo, meus olhos pegaram linhas interessantes:
const-string p8, "log-tag" invoke-static {p8, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
Isso, como você pode entender, é uma entrada de log. Mas um registro do que?
Parte três. Aqui estão os logs!
Usamos adb logcat
para visualizar os logs do aplicativo.
Inesperadamente, mas os logs foram ainda mais detalhados do que o esperado.
Aqui não é apenas o client_id
que client_id
, mas também o token de usuário / aplicativo, bem como o login e a senha em texto sem formatação!
Algumas teorias da conspiraçãoA presença de logs de logon e senha em si não prejudica nada, pois esses logs podem ser lidos apenas com direitos de root ou uma conexão adb
. Mas, devido ao fato de que, entre as pessoas que leem Habr, há desenvolvedores no Android que podem ter a depuração ativada, isso se torna um problema.
Nesse caso, a “cobrança gratuita” no aeroporto pode resultar em roubo da conta , embora quem precise?
Nesses logs, você pode fazer:
client_id
e apikey
necessários para acessar a API ;- URL de autorização do usuário (estranho, mas não há nada no repositório sobre esse método, talvez ele não seja fornecido?)
E assim aconteceu. Com base neste pequeno estudo, o trabalho já está em andamento em um pequeno projeto - sua própria implementação de um aplicativo móvel. Se você quiser ajudar, escreva mensagens e todos os outros - para votar (porque eu quero entender se alguém precisa disso).
Obrigado pela atenção!