【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)
运行截图:
失败:
成功:
今天的分享就到这里,这个案例很简单,适合新手入门练习!-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
zp65210 发表于 2025-3-26 10:03
加密,放前端这系统加了个寂寞呀
你找一个登录加密不是放前端的网站出来......这种加密是用来做防爬或防截包修改的。前端输入明码再加密后存到服务器的数据库里,用户登录时,也需要用户加密后的数据和数据库的密码对比,正确的就给权限.你后端加密校验前端不校验?那人家直接修改服务器反回的数据就行了,还不用研究解密。说话前要先动手去实际环境操作下。这种验证肯定是在前端的.但这个网站的问题是密钥给得直接了,应该用动态密钥。密钥也要使用算法得出。这样就能增加难度. 用对称加密,密钥直接放前端,这加密了个寂寞{:1_907:}。难怪这家公司当年能发生数据库泄露把学生们的个人信息全透个遍…… 学习逆向思维 ,分析问题 解决问题 就这样水灵灵的扣出来了。 又学到了{:1_893:} 厉害,学到了 感谢大佬 大佬分析的简单明了,受益良多 VnYzm 发表于 2025-3-25 17:25
用对称加密,密钥直接放前端,这加密了个寂寞。难怪这家公司当年能发生数据库泄露把学生们的个人 ...
哈哈哈哈哈哈哈哈好骂;www 十分好的思路,学习到了{:1_918:}