Seperti yang kita semua tahu, Tencent menggunakan Activex untuk mengimplementasikan login cepat QQ, menggunakannya di browser yang tidak dikenal, dan hal pertama yang harus dilakukan adalah menginstal kontrol QuickLogin.
Tepat ketika saya tidak tahu kapan, login cepat tiba-tiba tidak memerlukan kontrol.
Saat itu, saya sangat bingung, metode aneh apa yang digunakan Tencent untuk berinteraksi dengan aplikasi lokal?
Tanpa plugin, halaman web seharusnya tidak dapat berinteraksi langsung dengan aplikasi lokal (kecuali protokol ditentukan, tetapi hanya dapat dipanggil dan bukan hasil yang disediakan oleh program).
Secara kebetulan (yah, hanya bosan melihat pengelola tugas dan menemukan httpd asli, dan menemukan Apache berjalan), saya tiba-tiba menyadari kemungkinan: jika QQ membuka port lokal, membuat server web, yaitu server TCP yang sesuai dengan protokol HTTP, dan kemudian halaman web ajax membuat permintaan ke QQ itu (saat ini sebagai server web), dapatkah Anda mendapatkan hasilnya?
Dan itulah hasilnya.
Web JS memulai permintaan GET ke http://localhost.ptlogin2.qq.com (port dari 4300-4308, satu per satu hingga berhasil).
Ping itu akan menemukan bahwa itu adalah 127.0.0.1, dan ketika Anda memeriksa port, itu memang QQ yang digunakan.
Permintaan pertama: /pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk dari kue, apa pun itu; r adalah angka acak
Hasil yang ditampilkan adalah array JSON:
var var_sso_uin_list=[{"account":"Masuk ke akun QQ","face_index":-1,"gender":0,"nickname":"Nama panggilan QQ Anda","uin":"Masih akun QQ Anda","client_type":66818,"uin_flag":8388612}]; ptui_getuins_CB(var_sso_uin_list);
Kemudian gunakan http://ptlogin2.qq.com/getface untuk mendapatkan avatar QQ, yang tidak akan dibahas di sini
Dengan cara ini informasi QQ Anda dapat ditampilkan di halaman web.
Saat Anda menekan avatar Anda (saat Anda memilih login ini)
Permintaan berikut dibuat:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
Demikian pula, r adalah bilangan acak, pt_local_tk berasal dari cookie, local_token
Apa yang dilakukan permintaan ini?
Nah, Set-Cookie.
Kemudian lanjutkan dengan permintaan
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
Satu-satunya U1 di sini adalah alamat tujuan
Permintaan ini akan mengembalikan semua cookie yang Anda butuhkan, dan Anda masuk.
Jadi setelah mempelajari protokol, masalah serius ditemukan: apa yang terjadi jika program (berhati hitam) melakukan hal-hal ini atas nama pengguna?
Mulailah sekarang!
Saya hanya memiliki Mac, jadi saya menulisnya di Obj-C.
[DAPATKAN sendiri:@"http://localhost.ptlogin2.qq.com:4300/pt_get_uins?callback=ptui_getuins_CB&r=0.47178753013324637&pt_local_tk=-1211438011" header:nil];
//这里的GET是我自己封装的一个方法,GET网页上的数据
Catatan: Karena pengalaman saya sebelumnya dalam bot QQ (berdasarkan protokol WebQQ): header Referer sangat penting (harus nama domain .qq.com), begitu salah, itu pasti akan gagal. Jadi tidak ada bundaran di sini
Ngomong-ngomong, saya baru mengenal Obj-C saat itu, dan beberapa kodenya mungkin tampak agak konyol, maafkan saya.
//cookiedata是个NSDictionary
Dengan cara ini, login selesai, dan Anda dapat menemukan antarmuka ruang QQ (tidak diposting di sini), dan postingan berhasil.
Apa artinya ini? Ini berarti bahwa selama ini adalah program yang berjalan secara lokal, ada kesempatan untuk menyelesaikan login QQ alih-alih Anda, dan melakukan beberapa operasi licik pada platform seperti ruang QQ yang tidak memerlukan otentikasi sekunder
|