Jak všichni víme, Tencent použil ActiveX k implementaci QQ rychlého přihlášení, a to v neznámém prohlížeči, a první věc, kterou jsme udělali, bylo nainstalovat ovládací ovládání QuickLogin.
Právě když nevím kdy, rychlé přihlášení najednou nepotřebuje ovládání.
Tehdy jsem byl velmi zmatený, jakou zvláštní metodu Tencent používá k interakci s lokálními aplikacemi?
Bez pluginů by webové stránky neměly být schopny přímo komunikovat s lokálními aplikacemi (pokud není definován protokol, ale lze jej pouze vyvolat, nikoli výsledky poskytované programem).
Náhodou (no, jen jsem se nudil při prohlížení správce úloh, objevování nativního httpd a nacházení běžícího Apache), jsem si najednou uvědomil možnost: pokud QQ otevře lokální port, vytvoří webový server, tedy TCP server, který splňuje HTTP protokol, a pak webová stránka ajax pošle požadavek na ten QQ (v tuto chvíli jako webový server), dostaneš výsledek?
A to je opravdu výsledek.
Web JS zahajuje GET požadavek na http://localhost.ptlogin2.qq.com (porty od 4300 do 4308, jeden po druhém až k úspěchu).
Když ho označíte, zjistí, že je to 127.0.0.1, a když zkontrolujete port, je to skutečně QQ v používání.
První požadavek: /pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk od sušenek, ať už to je cokoli; r je náhodné číslo
Výsledkem je JSON pole:
var var_sso_uin_list=[{"account":"Přihlášen na QQ účtu","face_index":-1,"gender":0,"přezdívka":"Your QQ přezdívka","uin":"Stále váš QQ účet","client_type":66818,"uin_flag":8388612}]; ptui_getuins_CB(var_sso_uin_list);
Pak použijte http://ptlogin2.qq.com/getface k získání QQ avatarů, o kterých zde nebudeme mluvit
Tímto způsobem lze vaše QQ informace zobrazit na webové stránce.
Když stisknete svého avatara (když vyberete toto přihlášení)
Generují se následující požadavky:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
Podobně je r náhodné číslo, pt_local_tk pochází ze sušenky, local_token
Co tato žádost dělá?
No, Set-Cookie.
Pak pokračujte v žádosti
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 zde je cílová adresa
Tento požadavek vám vrátí všechny potřebné cookies a jste přihlášeni.
Po naučení protokolu se objevil vážný problém: co se stane, když program (nesmyslný) udělá tyto věci jménem uživatele?
Začněte hned!
Měl jsem po ruce jen Mac, tak jsem to napsal 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: Kvůli mým předchozím zkušenostem s QQ boty (založenými na protokolu WebQQ): hlavička Referer je velmi důležitá (musí to být doména .qq.com), jakmile je špatná, určitě selže. Takže tady nejsou žádné kruhové objezdy
Mimochodem, tehdy jsem byl v Obj-C nováček a některé části kódu mohou působit trochu hloupě, prosím, odpusťte mi.
//cookiedata是个NSDictionary
Tímto způsobem je přihlášení dokončeno, najdete rozhraní QQ space (zde není zveřejněno) a příspěvek je úspěšný.
Co to znamená? To znamená, že pokud jde o program běžící lokálně, je šance dokončit přihlášení do QQ místo vás a provádět nějaké nenápadné operace na platformách jako QQ space, které nevyžadují sekundární autentizaci
|