js逆向实战之某恩思登录参数加密

声明:本篇文章仅用于知识分享,不得用于其他用途

网址:aHR0cHM6Ly93d3cuNTFkbnMuY29tLw==

加密逻辑

  1. 输入用户名和密码登录,触发的数据包如下,所有的传参都是加密过的。
    image
  2. 全局搜索email_or_phone,总共13处,不过有一处非常明显,包含了所有要的参数。
    image
  3. 打断点,触发。$(".formAccount .email_or_phone").val()就是输入的手机号或邮箱,然后对其进行aes函数的处理。
    image
  4. 看下aes函数的加密逻辑,一目了然。
    image
  5. 其余的passwordtype都是同样的加密逻辑。redirectTo是个固定值,_token的值是由_token变量赋值的,看下_token变量是个定值还是变量。在当前文件下搜索。
    image
    image
    image
    image
    看下来应该是个定值。
  6. 代码就非常好写了。
  • encrypt.js
    var CryptoJS = require("crypto-js")
    
    function aes(val) {
    	var k = CryptoJS.enc.Utf8.parse('1234567890abcDEF');
    	var iv = CryptoJS.enc.Utf8.parse('1234567890abcDEF');
    	enc = CryptoJS.AES.encrypt(val, k, {
    		iv: iv,
    		mode: CryptoJS.mode.CBC,
    		padding: CryptoJS.pad.ZeroPadding
    	}).toString();
    	return enc;
    }
    
  • ensi.py
    import requests
    import execjs
    
    
    url = "https://www.51dns.com/login"
    headers = {
    	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0",
    	"Cookie": "xxxxxxxx",
    }
    username = input("请输入邮箱或手机号:")
    password = input("请输入密码:")
    jscode = open("encrypt.js", "r").read()
    js_compile = execjs.compile(jscode)
    encrypt_username = js_compile.call("aes", username)
    encrypt_password = js_compile.call("aes", password)
    account= js_compile.call("aes", "account")
    data = {
    	"email_or_phone": encrypt_username,
    	"password": encrypt_password,
    	'redirectTo': '/',
    	'type': account,
    	"_token": "U0mptVXAg1Acezzf5SG7RDoGoOBmlwtXQlv2VyGR",
    }
    resp = requests.post(url, headers=headers, data=data)
    resp.encoding = "utf-8"
    print(resp.text)
    
    如果输入的是不匹配的手机号和密码,返回的结果如下。
    image
    如果输入的是匹配的手机号和密码,返回的结果如下。
    image

这个加密逻辑是最简单的了,刚入门的新手可以拿来练习一下。

posted @ 2025-07-12 10:04  死不悔改奇男子  阅读(86)  评论(0)    收藏  举报