Ahogy mindannyian tudjuk, a Tencent az Activex-et használta a QQ gyors bejelentkezés megvalósításához, egy ismeretlen böngészőn, és az első lépés a QuickLogin vezérlés telepítése volt.
Pont amikor nem tudom, mikor, a gyors bejelentkezésnek hirtelen nincs szüksége a vezérlésre.
Akkoriban nagyon tanácstalan voltam, milyen furcsa módszert használt a Tencent a helyi alkalmazásokhoz való interakcióhoz?
Pluginek nélkül a weboldalak nem tudnának közvetlenül interakcióba lépni helyi alkalmazásokkal (hacsak nem definiálnak egy protokoll, de csak előhívható, nem a program által szolgáltatott eredmények).
Véletlenül (nos, csak unatkoztam a feladatkezelő nézésével, felfedezni a natív httpd-t, és az Apache futását) hirtelen rájöttem egy lehetőségre: ha a QQ megnyit egy helyi portot, létrehoz egy webszervert, azaz egy TCP szervert, amely megfelel az HTTP protokollnak, és az ajax weboldal kérést tesz ehhez a QQ-hoz (jelenleg webszerverként), akkor meg tudod kapni az eredményt?
És ez az igazán az eredmény.
Web JS GET kérést indít http://localhost.ptlogin2.qq.com számára (4300-tól 4308-as portokhoz, egyenként sikeresen).
Ha pingel, azt fogja találni, hogy 127.0.0.1, és amikor megnézed a portot, valóban QQ van használatban.
Első kérés: /pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk sütikből, bármi is legyen az; r egy véletlenszám
Az eredmény egy JSON tömb:
var var_sso_uin_list=[{"account":"Bejelentkezés QQ fiókba","face_index":-1,"gender":0,"nickname":"A QQ beceneved","uin":"Még mindig a QQ fiókod","client_type":66818,"uin_flag":8388612}]; ptui_getuins_CB(var_sso_uin_list);
Ezután használd http://ptlogin2.qq.com/getface a QQ avatarok megszerzésére, amiről itt nem beszélünk
Így a QQ adataid megjeleníthetők az oldalon.
Amikor megnyomod az avatárodat (amikor ezt a bejelentkezést választod)
Az alábbi kérések generálódnak:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
Hasonlóképpen, r véletlenszám, pt_local_tk egy sütiből származik, local_token
Mit csinál ez a kérés?
Nos, Set-Cookie.
Ezután folytasd a kéréssel
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
Az egyetlen U1 itt a célcím
Ez a kérés visszaadja az összes szükséges sütit, és be vagy jelentkezve.
Tehát a protokoll megtanulása után komoly problémát fedeztek fel: mi történik, ha egy (fekete szívű) program ezeket a dolgokat a felhasználó nevében csinálja?
Kezdjétek el most!
Csak egy Mac volt nálam, ezért Obj-C-ben írtam.
[self GET:@"http://localhost.ptlogin2.qq.com:4300/pt_get_uins?callback=ptui_getuins_CB&r=0.47178753013324637&pt_local_tk=-1211438011" fejléc:nil];
//这里的GET是我自己封装的一个方法,GET网页上的数据
Megjegyzés: Korábbi tapasztalataim alapján QQ botokkal (WebQQ protokoll alapján): a Referer fejléc nagyon fontos (biztosan .qq.com domain név), ha hibás, biztosan meghibás. Szóval itt nincsenek körforgalom
Egyébként akkoriban új voltam az Obj-C-ben, és néhány kód talán kissé nevetségesnek tűnhet, kérlek, bocsáss meg.
//cookiedata是个NSDictionary
Így a bejelentkezés teljes, és találhatsz egy QQ térfelületet (amit itt nem írsz), és a bejegyzés sikeres lesz.
Mit jelent ez? Ez azt jelenti, hogy amíg egy helyi program fut, lehetőség van a QQ bejelentkezést helyett, és néhány alattomos műveleteket végezni olyan platformokon, mint a QQ Space, amelyek nem igényelnek másodlagos hitelesítést
|