En una tarde lánguida y ya bastante aburrida, yo, hojeando la aplicación oficial del Habr, volví a doblar los dedos, uno para cada función inactiva. Aquí, por ejemplo, es imposible comentar, se les niega el derecho de voto y, en general, ¿por qué las fórmulas no son visibles en la pantalla?
Se decidió: necesitas algo cómodo, agradable, tuyo. ¿Qué hay de tu aplicación para Habr?
Veamos algunas capturas de pantalla para comprender la situación.
De alguna manera se ve así - de. aplicación habr.comLa lista de "inconvenientes"- No puede calificar una publicación cuya calificación es diferente a 0
- No siempre es posible escribir un comentario.
- Las encuestas no funcionan
- Las fórmulas no son visibles en el tema oscuro (negro sobre negro)
- No todos los marcadores disponibles
Sí, la aplicación no se ha actualizado desde agosto pasado, pero sigue siendo mala. En general, necesitas arreglarlo.
Primera parte En busca de acceso.
El repositorio github obsoleto ya ha emitido una solicitud rápida a Google "API de habrahabr" , que no se ha actualizado desde el 21 de noviembre de 2016 , y esto, por un minuto, es de dos años y medio .
Ignorando el hecho de que esto es PHP, desplácese hacia abajo y lea:
Obtener ID de aplicación
Al usar este formulario en Habrahabr, debe describir brevemente la esencia de la nueva aplicación y el propósito para el cual necesita una API.
No es una pregunta si necesita obtener acceso, entonces necesita hacerlo. Escribimos una carta (en abreviatura):
Una cartaExiste el deseo de hacer una solicitud para Habr basada en PWA. Hay varias razones para esto.
El primero y más comprensible: la aplicación de Android no cumple con mis requisitos personales.
Segundo: no hay suficientes notificaciones nativas sobre todo tipo de cosas que generalmente llegan a la oficina de correos (comentarios, por ejemplo).
Tercero: resúmenes personales (como perspectiva) para las personas / centros que me interesan, dados mis intereses.
La respuesta, por supuesto, no fue muy agradable, pero al menos honesta:
Desafortunadamente, el acceso a nuestra API no está disponible actualmente. Planeamos reanudar el acceso después de que finalicemos la finalización de la API, pero aún no tenemos fechas exactas porque En este momento estamos ocupados resolviendo otras tareas prioritarias.
"Está bien, ¡no importa! ¡Se nos ocurrirá algo! " Me dije a mí mismo y comencé a buscar.
Segunda parte Excavación profunda.
Según la lógica, si la aplicación funciona, entonces tiene acceso a la API y está conectada a la aplicación. Analicemos
Como estamos lidiando con el tráfico, Wireshark es nuestra elección. No sin tormento conectando el teléfono a Internet a través de una computadora estacionaria, abra la aplicación y mire las solicitudes:
Claro que nada está claroSí, todo está encriptado, pero no quiero meterme con la criptografía. Entonces debes mirar dentro de la aplicación misma.
Habiendo descompilado .apk , comenzamos a buscar. ¿Qué necesita cualquier API? Así es, punto final , el lugar donde van todas las solicitudes. Esto es probablemente http (s), intente encontrar "https: //":
En el archivo 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 es el código para la máquina virtual Android ( Dalvik VM ), no muy claro para los humanos, pero aún bastante informativo. Estas tres constantes, a juzgar por su contenido y nombre, así como el repositorio de GitHub, se utilizan para solicitar un token de acceso utilizando el método GET
.
Nosotros miramos más allá. El siguiente archivo NetworkModule.smali
que encuentre en su búsqueda:
const-string v0, "https://habr.com/api/v1/"
¡Y aquí está el lugar para ir con las solicitudes!
Solo queda una cosa por descubrir para que el cliente client_id
funcione correctamente: client_id
, que probablemente sea un identificador único para la aplicación.
Sin embargo, las búsquedas de este texto en las fuentes no condujeron a encontrar información relevante ...
Pero de repente, en un archivo, mis ojos se encontraron con líneas interesantes:
const-string p8, "log-tag" invoke-static {p8, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
Esto, como puedes entender, es una entrada de registro. ¿Pero un registro de qué?
Tercera parte Aquí están los registros!
Usamos adb logcat
para ver los registros de la aplicación.
Inesperadamente, pero los registros fueron aún más detallados de lo esperado.
¡Aquí no solo client_id
el client_id
, sino también el token de usuario / aplicación, así como el nombre de usuario y la contraseña de texto sin formato!
Algunas teorías de conspiraciónLa presencia de registros de inicio de sesión y contraseña en sí no daña nada, ya que estos registros solo se pueden leer con derechos de root o una conexión adb
. Pero debido al hecho de que entre las personas que leen a Habr, hay desarrolladores en Android que pueden habilitar la depuración, esto se convierte en un problema.
En este caso, el "cargo gratuito" en el aeropuerto puede resultar en el robo de la cuenta , aunque ¿quién lo necesita?
De estos registros puedes hacer:
client_id
y apikey
necesarios para acceder a la api ;- URL de autorización del usuario (extraño, pero no hay nada en el repositorio sobre este método, ¿tal vez no se proporciona?)
Y así sucedió. Según este pequeño estudio, el trabajo ya está en marcha en un pequeño proyecto: su propia implementación de una aplicación móvil. Si desea ayudar, escriba mensajes y todos los demás para votar (porque quiero entender si alguien lo necesita).
Gracias por su atencion!