【JS逆向学习】快乐学堂登陆接口(自定义DES加密、ddddocr验证码识别)

逆向目标
  • 网址:https://www.91118.com/Passport/Account/Login
  • 接口:https://www.91118.com/passport/Account/LoginPost
  • 参数:
    • pass
    • r
逆向过程

输入手机号、密码、验证码 点击登陆,多试几次,然后观察并比较不通请求参数有哪些变化,其中 ckcode 是验证码
在这里插入图片描述

逆向分析

先使用关键词 pass 搜索,匹配项太多,直接从启动器入口进去跟栈分析
在这里插入图片描述
调试如下
在这里插入图片描述
可以发现参数 r就是一个随机值 Math.random()pass 跟栈进去如下
在这里插入图片描述
加解密的方法都有了

var _key = 'k1fsa01v';
var _iv = 'k1fsa01v';
function encryptByDES(message) {
   
   
    var keyHex = CryptoJS.enc.Utf8.parse(_key);
    var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
   
   
        iv: CryptoJS.enc.Utf8.parse(_iv),
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}
function decryptByDES(ciphertext) {
   
   
    var keyHex = CryptoJS.enc.Utf8.parse(_key);
    var decrypted = CryptoJS.DES.decrypt({
   
   
        ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
    }, keyHex, {
   
   
        iv: CryptoJS.enc.Utf8.parse(_iv),
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return decrypted.toString(CryptoJS.enc.Utf8);
}

看着像是 DES 对称加密,使用标准库 crypto-js 来加密看看结果是否一致


var CryptoJS = require("crypto-js");
// 定义加密密钥,使用Utf8编码解析密钥字符串
const SECRET_KEY = CryptoJS.enc.Utf8.parse("k1fsa01v");
// 定义加密向量IV,使用Utf8编码解析IV字符串
const SECRET_IV = CryptoJS.enc.Utf8.parse("k1fsa01v");

/**
 * 加密函数,接受一个数据参数,返回加密后的字符串
 * @param {string|object} data - 需要加密的数据,可以是字符串或对象
 * @returns {string} 加密后的数据字符串
 */
function encrypt(data) {
   
   
	// 如果数据是对象类型,则尝试将其转换为字符串
	if (typeof data === "object") {
   
   
		try {
   
   
			data = JSON
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗雅颂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值