Baru-baru ini saya melihat postingan WeChat, dan saya melakukan riset ketika tidak ada pekerjaan. Saya menemukan bahwa aktivitas ini dapat digunakan untuk menyikat suara. Faktanya, penerapan kode crawler semacam ini selalu menjadi masalah kecil. Yang penting Anda perlu mengetahui logika halaman orang lain. Cara menganalisis dan merayapinya adalah bagian yang sulit.
Buka halaman pemungutan suara WeChat, tarik ke bawah layar dan Anda akan menemukan bahwa "Halaman web ini disediakan oleh XXX" ditampilkan di bagian atas layar. Perlu dicatat bahwa "XXX" di sini bukan "mp.weixin.qq. com", tetapi nama domain Pihak penyelenggara acara. Dengan kata lain, program kegiatan voting ini berjalan di server S Mall. Ini melibatkan konsep OpenID pada platform publik WeChat. Penjelasan resmi OpenID adalah: setelah mengenkripsi ID WeChat, setiap pengguna memiliki OpenID unik untuk setiap akun resmi. Artinya, pengguna memiliki OpenId unik untuk akun publik.
Logika pemungutan suara adalah bahwa pengguna akan memberikan OpenID pengguna di parameter POST saat membuat permintaan pemungutan suara; setelah menerima permintaan pemungutan suara POST, server mal S dapat memblokir satu pengguna dengan menanyakan apakah OpenID saat ini telah memberikan suara dalam waktu 4 jam. . Tindakan pemungutan suara diulangi.
Namun, ada celah besar di sini!
S Mall hanya dapat menentukan apakah OpenID tersebut terduplikasi, namun tidak dapat memverifikasi keabsahan OpenID karena tidak dapat memanggil server WeChat untuk memverifikasi OpenID.
Kemudian kita hanya perlu membuat OpenId yang sesuai dengan formatnya dan mengirimkan permintaan posting.
Tapi satu pemungutan suara juga aneh karena dilakukan dalam dua langkah. Pertama kali adalah permintaan dapatkan (bagian berkode pada gambar dirancang untuk privasi. Anda hanya perlu mengetahui bahwa satu suara diselesaikan melalui dua permintaan.
Ketika saya melihat nama permintaan pertama, saya mengira permintaan tersebut telah selesai, tetapi ketika menggunakan crawler untuk mengakses antarmuka ini, jumlah suara tidak bertambah. Setelah diperiksa lebih dekat, saya menemukan bahwa ada permintaan lain.
Jalur permintaan ini sangat aneh, berupa rangkaian karakter yang kacau, dan berbeda setiap saat. Setelah hanya memicu permintaan pertama, tidak ada operasi lain yang dilakukan Saat ini, saya yakin bahwa pemungutan suara adalah untuk mendapatkan beberapa parameter yang dihasilkan secara acak melalui permintaan pertama, dan kemudian membawa parameter ini dengan permintaan kedua Untuk memastikan legitimasi permintaan kedua, ini menyelesaikan proses pemungutan suara. Jadi pasti ada suatu tempat di halaman permintaan pertama yang memanggil permintaan kedua. Ketika saya memeriksa kode sumber saat ini, saya menemukan ada string kode seperti ini di halaman
Jika ditemukan karakter yang kacau pada halaman, hal ini sering kali disebabkan oleh kode yang telah dienkripsi.
Dua parameternya adalah jalur permintaan kedua. Terlihat bahwa rangkaian karakter kacau ini terkait dengan permintaan kedua, dan rangkaian emotikon adalah enkripsi kode js. Meskipun kami tidak memahami apa arti rangkaian karakter yang kacau ini, kami dapat menekan titik koma (;) untuk memformat rangkaian karakter yang kacau dan menjalankannya langsung di konsol chrome. Kami menemukan bahwa efek dari rangkaian karakter yang kacau ini adalah untuk mengeksekusi permintaan kedua. (Tempat ini seharusnya bisa mengembalikan kodenya. Jika Anda mengetahuinya, Anda bisa menjelaskannya.)
Ini pada dasarnya sudah selesai, dan sisanya adalah implementasi kode. Secara umum, ini untuk mengakses permintaan pertama, menggunakan ekspresi reguler untuk merayapi parameter di halaman, dan menggunakan parameter sebagai jalur permintaan kedua untuk memproses permintaan kedua. .Meminta akses. Tentu saja, ada juga proxy IP, dengan interval waktu akses acak. Yang terbaik adalah mensimulasikan perangkat yang berbeda secara dinamis. Artinya, kami tidak akan menjelaskan masalah umum dalam memodifikasi Agen-Pengguna Jika Anda memiliki pertanyaan tentang ini , Anda dapat mengirim email.
Secara umum, mengimplementasikan kode menggunakan python tidaklah sulit. Kesulitannya terletak pada menganalisis langkah demi langkah, menguasai logika website, dan terus mencoba. Ini hanya akan efektif jika Anda melakukannya lebih sering