Faites le point sur un tutoriel sur la conversion du code inversé JS en code Python

WBOY
Libérer: 2023-04-13 09:46:06
avant
1313 Les gens l'ont consulté

Faites le point sur un tutoriel sur la conversion du code inversé JS en code Python

Avant-propos

Il y a quelques jours, dans le groupe d'échange Python Star Yao et The Strongest King, plusieurs personnes ont posé des questions sur les vidéos d'ingénierie inverse JS et les codes associés. Il semble qu'ils apprennent tous des connaissances avancées. Je ne fais plus défiler. Il se trouve que j'ai lu du matériel d'apprentissage JS ces jours-ci et que j'ai vu un très bon cas. J'aimerais le partager avec vous et l'enregistrer ici.

Code JS

Concernant la recherche du code JS, il est assez difficile d'écrire un article pour l'expliquer. Il serait préférable d'enregistrer une explication vidéo Ici, le code JS prêt à l'emploi est directement organisé. Il est assez difficile de trouver ce code de cryptage JS au début. Il faut constamment casser des points, trouver les règles de cryptage et éplucher l'oignon couche par couche pour le savoir. Le code de cryptage JS utilisé dans cet article provient d'un petit site Web de vidéos. La fonction de cryptage présentée sur la page Web est la suivante :

Faites le point sur un tutoriel sur la conversion du code inversé JS en code Python

La méthode de cryptage n'est pas trop difficile, et le code de base du decodeMp4.decode () La fonction de cryptage est la suivante.

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))) } };
Copier après la connexion

Vous pouvez voir que la fonction decode() dans decodeMp4 est appelée et que la fonction decode() appelle getHex(a), getDec(b.hex), g.atob(), getPos(d, c. tail) et d'autres fonctions, et ce que nous devons faire est de convertir ces fonctions en écriture Python, puis de construire la méthode de cryptage correspondante, d'obtenir le résultat crypté et de compléter l'effet inverse.

Processus de conversion

La variable a ici est une longue chaîne passant par des points d'arrêt. Ici, la variable suivante est utilisée comme exemple.

a = "c0b1Ly9tdnPflQ3cQpPZpZGVvMTAubWVpdHVkYXRhLmNvbS82MWM0NDNlOGI1MmFmMTYzMi5tcDkBOyQ"
Copier après la connexion

Organisons brièvement à l'avance les fonctions qui seront utilisées plus tard, afin qu'il soit plus facile pour tout le monde de les vérifier plus tard.

Faites le point sur un tutoriel sur la conversion du code inversé JS en code Python

Décomposons chaque fonction tour à tour, comme suit :

1. Fonction getHex(a)

var h = "substring",i = "split"; getHex: function(a) { return { str: a[h](4), hex: a[h](0, 4)[i]("").reverse().join("") } },
Copier après la connexion

Ce qui précède est le code JS correspondant de la fonction getHex(). Vous pouvez voir qu'un dictionnaire est directement renvoyé. , les clés du dictionnaire sont respectivement str et hex, où la valeur correspondante de str est a[h](4), et la définition de h est substring. La signification de cette fonction est que la chaîne commence à partir de l'indice spécifié jusqu'à. il atteint la fin de la chaîne. La traduction ici est a.substring(4), c'est-à-dire que la chaîne a commence à l'indice 4 et se termine par a[h](0, 4)[i]("").reverse ; ().join("" ) C'est un peu plus compliqué à comprendre. Tout d'abord, la valeur de la chaîne est prise entre 0 et 4. Ensuite, la fonction i est appelée, qui est la fonction de fractionnement. ("") comme split. La fonction reverse() est appelée pour trier dans l'ordre inverse. Ensuite, appelez join("") pour concaténer les chaînes, et ce sera beaucoup plus simple après le démontage. L'étape suivante consiste à construire le code Python. Après avoir écrit la comparaison, il ressemblera à ceci :

def getHex(a): return { "str": a[4:],# JS中的substring(4)指的是从4开始取值到字符串末尾 "hex": "".join(list(a[0:4])[::-1])# [::-1]代表的是反向取值 }
Copier après la connexion

Est-ce que cela vous semble familier ? C'est exactement la même chose que le code JS ci-dessus.

2. La fonction getDec(a)

Le code JS est le suivant :

getDec: function(a) { var b = parseInt(a, 16).toString(); return { pre: b[h](0, 2)[i](""), tail: b[h](2)[i]("") } },
Copier après la connexion

Selon la relation correspondante, le code Python correspondant peut s'écrire comme suit :

def getDec(a): b = str(int(a, 16)) print(b) return { "pre": list(b[:2]), "tail": list(b[2:]) }
Copier après la connexion

3. fonction

Le JS Le code est le suivant :

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, "") },
Copier après la connexion

Selon la relation correspondante, le code Python correspondant peut être écrit comme suit :

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, '')
Copier après la connexion

4. fonction getPos(a, b)

Le code JS est le suivant. :

getPos: function(a, b) { return b[0] = a.length - b[0] - b[1], b },
Copier après la connexion

Selon la relation correspondante, le code Python correspondant peut s'écrire comme suit : Le code Python correspondant est le suivant :

def getPos(a, b): b[0] = len(a) - int(b[0]) - int(b[1]) print(b[0]) return b
Copier après la connexion

5 La fonction decode(a, b)

Le code JS est le suivant :

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))) }
Copier après la connexion

Selon la relation correspondante, le code Python correspondant peut être écrit comme suit :

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'])))
Copier après la connexion

Affichage de l'effet

Si vous faites une demande directement via un robot d'exploration Web, vous n'obtiendrez pas l'adresse cryptée finale. demandez-le, vous ne l'obtiendrez pas. Vous ne pouvez obtenir que data-src, qui est la variable de chaîne mentionnée ci-dessus. Ce n'est qu'après avoir inversé, grâce à l'analyse ci-dessus et exécuté le code, que vous pouvez obtenir la même adresse de requête que sur a. page Web, comme le montre la figure ci-dessous, l'inverse est réussi !

Faites le point sur un tutoriel sur la conversion du code inversé JS en code Python

Mettez cette adresse dans le navigateur et elle pourra être lue, puis faites une demande de téléchargement pour télécharger la vidéo.

Résumé

Bonjour à tous, je suis un utilisateur avancé de Python. Cet article est principalement basé sur le problème inverse JS dans le robot d'exploration Web Python et propose une explication de cas. Si la page Web est chargée avec JS, si vous la demandez directement via un robot d'exploration Web, vous ne pourrez pas obtenir l'adresse cryptée finale. Pour résoudre ce problème inverse, nous avons créé un exemple simple de processus de mise en œuvre inversé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!