Ako všetci vieme, Tencent použil Activex na implementáciu QQ rýchleho prihlásenia, keď ho používal v neznámom prehliadači, a prvou vecou, ktorú sme urobili, bolo nainštalovať ovládanie QuickLogin.
Práve keď neviem kedy, rýchle prihlásenie zrazu nepotrebuje ovládanie.
Vtedy som bol veľmi zmätený, akú zvláštnu metódu používal Tencent na interakciu s lokálnymi aplikáciami?
Bez pluginov by webové stránky nemali byť schopné priamo interagovať s lokálnymi aplikáciami (pokiaľ nie je definovaný protokol, ktorý však môže byť len vyvolaný a nie výsledky poskytované programom).
Náhodou (no, len som sa nudil pri hľadaní v správcovi úloh, objavovaní natívneho httpd a Apache, ktorý beží), som si náhle uvedomil možnosť: ak QQ otvorí lokálny port, vytvorí webový server, teda TCP server, ktorý spĺňa HTTP protokol, a potom webová stránka ajax pošle požiadavku na ten QQ (momentálne ako webový server), dá sa získať výsledok?
A to je naozaj výsledok.
Web JS iniciuje GET požiadavku na http://localhost.ptlogin2.qq.com (porty z 4300-4308, jeden po druhom k úspechu).
Ping zistí, že je to 127.0.0.1, a keď skontrolujete port, je to naozaj QQ v používaní.
Prvá požiadavka: /pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk od sušienok, čokoľvek to je; r je náhodné číslo
Výsledkom je JSON pole:
var var_sso_uin_list=[{"account":"prihlásený v QQ účte","face_index":-1,"gender":0,"prezývka":"Vaša QQ prezývka","uin":"Stále váš QQ účet","client_type":66818,"uin_flag":8388612}]; ptui_getuins_CB(var_sso_uin_list);
Potom použite http://ptlogin2.qq.com/getface na získanie QQ avatarov, o ktorých tu nebudeme hovoriť
Týmto spôsobom sa vaše QQ informácie môžu zobraziť na webovej stránke.
Keď stlačíte svoj avatar (keď vyberiete toto prihlásenie)
Generujú sa nasledujúce požiadavky:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
Podobne r je náhodné číslo, pt_local_tk pochádza zo sušienky, local_token
Čo táto žiadosť robí?
No, Set-Cookie.
Potom pokračujte v požiadavke
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
Jediná U1 tu je cieľová adresa
Táto požiadavka vráti všetky potrebné cookies a ste prihlásení.
Po naučení sa protokolu sa objavil vážny problém: čo sa stane, ak program (bezcitný) urobí tieto veci v mene používateľa?
Začnite teraz!
Mal som po ruke len Mac, tak som to napísal v 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网页上的数据
Poznámka: Vzhľadom na moje predchádzajúce skúsenosti s QQ botmi (založenými na protokole WebQQ): hlavička Referer je veľmi dôležitá (musí to byť doména .qq.com), ak je nesprávna, určite zlyhá. Takže tu nie sú kruhové objazdy
Mimochodom, vtedy som bol v Obj-C nový a niektoré časti kódu môžu pôsobiť trochu smiešne, prosím, odpustite mi.
//cookiedata是个NSDictionary
Týmto spôsobom je prihlásenie dokončené, nájdete rozhranie QQ space (ktoré tu nie je zverejnené) a príspevok je úspešný.
Čo to znamená? To znamená, že pokiaľ ide o program bežiaci lokálne, existuje šanca dokončiť QQ prihlásenie namiesto vás a vykonať niektoré nenápadné operácie na platformách ako QQ space, ktoré nevyžadujú sekundárnu autentifikáciu
|