Kā mēs visi zinām, Tencent izmantoja Activex, lai ieviestu QQ ātru pieteikšanos, izmantojot to nepazīstamā pārlūkprogrammā, un pirmā lieta, kas jādara, bija instalēt QuickLogin vadīklu.
Tikai tad, kad es nezinu, kad, ātrajai pieteikšanās pēkšņi nav nepieciešama kontrole.
Tajā laikā es biju ļoti neizpratnē, kādu dīvainu metodi Tencent izmantoja, lai mijiedarbotos ar vietējām lietojumprogrammām?
Bez spraudņiem tīmekļa lapām nevajadzētu būt iespējai tieši mijiedarboties ar vietējām lietojumprogrammām (ja vien nav definēts protokols, bet to var izsaukt tikai, nevis programmas sniegtos rezultātus).
Nejauši (labi, vienkārši garlaicīgi, aplūkojot uzdevumu pārvaldnieku un atklājot vietējo httpd, un atrodot Apache darbojas), es pēkšņi sapratu iespēju: ja QQ atver vietējo portu, izveido tīmekļa serveri, tas ir, TCP serveri, kas atbilst HTTP protokolam, un tad tīmekļa lapa ajax pieprasa šo QQ (šobrīd kā tīmekļa serveri), vai jūs varat iegūt rezultātu?
Un tas patiešām ir rezultāts.
Web JS uzsāk GET pieprasījumu http://localhost.ptlogin2.qq.com (porti no 4300-4308, pa vienam līdz panākumiem).
Ping tas atradīs, ka tas ir 127.0.0.1, un, pārbaudot portu, tas patiešām tiek izmantots QQ.
Pirmais pieprasījums: /pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk no sīkdatnēm, neatkarīgi no tā, kas tas ir; r ir nejaušs skaitlis
Atgrieztais rezultāts ir JSON masīvs:
var var_sso_uin_list=[{"account":"Pieteicies QQ kontā","face_index":-1,"gender":0,"nickname":"Jūsu QQ segvārds","uin":"Joprojām jūsu QQ konts","client_type":66818,"uin_flag":8388612}]; ptui_getuins_CB var_sso_uin_list. punkts;
Pēc tam izmantojiet http://ptlogin2.qq.com/getface, lai iegūtu QQ iemiesojumus, kas šeit netiks apspriesti
Tādā veidā jūsu QQ informāciju var parādīt tīmekļa lapā.
Nospiežot savu iemiesojumu (izvēloties šo pieteikšanos)
Tiek ģenerēti šādi pieprasījumi:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
Līdzīgi r ir nejaušs skaitlis, pt_local_tk ir no sīkdatnes, local_token
Kāds ir šis pieprasījums?
Nu, iestatīt sīkdatni.
Pēc tam turpiniet pieprasījumu
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
Vienīgais U1 šeit ir galamērķa adrese
Šis pieprasījums atgriezīs visas nepieciešamās sīkdatnes, un jūs esat pieteicies.
Tātad, apgūstot protokolu, tika atklāta nopietna problēma: kas notiek, ja (melnsirdīga) programma dara šīs lietas lietotāja vārdā?
Sāciet tūlīt!
Man bija tikai Mac pa rokai, tāpēc es to uzrakstīju 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网页上的数据
Piezīme: Sakarā ar manu iepriekšējo pieredzi QQ robotos (pamatojoties uz WebQQ protokolu): Referer galvene ir ļoti svarīga (tam jābūt .qq.com domēna nosaukumam), tiklīdz tas ir nepareizs, tas noteikti neizdosies. Tātad šeit nav apļveida krustojumu
Starp citu, tajā laikā es biju jauns Obj-C, un daži kodi var šķist mazliet muļķīgi, lūdzu, piedodiet man.
//cookiedata是个NSDictionary
Tādā veidā pieteikšanās ir pabeigta, un jūs varat atrast QQ telpas interfeisu (nav publicēts šeit), un ziņa ir veiksmīga.
Ko tas nozīmē? Tas nozīmē, ka, kamēr tā ir programma, kas darbojas lokāli, ir iespēja pabeigt QQ pieteikšanos jūsu vietā un veikt dažas viltīgas darbības tādās platformās kā QQ telpa, kurām nav nepieciešama sekundārā autentifikācija
|