Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk melaksanakan penyulitan log masuk SMZDM terbalik dengan python+JS
Platform yang kami tinjau kali ini ialah [SMZDM].
Tapak sasaran kali ini ialah: aHR0cHM6Ly93d3cuc216ZG0uY29tLw==
.
Sebelum permulaan rasmi, daftar akaun dahulu, dan kemudian simulasi log masuk untuk melihat parameter yang disembunyikan secara rahsia~
Apabila kita melihat semua parameter permintaan selepas log masuk, kita Adalah lebih baik untuk menutup tapak secara senyap dan menarik baliknya.
Seperti yang anda lihat daripada gambar di atas, username
, password
ialah kawasan penyulitan yang penting dan parameter pada permulaan geetest_
ialah kandungan terlibat dalam klik kod pengesahan di bawah, Tiada pembongkaran pada peringkat ini, dan anda boleh terus memberi perhatian kepada logik kod pengesahan berikutnya.
Anda boleh mengabaikan klik kod pengesahan untuk log masuk. Bukan mudah untuk mendapatkannya pada peringkat ini.
Parameter permintaan antara muka ialah:
URL Permintaan: zhiyou.smzdm.com / user/login/ajax_normal_check
Kaedah permintaan: POST
Kali ini kami tidak akan menambah titik putus, tetapi mula-mula menganalisis melalui pelancar permintaan, buka timbunan panggilan permintaan pautan, dan kemudian menganalisis alamat yang berkaitan mengikut turutan.
Berdasarkan pengalaman, kami dapati terdapat fungsi common_submit
, dan fail yang terletak di dalamnya ialah window.js
, jadi anda boleh fokus padanya.
Seterusnya tambahkan titik putus XHR dengan kata kunci login/ajax_normal_check
.
Selepas titik putus tamat, anda boleh terus memasuki fungsi sasaran:
Hasilnya ialah yang berkaitan logik penyulitan ditemui secara langsung, seperti berikut Seperti yang ditunjukkan dalam rajah:
Kod teras diekstrak dan kemudian dianalisis selanjutnya.
var _ = login_obj.encryptPassword(i); (i = _), (r = btoa(r));
Ternyata fungsi login_obj.encryptPassword
sebenarnya memanggil antara muka baharu.
encryptPassword: function(r) { var t = null; return $.ajax({ url: "//zhiyou.smzdm.com/user/login/pre", type: "get", async: !1, dataType: "json" }).done(function(e) { var o; t = e && 0 != e.error_code ? null : ((o = new JSEncrypt).setPublicKey(atob(e.data.pub_key)), o.encrypt(r)) }), t },
Mengenai penggunaan akaun ialah js btoa, tiada apa yang istimewa tentang ini, ia adalah penyulitan base64 yang mudah
Melalui konsol pembangun, uji menggunakan btoa
penyulitan 12345
dan kemudian lakukan penyulitan yang sama melalui Python.
import base64 wtext = "12345" # 编码 a = base64.b64encode(wtext.encode()) print(a.decode()) # 输出 MTIzNDU=
Kedua-dua keputusan adalah konsisten dan parameter username
diselesaikan.
Mari kita teruskan melihat parameter password
Proses penyulitan kata laluan ialah:
Diperolehi melalui API pub_key
;
pub_key
mengekod atob
; 🎜> Kata laluan pengguna yang betul disulitkan.
JSEncryptRSAKey
Uji sama ada antara muka penyulitan pub_key boleh dipanggil terus
import requests headers = { "Host": "zhiyou.smzdm.com", "Accept": "application/json, text/javascript, */*; q=0.01", "Referer": "https://zhiyou.Python加密混淆.com/user/login/", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) 自己的 UA" } res = requests.get('https://zhiyou.Python加密混淆.com/user/login/pre', headers=headers, timeout=3) print(res.text)
adalah juga diperolehi.
Selepas menguji antara muka beberapa kali, ralat ditemui, yang mencetuskan sekatan akaun Semasa pengekodan, disyorkan untuk menyediakan beberapa akaun yang berbeza untuk mengelakkan daripada diharamkan.
pub_key
Penyahpepijatan lanjut mendapati penyulitan JS menggunakan pemalam Muat turun terus JS yang sepadan seperti berikut:
rreeeSetempat Bina persekitaran di mana kod JS boleh dijalankan
Tulis kod berikut, yang melibatkan fail yang dinyatakan di atas.https://res.Python混淆.com/resources/public/user/zhiyou/js/jsencrypt.min.jsKemudian ia boleh dipanggil dengan Selenium, menghantar pub_key melalui parameter URL.
Logiknya juga sangat mudah Python memanggil antara muka untuk menjana KEY, kemudian menghantar KEY ke persekitaran JS yang kami bina sendiri, dan akhirnya memanggil tapak sasaran (. dibina oleh kami sendiri) melalui alamat Python, dapatkan nilai yang disulitkan, dan teruskan.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan penyulitan log masuk SMZDM terbalik dengan python+JS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!