Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 14835|Risposta: 3

Analizza il protocollo QQ Quick Login e implementa "CSRF"

[Copiato link]
Pubblicato su 21/03/2017 15:45:47 | | | |
Come tutti sappiamo, Tencent ha usato Activex per implementare il login rapido di QQ, usandolo su un browser sconosciuto, e la prima cosa da fare è stata installare il controllo QuickLogin.
Proprio quando non so quando, il login rapido improvvisamente non ha più bisogno dei controlli.
All'epoca ero molto perplesso, quale metodo strano usava Tencent per interagire con le applicazioni locali?

Senza plugin, le pagine web non dovrebbero poter interagire direttamente con le applicazioni locali (a meno che non sia definito un protocollo, ma può essere chiamato solo e non i risultati forniti dal programma).

Per caso (beh, mi sono solo annoiato a guardare il task manager e scoprire l'httpd nativo, e trovare Apache in esecuzione), ho improvvisamente realizzato una possibilità: se QQ apre una porta locale, crea un server web, cioè un server TCP che rispetta il protocollo HTTP, e poi la pagina web ajax fa una richiesta a quel QQ (attualmente come server web), puoi ottenere il risultato?

E questo è davvero il risultato.


Web JS avvia una richiesta GET per http://localhost.ptlogin2.qq.com (porting da 4300-4308, una per una verso il successo).
Ping scoprirà che è 127.0.0.1, e quando controlli la porta, è effettivamente QQ in uso.

Prima richiesta: /pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk dai biscotti, qualunque cosa sia; r è un numero casuale

Il risultato restituito è un array JSON:
var var_sso_uin_list=[{"account":"Logged in QQ account","face_index":-1,"gender":0,"nickname":"Your QQ nickname,"uin":"Still your QQ account","client_type":66818,"uin_flag":8388612}]; ptui_getuins_CB(var_sso_uin_list);

Poi usa http://ptlogin2.qq.com/getface per ottenere avatar QQ, cosa che qui non verrà discussa

In questo modo le tue informazioni QQ possono essere visualizzate sulla pagina web.

Quando premi il tuo avatar (quando selezioni questo login)

Vengono generate le seguenti richieste:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
Allo stesso modo, r è un numero casuale, pt_local_tk proviene da un cookie, local_token
A cosa serve questa richiesta?


Beh, Set-Cookie.

Poi procedi con la richiesta
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
L'unico U1 qui è l'indirizzo di destinazione

Questa richiesta restituirà tutti i cookie di cui hai bisogno e sarai loggato.

Quindi, dopo aver imparato il protocollo, è stato scoperto un problema serio: cosa succede se un programma (dal cuore nero) fa queste cose per conto dell'utente?

Inizia ora!

Avevo solo un Mac a portata di mano, quindi l'ho scritto in Obj-C.

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

Nota: A causa della mia esperienza precedente con bot QQ (basato sul protocollo WebQQ): l'intestazione Referer è molto importante (deve essere un nome di dominio .qq.com), se sbaglia, sicuramente fallirà. Quindi qui non ci sono rotatorie

A proposito, ero nuovo all'Obj-C in quel periodo, e alcuni del codice possono sembrarti un po' sciocchi, vi prego di perdonarmi.
//cookiedata是个NSDictionary




In questo modo, il login viene completato e puoi trovare un'interfaccia per QQ Space (non pubblicata qui), e il post ha successo.

Cosa significa? Questo significa che, finché è un programma in esecuzione locale, c'è la possibilità di completare il login di QQ al posto tuo, e di effettuare alcune operazioni subdette su piattaforme come QQ Space che non richiedono un'autenticazione secondaria




Precedente:Divulga la conoscenza: comprendi a fondo la differenza tra unità px ed em e rem in CSS
Prossimo:XDU Meter Monitoraggio della Velocità Internet in Tempo Reale [Codice sorgente]
Pubblicato su 21/03/2017 16:36:43 |
Sarò questo programmatore dal cuore nero
 Padrone di casa| Pubblicato su 21/03/2017 16:44:46 |
Xiaozhe Pubblicato il 21-03-2017 16:36
Sarò questo programmatore dal cuore nero

Dai, dai, scrivi un software e fammi osservare
Pubblicato su 27/09/2017 15:47:58 |
Indirizzo originale: https://www.52pojie.cn/thread-591949-1-1.html
Si prega di non ristampare senza consenso e di non indicare la fonte durante la ristampa.
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com