Analyse de JS (anti - escalade)

Zsyl 2021-08-19 22:24:19 阅读数:11

analyse js anti escalade

Objectifs d'apprentissage:

  1. Compris. PositionnementjsMéthode
  2. Compris. Ajouter une observation de point d'arrêtjsComment exécuter le processus
  3. Application js2pyAccèsjsMéthode

1 C'est sûr.jsEmplacement

Pour le cas précédent de Renren,On a comprisurlIl y a des paramètres partiels dans l'adresse,Mais comment les paramètres sont - ils générés?

Sans aucun doute,Le paramètre doit êtrejsProduit,Comment obtenir les règles de ces paramètres?Pour en savoir plus

1.1 Voir la liaison du boutonjsÉvénements

Insérer la description de l'image ici

En cliquant sur le bouton ,Puis cliquez surEvent Listener, Certains sites Web peuvent trouver des événements liés ,Correspondant, Il suffit de cliquer pour passer à jsEmplacement

1.2 Adoptionsearch all file Pour chercher

Certains boutons du site Web peuvent ne pas être liés jsSurveillance des événements, Vous pouvez alors le trouver en recherchant les mots clés dans la requête jsEmplacement,Par exemple,livecell

Insérer la description de l'image ici

Cliquez sur embellir les options de sortie

Insérer la description de l'image ici

Vous pouvez continuer à rechercher des mots clés

Insérer la description de l'image ici

2 ObservationjsProcessus de mise en œuvre

Trouverjs Après la position de , Nous pouvons venir à travers l'observation jsEmplacement,Trouverjs En particulier sur la façon dont , Ensuite, nous pouvons passer par python Pour simuler jsMise en œuvre, Ou utiliser quelque chose comme js2pyAllez - y.js Le Code est converti en python Programme à exécuter

Observationjs La façon la plus simple de le faire est d'ajouter des points d'arrêt

Insérer la description de l'image ici

Comment ajouter un point d'arrêt : Cliquez sur le numéro de ligne à gauche pour ajouter , À droite BreakPoints Tous les points d'arrêt existants apparaîtront dans

Cliquez sur login après avoir ajouté un point d'arrêt , Chaque fois que le programme s'arrête au point d'arrêt , En générant des variables sur cette ligne , Les résultats des variables sont présentés dans ScoopeMoyenne

Dans le coin supérieur droit de l'image ci - dessus 1,2,3 Trois fonctions ,Représente séparément:
- 1: Continuez jusqu'au point d'arrêt suivant
- 2: Dans la fonction appelée
- 3: Sauter d'une fonction appelée

3 js2pyUtilisation de

J'ai compris js Comment générer les données que nous voulons , Ensuite, nous devons utiliser le programme pour obtenir js Les résultats après l'exécution

3.1 js2pyIntroduction

js2pyC'est unjs Un outil de traduction pour , C'est aussi un passage pur pythonRéaliséjs Interpréteur pour ,github Source supérieure et exemple

3.2 jsLa mise en œuvre de la pensée

js Les modes d'exécution sont généralement divisés en deux :

  1. J'ai compris.js Après le contenu et l'ordre d'exécution ,AdoptionpythonPour finirjsProcessus de mise en œuvre,Obtenir des résultats
  2. J'ai compris.js Après le contenu et l'ordre d'exécution ,Utilisation similairejs2py Le module de jsCode,Obtenir des résultats

Mais en utilisant python Mise en oeuvre du programme js En cours d'exécution , Besoin d'observation js Chaque étape de ,C'est très gênant., Donc plus souvent nous choisissons d'utiliser quelque chose comme js2py Pour exécuter js, Ensuite, nous allons utiliser js2py Réaliser l'acquisition des paramètres de connexion de Renren

3.3 Réalisation concrète

Localiser pour se connecter jsCode

formSubmit: function() {

var e, t = {
};
$(".login").addEventListener("click", function() {

t.phoneNum = $(".phonenum").value,
t.password = $(".password").value,
e = loginValidate(t),
t.c1 = c1 || 0,
e.flag ? ajaxFunc("get", "http://activity.renren.com/livecell/rKey", "", function(e) {

var n = JSON.parse(e).data;
if (0 == n.code) {

t.password = t.password.split("").reverse().join(""),
setMaxDigits(130);
var o = new RSAKeyPair(n.e,"",n.n)
, r = encryptedString(o, t.password);
t.password = r,
t.rKey = n.rkey
} else
toast(" Impossible d'obtenir la clé publique "),
t.rKey = "";
ajaxFunc("post", "http://activity.renren.com/livecell/ajax/clog", t, function(e) {

var e = JSON.parse(e).logInfo;
0 == e.code ? location.href = localStorage.getItem("url") || "" : toast(e.msg || " Erreur de connexion ")
})
}) : toast(e.msg)
})
}

