asone917 发表于 2025-3-25 14:44

【js逆向】学某通模拟登录

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关.本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
目标网址:aHR0cHM6Ly9wYXNzcG9ydDIuY2hhb3hpbmcuY29tL2xvZ2luP2ZpZD0mbmV3dmVyc2lvbj10cnVlJnJlZmVyPWh0dHBzJTNBJTJGJTJGaS5jaGFveGluZy5jb20=
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
感谢各位大佬的观看,我是菜鸟,新手上路,在某同学的忽悠下入坑js逆向,请多指教


查看请求载荷,uname,password 均加密


查看响应数据


查看启动器,点击红框


进入,在上面找到加密的地方



断点,点击登录,触发断点,F9进入这个函数,一眼AES加密,把代码扣下来


测试成功


js代码:
const CryptoJS = require("crypto-js");

function encryptByAES(message, key) {
    let CBCOptions = {
      iv: CryptoJS.enc.Utf8.parse(key),
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    };
    let aeskey = CryptoJS.enc.Utf8.parse(key);
    let secretData = CryptoJS.enc.Utf8.parse(message);
    let encrypted = CryptoJS.AES.encrypt(
      secretData,
      aeskey,
      CBCOptions
    );
    return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
function run(username, password) {
    uname = encryptByAES(username, "u2oh6Vu^HWe4_AES")
    pwd = encryptByAES(password, "u2oh6Vu^HWe4_AES")
    return
}

编写主函数:
import requests

import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")
import execjs

login_url = '#填写请求接口'
headers = {
    "accept": "application/json, text/javascript, */*; q=0.01",
    "accept-encoding": "gzip, deflate, br, zstd",
    "accept-language": "zh-CN,zh;q=0.9",
    "cache-control": "no-cache",
    "connection": "keep-alive",
    "content-length": "216",
    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    "cookie": "你的cookie",
    "host": "",
    "origin": "",
    "pragma": "no-cache",
    "referer": "",
    "sec-ch-ua": "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
    "x-requested-with": "XMLHttpRequest",
}

username = input("请输入手机号/超星号:")
password = input("请输入密码:")
with open("main.js") as f:
    jscode = f.read()

js = execjs.compile(jscode)
result = js.call("run", username,password)
print(result)
payload = {
    "fid": -1,
    "uname": result,
    "password": result,
    "refer": '',
    "t": True,
    "forbidotherlogin": 0,
    "validate": "",
    "doubleFactorLogin": 0,
    "independentId": 0,
    "independentNameId": 0
}

res = requests.post(login_url, headers=headers, data=payload)
print(res.text)

运行截图:
失败:


成功:


今天的分享就到这里,这个案例很简单,适合新手入门练习!-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


ofo 发表于 2025-3-26 15:50

zp65210 发表于 2025-3-26 10:03
加密,放前端这系统加了个寂寞呀

你找一个登录加密不是放前端的网站出来......这种加密是用来做防爬或防截包修改的。前端输入明码再加密后存到服务器的数据库里,用户登录时,也需要用户加密后的数据和数据库的密码对比,正确的就给权限.你后端加密校验前端不校验?那人家直接修改服务器反回的数据就行了,还不用研究解密。说话前要先动手去实际环境操作下。这种验证肯定是在前端的.但这个网站的问题是密钥给得直接了,应该用动态密钥。密钥也要使用算法得出。这样就能增加难度.

VnYzm 发表于 2025-3-25 17:25

用对称加密,密钥直接放前端,这加密了个寂寞{:1_907:}。难怪这家公司当年能发生数据库泄露把学生们的个人信息全透个遍……

caixuan19911103 发表于 2025-3-25 16:12

学习逆向思维 ,分析问题 解决问题

xinxiu 发表于 2025-3-25 16:16

就这样水灵灵的扣出来了。

Bigstmart 发表于 2025-3-25 16:23

又学到了{:1_893:}

feirenzai 发表于 2025-3-25 17:19

厉害,学到了

lmc2hwj 发表于 2025-3-25 17:20

感谢大佬

joylau123 发表于 2025-3-25 17:38

大佬分析的简单明了,受益良多

asone917 发表于 2025-3-25 18:32

VnYzm 发表于 2025-3-25 17:25
用对称加密,密钥直接放前端,这加密了个寂寞。难怪这家公司当年能发生数据库泄露把学生们的个人 ...

哈哈哈哈哈哈哈哈好骂;www

Ascent 发表于 2025-3-25 20:17

十分好的思路,学习到了{:1_918:}
页: [1] 2 3 4 5 6 7
查看完整版本: 【js逆向】学某通模拟登录