Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 14835|Respuesta: 3

Analizar el protocolo QQ Quick Login e implementar "CSRF"

[Copiar enlace]
Publicado en 21/3/2017 15:45:47 | | | |
Como todos sabemos, Tencent usó Activex para implementar el inicio de sesión rápido de QQ, usándolo en un navegador desconocido, y lo primero que hicieron fueron instalar el control QuickLogin.
Justo cuando no sé cuándo, el inicio de sesión rápido de repente deja de necesitar los controles.
En ese momento, estaba muy desconcertado, ¿qué método extraño usaba Tencent para interactuar con aplicaciones locales?

Sin plugins, las páginas web no deberían poder interactuar directamente con aplicaciones locales (a menos que se defina un protocolo, pero solo pueda ser llamado y no los resultados proporcionados por el programa).

Por casualidad (bueno, simplemente aburrido mirando el administrador de tareas y descubriendo el httpd nativo, y encontrando Apache en marcha), de repente me di cuenta de una posibilidad: si QQ abre un puerto local, crea un servidor web, es decir, un servidor TCP que cumple con el protocolo HTTP, y luego la página web ajax hace una petición a ese QQ (en este momento como servidor web), ¿puedes obtener el resultado?

Y ese es realmente el resultado.


Web JS inicia una solicitud GET para http://localhost.ptlogin2.qq.com (portaciones de 4300 a 4308, una a una hacia el éxito).
Si lo haces son, verás que es 127.0.0.1, y cuando revisas el puerto, efectivamente está en uso QQ.

Primera petición: /pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk de galletas, sea lo que sea; r es un número aleatorio

El resultado que se devuelve es un array JSON:
var var_sso_uin_list=[{"cuenta":"Iniciado en la cuenta de QQ","face_index":-1,"gender":0,"apodo":"Tu apodo de QQ","uin":"Sigue siendo tu cuenta de QQ","client_type":66818,"uin_flag":8388612}]; ptui_getuins_CB(var_sso_uin_list);

Luego usa http://ptlogin2.qq.com/getface para conseguir avatares de QQ, que no se discutirán aquí

De este modo, tu información de QQ puede mostrarse en la página web.

Cuando pulsas tu avatar (cuando seleccionas este inicio de sesión)

Se generan las siguientes solicitudes:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
De manera similar, r es un número aleatorio, pt_local_tk proviene de una cookie, local_token
¿Qué hace esta solicitud?


Bueno, Set-Cookie.

Luego procede con la solicitud
http://ptlogin2.qq.com/jump?clientuin=你的QQ号&keyindex=19&pt_aid=549000912&daid=5&u1=http%3A%2F%2Fqzs.qzone.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&pt_local_tk=1881902769&pt_3rd_aid=0&ptopt=1&style=40
La única U1 aquí es la dirección de destino

Esta solicitud te devolverá todas las cookies que necesites y ya estás conectado.

Así que, tras aprender el protocolo, se descubrió un problema serio: ¿qué ocurre si un programa (de corazón negro) hace estas cosas en nombre del usuario?

¡Empieza ya!

Solo tenía un Mac a mano, así que lo escribí en Obj-C.

[self GET:@"http://localhost.ptlogin2.qq.com:4300/pt_get_uins?callback=ptui_getuins_CB&r=0.47178753013324637&pt_local_tk=-1211438011" cabecera:nil];
//这里的GET是我自己封装的一个方法,GET网页上的数据

Nota: Debido a mi experiencia previa en bots QQ (basado en el protocolo WebQQ): el encabezado Referer es muy importante (debe ser un dominio .qq.com), y si está equivocado, fallará seguro. Así que aquí no hay rotondas

Por cierto, en ese momento era nuevo en Obj-C, y algunos códigos pueden parecer un poco absurdos, por favor perdóname.
//cookiedata是个NSDictionary




De este modo, se completa el inicio de sesión y puedes encontrar una interfaz de QQ Space (no publicada aquí), y la publicación es exitosa.

¿Qué significa esto? Esto significa que, mientras sea un programa que se ejecute localmente, existe la posibilidad de completar el inicio de sesión de QQ en lugar de tú, y realizar algunas operaciones complicadas en plataformas como QQ Space que no requieren autenticación secundaria




Anterior:Popularizar el conocimiento: Comprender a fondo la diferencia entre px unitario y electromagnetismo y REM en CSS
Próximo:Monitorización de velocidad de Internet en tiempo real de XDU Meter [Código fuente]
Publicado en 21/3/2017 16:36:43 |
Seré ese programador de corazón negro
 Propietario| Publicado en 21/3/2017 16:44:46 |
Xiaozhe Publicado el 21-03-2017 16:36
Seré ese programador de corazón negro

Vamos, vamos, escribe un software y déjame observar
Publicado en 27/9/2017 15:47:58 |
Dirección original: https://www.52pojie.cn/thread-591949-1-1.html
Por favor, no reimprimas sin consentimiento y no indiques la fuente al reimprimir.
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com