Beberapa hari lalu dalam kumpulan pertukaran Python Star Yao dan The Strongest King, beberapa orang bertanya tentang video kejuruteraan terbalik JS dan kod yang berkaitan bahawa mereka semua saya belajar pengetahuan lanjutan dan saya benar-benar tidak boleh cukup dengannya. Kebetulan saya telah membaca beberapa bahan pembelajaran JS hari ini dan melihat kes yang cukup bagus, saya akan berkongsi dengan anda di sini dan merekodkannya juga.
Berkenaan mencari kod JS, agak sukar untuk menulis artikel untuk menerangkannya. Adalah lebih baik untuk merakam penjelasan video Di sini, kod JS yang sudah siap disusun secara langsung. Agak sukar untuk mencari kod penyulitan JS ini pada mulanya Anda perlu sentiasa memecahkan mata, mencari peraturan penyulitan, dan mengupas lapisan bawang demi lapisan untuk mengetahui. Kod penyulitan JS yang digunakan dalam artikel ini berasal dari tapak web video kecil Fungsi penyulitan yang dipaparkan pada halaman web adalah seperti yang ditunjukkan di bawah:
Kaedah penyulitan tidak terlalu sukar. , antaranya decodeMp4 Kod teras bagi fungsi penyulitan decode() adalah seperti berikut.
define("tool", function(a, b, c) { var d = a("jquery") , e = a("support") , f = a("constants") , g = a("base64") , h = "substring" , i = "split" , j = "replace" , k = "substr"; b.decodeMp4 = { getHex: function(a) { return { str: a[h](4), hex: a[h](0, 4)[i]("").reverse().join("") } }, getDec: function(a) { var b = parseInt(a, 16).toString();# 对应Python中的str(int(a, 16)) return { pre: b[h](0, 2)[i](""), tail: b[h](2)[i]("") } }, substr: function(a, b) { var c = a[h](0, b[0]) , d = a[k](b[0], b[1]); return c + a[h](b[0])[j](d, "") }, getPos: function(a, b) { return b[0] = a.length - b[0] - b[1], b }, decode: function(a) { var b = this.getHex(a) , c = this.getDec(b.hex) , d = this[k](b.str, c.pre); return g.atob(this[k](d, this.getPos(d, c.tail))) } };
Anda boleh melihat bahawa fungsi decode() dalam decodeMp4 dipanggil dan fungsi decode() memanggil getHex(a), getDec(b.hex), g.atob(), getPos( d, c.tail) dan fungsi lain, dan apa yang perlu kita lakukan ialah menukar fungsi ini kepada tulisan Python, kemudian bina kaedah penyulitan yang sepadan, dapatkan hasil yang disulitkan, dan kemudian lengkapkan kesan terbalik.
Pembolehubah a di sini ialah rentetan panjang melalui titik putus Di sini, pembolehubah berikut digunakan sebagai contoh.
a = "c0b1Ly9tdnPflQ3cQpPZpZGVvMTAubWVpdHVkYXRhLmNvbS82MWM0NDNlOGI1MmFmMTYzMi5tcDkBOyQ"
Mari kita susun secara ringkas fungsi yang akan digunakan nanti lebih awal, supaya lebih mudah untuk semua orang menyemak nanti.
Mari pecahkan setiap fungsi mengikut giliran, seperti berikut:
var h = "substring",i = "split"; getHex: function(a) { return { str: a[h](4), hex: a[h](0, 4)[i]("").reverse().join("") } },
Di atas ialah kod JS yang sepadan bagi fungsi getHex() Anda boleh melihat bahawa kamus dikembalikan secara langsung. Kekunci kamus masing-masing adalah str dan hex daripada h ialah subrentetan. Maksud fungsi ini ialah rentetan mengambil nilai daripada subskrip yang ditentukan sehingga ia mencapai penghujung rentetan Terjemahan di sini ialah a.substring(4), iaitu rentetan a bermula daripada subskrip 4 dan berakhir; a[h]( 0, 4)[i]("").reverse().join("") Ini adalah sedikit lebih rumit untuk difahami Pertama, nilai rentetan diambil. dan kedudukannya adalah dari 0 hingga 4. Kemudian fungsi i dipanggil, iaitu, split Fungsi dipisahkan oleh ruang (""), panggil fungsi reverse() untuk mengisih dalam urutan terbalik, dan kemudian panggil join("") untuk menyambung rentetan Selepas pembongkaran, ia adalah lebih mudah. Langkah seterusnya ialah membina kod Python Selepas menulis perbandingan, ia akan kelihatan seperti ini:
def getHex(a): return { "str": a[4:],# JS中的substring(4)指的是从4开始取值到字符串末尾 "hex": "".join(list(a[0:4])[::-1])# [::-1]代表的是反向取值 }
Adakah ia kelihatan sama dengan kod JS di atas.
adalah seperti berikut:
getDec: function(a) { var b = parseInt(a, 16).toString(); return { pre: b[h](0, 2)[i](""), tail: b[h](2)[i]("") } },
Mengikut hubungan yang sepadan, kod Python yang sepadan boleh ditulis sebagai berikut:
def getDec(a): b = str(int(a, 16)) print(b) return { "pre": list(b[:2]), "tail": list(b[2:]) }
adalah seperti berikut:
substr: function(a, b) { var c = a[h](0, b[0]) , d = a[k](b[0], b[1]); return c + a[h](b[0])[j](d, "") },
Mengikut hubungan yang sepadan, kod Python yang sepadan boleh ditulis seperti berikut :
def substr(a, b): c = a[0: int(b[0])] print(c) d = a[int(b[0]):int(b[0])+int(b[1])] print(d) return c + a[int(b[0]):].replace(d, '')
adalah seperti berikut:
getPos: function(a, b) { return b[0] = a.length - b[0] - b[1], b },
Mengikut perhubungan yang sepadan, kod Python yang sepadan boleh ditulis Seperti yang ditunjukkan di bawah:
def getPos(a, b): b[0] = len(a) - int(b[0]) - int(b[1]) print(b[0]) return b
mempunyai kod JS berikut: <🎜. >
decode: function(a) { var b = this.getHex(a) , c = this.getDec(b.hex) , d = this[k](b.str, c.pre); return g.atob(this[k](d, this.getPos(d, c.tail))) }
b = getHex(a) # print(b) c = getDec(b['hex']) print(c) # d = k(str(b), c.pre) d = substr(b['str'], c['pre']) # print(d) return base64.b64decode(substr(d, getPos(d, c['tail'])))
Helo semua, saya pengguna lanjutan Python. Artikel ini terutamanya berdasarkan masalah terbalik JS dalam perangkak web Python dan membuat penjelasan kes. Jika halaman web dimuatkan dengan JS, jika anda memintanya terus melalui perangkak web, anda tidak akan dapat mendapatkan alamat yang disulitkan terakhir Untuk menangani masalah terbalik ini, kami telah membuat proses pelaksanaan contoh terbalik yang mudah.
Atas ialah kandungan terperinci Ambil stok tutorial tentang menukar kod terbalik JS kepada kod Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!