D'après le Code :

  1. Pour nous connecter, nous devons chiffrer et obtenir le mot de passe rkeyValeur du champ
  2. rkey Valeur du champ nous envoyons la demande directement rkey La demande est disponible
  3. Le mot de passe est d'abord inversé puis utilisé RSACryptage, js Le Code est compliqué , Nous espérons pouvoir passer à travers pythonExécution intermédiairejsPour réaliser

Idées de réalisation:

  1. UtilisersessionEnvoyerrKey Besoin d'informations pour se connecter

    • url: http://activity.renren.com/livecell/rKey
    • Méthodes: get
  2. Chiffrer le mot de passe en fonction des informations obtenues
    2.1 Préparer le nom d'utilisateur et le mot de passe

    2.2 Utiliserjs2pyGénérerjs Environnement d'exécution pour :context

    2.3 Copie utilisée pour js Contenu du document dans ce projet

    2.4 LirejsContenu du document,Utilisercontext Pour les exécuter

    2.5 Verscontext Ajouter les données nécessaires à l'environnement

    2.6 Utilisercontext Exécuter le mot de passe chiffré jsString

    2.7 Adoptioncontext Obtenir des informations chiffrées sur le mot de passe

  3. Utilisersession Envoyer une demande de connexion

    • URL: http://activity.renren.com/livecell/ajax/clog

    • Méthode de demande: POST

    • Données:

      phoneNum: xxxxxxx
      password: ( Produit après cryptage )
      c1: 0
      rKey: rkey Demande d'acquisition
      

Code spécifique

Plusieurs téléchargements sont nécessaires à l'avance js File to Local :

BigInt.js

RSA.js

Barrett.js

import requests
import json
import js2py
# - Idées de réalisation:
# - UtilisersessionEnvoyerrKey Besoin d'informations pour se connecter 
# - url: http://activity.renren.com/livecell/rKey
# - Méthodes: get
# AccèssessionObjet
session = requests.session()
headers = {

"User-Agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Mobile Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
"Content-Type":"application/x-www-form-urlencoded"
}
# Paramètressession En - tête de demande pour 
session.headers = headers
response = session.get("http://activity.renren.com/livecell/rKey")
# print(response.content.decode())
n = json.loads(response.content)['data']
# - Chiffrer le mot de passe en fonction des informations obtenues 
# - Préparer le nom d'utilisateur et le mot de passe 
phoneNum = "131..."
password = "****"
# - Utiliserjs2pyGénérerjs Environnement d'exécution pour :context
context = js2py.EvalJs()
# - Copie utilisée pour js Contenu du document dans ce projet 
# - LirejsContenu du document,Utilisercontext Pour les exécuter 
with open("BigInt.js", 'r', encoding='utf8') as f:
context.execute(f.read())
with open("RSA.js", 'r', encoding='utf8') as f:
context.execute(f.read())
with open("Barrett.js", 'r', encoding='utf8') as f:
context.execute(f.read())
# - Verscontext Ajouter les données nécessaires à l'environnement 
context.t = {
'password': password}
context.n = n
# - Exécuter le mot de passe chiffré jsLes caractères
js = ''' t.password = t.password.split("").reverse().join(""), setMaxDigits(130); var o = new RSAKeyPair(n.e,"",n.n) , r = encryptedString(o, t.password); '''
context.execute(js)
# - Adoptioncontext Obtenir des informations chiffrées sur le mot de passe 
# print(context.r)
password = context.r
# - Utilisersession Envoyer une demande de connexion 
# - URL: http://activity.renren.com/livecell/ajax/clog
# - Méthode de demande: POST
# - Données:
# - phoneNum: 15565280933
# - password: ( Produit après cryptage )
# - c1: 0
# - rKey: rkey Demande d'acquisition 
data = {

'phoneNum': '131....',
'password': password,
'c1':0,
'rKey':n['rkey']
}
# print(session.headers)
response = session.post("http://activity.renren.com/livecell/ajax/clog", data=data)
print(response.content.decode())
# Accès aux ressources connectées 
response = session.get("http://activity.renren.com/home#profile")
print(response.content.decode())

4 Résumé

  1. Enchrome L'événement de liaison de l'élément d'observation dans peut déterminer js
  2. EnchromeMoyennesearch all file Les mots clés de recherche peuvent être déterminés jsEmplacement
  3. Observationjs Le processus de génération de données peut être observé en ajoutant des points d'arrêt
  4. js2pyUtilisation de
    • Besoin de préparation jsLe contenu de
    • Générerjs Environnement d'exécution pour
    • Exécution dans un environnement d'exécution jsLa chaîne de, Données entrantes ,Obtenir les résultats

Copyright:Cet article est[Zsyl]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2021/08/20210819222413471x.html