JS逆向-RSA算法加密(微流云平台模拟登录)

前言

该文章为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系作者删除~

需求

模拟登录
目标网站:
aHR0cHM6Ly93d3cud2VpLWxpdS5jb20vdXNlci9sb2dpbi5odG1s

正文

在这里插入图片描述
在这里插入图片描述

登录后会触发2个接口,一个是对密码进行了加密。另外一个是返回一个32位的public key

在这里插入图片描述
看启动器,明显有个login

在这里插入图片描述
可以看到此处为密码加密的代码
var password = encrypt.encrypt(pubCode + sha512(password))
sha512经过测试为标准算法加密
pubCode可以在上面看到生成的方法:
在这里插入图片描述
res是后台返回的数据
那么pudCode其实就是访问/apo/v1/Token/code这个接口,返回的数据的data的item2。
那这个值就是我们一开始看到的32位的public key。pub同理

那么可以用JS模拟还原
npm install jsencrypt 可以实现 JSEncrypt()
jsencrypt 最后使用3.2.1版本,不然有可能会报错

在这里插入图片描述
然后会报一个window未定义的错误
我们需要找到node_modules里的jsencrypt.js,加上 window = global;

var JSEncrypt = require('jsencrypt')
var CryptoJS = require('crypto-js')


// pub = '-----BEGIN PUBLIC KEY-----\r\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo0nnZ/9wVN7HV/VeepE3\r\nIVAlAT6n1fmkXrHxbA08Olv+nYp7QlTW3heOEsOWTEMKRcYU1xAIMwt7pZ+qbyFD\r\nitnHkQUqneYs6PKeK2nDxGXR4MIRUz/MFJ4I3QRzmmklFPkJpfxnL0HnwNHw0fm4\r\nuX3GD9qxEcVsqSdhQMvgrW7gFQMD9tSiaXflgyQv1CZjCPNW2xSpWVoFl0+ODpFT\r\nsEmEt+uRiBD1ZVJnTVTCI0txqFLzFw/JwhUcUgflFRovtkcXTU+8aUCtnAAW019U\r\n5Anw6S4S6Ct2PTO0ZFwRNgjboRmT/0x/zdUfn/h6otQSllRfdqF1RVG4HoDf1U0s\r\neQIDAQAB\r\n-----END PUBLIC KEY-----'
// pubCode = '0afb100f5cb7448989f3ba532bb8508e'
// password = 'sadasd'

function sha512(t) {
    var text = t
    return CryptoJS.SHA512(text).toString();
}

function get_pwd(pub, pubCode, password) {
    var encrypt = new JSEncrypt();
    encrypt.setPublicKey(pub);
    var encrypted = encrypt.encrypt(pubCode + sha512(password));
    return encrypted
}

然后用python访问第一个接口获得pub和pubcode两个值,在调用js代码的get_pwd方法即可

import requests
import execjs

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
}


def login1():
    url = 'https://api.wei-liu.com/api/v1/Token/code'
    resp = requests.get(url=url, headers=headers)
    pub = resp.json()['data']['item1']
    pubCode = resp.json()['data']['item2']
    return pub, pubCode


def login(password):
    url = 'https://api.wei-liu.com/api/v1/Token'
    data = {
        'code': "",
        'grant_type': "password",
        'language': "zh-CN",
        'password': password,
        'userType': 1,
        'username': "sadas"
    }
    resp = requests.post(url=url, headers=headers, json=data)
    print(resp.json())


with open('03 微流云模拟登录.js', encoding='utf-8') as f:
    ctll = execjs.compile(f.read())
    password = 'vsdfa'
    item = login1()
    pwd = ctll.call('get_pwd', item[0], item[1], password)
    login(pwd)

在这里插入图片描述
注,网站定义了请求参数需要是Json格式,所以我们在request中需要传入json

最后

欢迎联系作者交流更多

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值