Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 14835|Απάντηση: 3

Αναλύστε το πρωτόκολλο γρήγορης σύνδεσης QQ και εφαρμόστε το "CSRF"

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 21/3/2017 3:45:47 μ.μ. | | | |
Όπως όλοι γνωρίζουμε, η Tencent χρησιμοποίησε το Activex για να εφαρμόσει τη γρήγορη σύνδεση QQ, χρησιμοποιώντας το σε ένα άγνωστο πρόγραμμα περιήγησης και το πρώτο πράγμα που έπρεπε να κάνει ήταν να εγκαταστήσει το στοιχείο ελέγχου QuickLogin.
Ακριβώς όταν δεν ξέρω πότε, η γρήγορη σύνδεση ξαφνικά δεν χρειάζεται τα χειριστήρια.
Εκείνη την εποχή, ήμουν πολύ μπερδεμένος, ποια περίεργη μέθοδο χρησιμοποίησε η Tencent για να αλληλεπιδράσει με τοπικές εφαρμογές;

Χωρίς πρόσθετα, οι ιστοσελίδες δεν θα πρέπει να μπορούν να αλληλεπιδρούν απευθείας με τοπικές εφαρμογές (εκτός εάν έχει οριστεί ένα πρωτόκολλο, αλλά μπορούν να κληθούν μόνο και όχι τα αποτελέσματα που παρέχονται από το πρόγραμμα).

Κατά τύχη (καλά, βαριέμαι να κοιτάζω τον διαχειριστή εργασιών και να ανακαλύπτω το εγγενές httpd και να βρίσκω τον Apache να εκτελείται), ξαφνικά συνειδητοποίησα μια πιθανότητα: εάν το QQ ανοίξει μια τοπική θύρα, δημιουργήσει έναν διακομιστή ιστού, δηλαδή έναν διακομιστή TCP που συμμορφώνεται με το πρωτόκολλο HTTP και, στη συνέχεια, η ιστοσελίδα ajax κάνει ένα αίτημα σε αυτό το QQ (αυτή τη στιγμή ως διακομιστής ιστού), μπορείτε να πάρετε το αποτέλεσμα;

Και αυτό είναι πραγματικά το αποτέλεσμα.


Το Web JS εκκινεί ένα αίτημα GET για να http://localhost.ptlogin2.qq.com (θύρες από 4300-4308, μία προς μία προς επιτυχία).
Ping θα διαπιστώσει ότι είναι 127.0.0.1 και όταν ελέγξετε τη θύρα, είναι πράγματι QQ σε χρήση.

Πρώτο αίτημα: /pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk από μπισκότα, ό,τι κι αν είναι. Το r είναι ένας τυχαίος αριθμός

Το αποτέλεσμα που επιστρέφεται είναι ένας πίνακας JSON:
var var_sso_uin_list=[{"account":"Συνδεδεμένος σε λογαριασμό QQ","face_index":-1,"gender":0,"nickname":"Το ψευδώνυμό σας QQ","uin":"Ακόμα ο λογαριασμός σας QQ","client_type":66818,"uin_flag":8388612}]; ptui_getuins_CB παράγραφος var_sso_uin_list)·

Στη συνέχεια, χρησιμοποιήστε http://ptlogin2.qq.com/getface για να λάβετε avatar QQ, τα οποία δεν θα συζητηθούν εδώ

Με αυτόν τον τρόπο οι πληροφορίες QQ σας μπορούν να εμφανίζονται στην ιστοσελίδα.

Όταν πατάτε το avatar σας (όταν επιλέγετε αυτή τη σύνδεση)

Δημιουργούνται τα ακόλουθα αιτήματα:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
Ομοίως, το r είναι ένας τυχαίος αριθμός, pt_local_tk είναι από ένα cookie, local_token
Τι κάνει αυτό το αίτημα;


Λοιπόν, Set-Cookie.

Στη συνέχεια, προχωρήστε με το αίτημα
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
Το μόνο U1 εδώ είναι η διεύθυνση προορισμού

Αυτό το αίτημα θα επιστρέψει όλα τα cookies που χρειάζεστε και είστε συνδεδεμένοι.

Έτσι, μετά την εκμάθηση του πρωτοκόλλου, ανακαλύφθηκε ένα σοβαρό πρόβλημα: τι συμβαίνει εάν ένα (μαυρόκαρδο) πρόγραμμα κάνει αυτά τα πράγματα για λογαριασμό του χρήστη;

Ξεκινήστε τώρα!

Είχα μόνο ένα Mac στο χέρι, οπότε το έγραψα σε 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网页上的数据

Σημείωση: Λόγω της προηγούμενης εμπειρίας μου σε bots QQ (με βάση το πρωτόκολλο WebQQ): η κεφαλίδα Referer είναι πολύ σημαντική (πρέπει να είναι όνομα τομέα .qq.com), όταν είναι λάθος, σίγουρα θα αποτύχει. Άρα δεν υπάρχουν κυκλικοί κόμβοι εδώ

Παρεμπιπτόντως, ήμουν νέος στο Obj-C εκείνη την εποχή, και κάποιος από τον κώδικα μπορεί να φαίνεται λίγο ανόητος, συγχωρέστε με.
//cookiedata是个NSDictionary




Με αυτόν τον τρόπο, η σύνδεση ολοκληρώνεται και μπορείτε να βρείτε μια διεπαφή χώρου QQ (δεν δημοσιεύεται εδώ) και η ανάρτηση είναι επιτυχής.

Τι σημαίνει αυτό? Αυτό σημαίνει ότι εφόσον είναι ένα πρόγραμμα που εκτελείται τοπικά, υπάρχει η ευκαιρία να ολοκληρώσετε τη σύνδεση QQ αντί για εσάς και να κάνετε κάποιες ύπουλες λειτουργίες σε πλατφόρμες όπως το QQ space που δεν απαιτούν δευτερεύοντα έλεγχο ταυτότητας




Προηγούμενος:Εκλαΐκευση της γνώσης: Κατανοήστε διεξοδικά τη διαφορά μεταξύ μονάδας px και em και rem στο CSS
Επόμενος:Παρακολούθηση ταχύτητας Διαδικτύου σε πραγματικό χρόνο μετρητή XDU [Πηγαίος κώδικας]
Δημοσιεύτηκε στις 21/3/2017 4:36:43 μ.μ. |
Θα γίνω αυτός ο μαυρόκαρδος προγραμματιστής
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 21/3/2017 4:44:46 μ.μ. |
Xiaozhe Δημοσιεύτηκε στις 2017-3-21 16:36
Θα γίνω αυτός ο μαυρόκαρδος προγραμματιστής

Έλα, έλα, γράψε ένα λογισμικό και άσε με να παρατηρήσω
Δημοσιεύτηκε στις 27/9/2017 3:47:58 μ.μ. |
Αρχική διεύθυνση: https://www.52pojie.cn/thread-591949-1-1.html
Μην ανατυπώνετε χωρίς συγκατάθεση και μην αναφέρετε την πηγή κατά την επανεκτύπωση.
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com