【2023-02-20】JS逆向之翼支付

提示:文章仅供参考,禁止用于非法途径

文章目录


前言

真的好久没更了……


提示:以下是本篇文章正文内容,下面案例可供参考

分析

进到网页,加载两个接口
在这里插入图片描述
applyLoginFactor 接口返回一个RSA公钥,switchForApolloForH5接口使用上个接口返回的公钥,有点类似注册公钥的意思,但是后面的接口却没用到

第二个接口有三个加密的,下断点就很容易找到
在这里插入图片描述
在这里插入图片描述
这个rk是个随机值
在这里插入图片描述
erk是对rk进行rsa加密,edata是对params,原始提交数据的AES加密,最后的sign是对原始提交数据的MD5一下,返回下面的就是ok了
在这里插入图片描述

然后随便输个手机号,会出来易盾的滑块,也是简单的,他不校验actoken,这里就不叙述滑块了

在这里插入图片描述

过了滑块后会请求三个接口,第一个获取公钥,也可以叫服务器公钥
在这里插入图片描述

第二个接口返回的数据是加密过的
在这里插入图片描述
提交的数据也有一个加密
在这里插入图片描述

加密位置在这里,但是这个里的 PublicKey 不是之前返回的,是要重新获取的客户端PublicKey
在这里插入图片描述
返回的公钥密钥,都会使用到

在这里插入图片描述

state.clientKey = _this2.clientRsaKeyUpload();
var params = {
    
    
    openId: openId,
    clientRsaPublicKey: state.clientKey.clientRsaPublicKey  //这里是客户端公钥
};
var RSAUtils = new JSEncrypt();
state.serverRsaPublicKey = res.result; // 这里是服务器公钥
RSAUtils.setPublicKey(res.result);
var encData = RSAUtils.encrypt(JSON.stringify(params));

返回的数据是加密的,需要解密

var _RSAUtils2 = new JSEncrypt();

_RSAUtils2.setPrivateKey(state.clientKey.clientRsaPrivateKey);//这里用的客户端私钥

var data = JSON.parse(_RSAUtils2.decryptLong(res.result)); // 去解密接口返回的数据
{
    
    
	'aesKey': 'f3d219b220214b3b8d3751ab42bb129e', 
	'clientRsaPublicKeySign': '9VJ71Qq8Ifa3a/IEhFyFOKxt7DSLRh0lSlUe5zsFa8tZfgDcr+UaSRRn7SY2rjiAj2Za+2M+cX129sXnMHJexnv/Oizb6m6ntOBtNPN4b3Wh6RBmFRW7Jnm5kokLTNN+/B2oPfUqaMIgkeGKmrMj3N8wceQ50ks73O5nrXGs5t2uAtTxXRszbLjiEZP3FjxqIv36usCbYv2GVanEJo800ENM7MbYAuzZyyytxrp+RH8j3wdbsT77aigaA1sJtREJ6ju4P459QsLIBieITiEy5AjzbNC2qNvREOGDBfDht7Kop+V0LieiLAS0shByc8XFDHXCGcZy1dhFz7kNEiMrYx5r3f2Ue9IZfbc/9RyaR9wGx0scLdJ1WwTKH0szRGtY1ME4JGMgLyhduPUfL+rs4gice2gTkh3haaegynTBenO5FroOl6bg8G+PM61e0BJZeIpuxK8AQzhnFhAeUqGnRIu9FKZhyLvxuuXJ/S7ypa3JUL+y1hO3hla4THLFWBNm0YIe2JqtOpJNkhWF6aKosZbHCxbZV/CcRrlazw7KJg/mhPlB9MuA6Z3bLWfqgRgg88A+r9azOAzdFcaxVs38KzSl0Gw3RpfmuqJC+Mn8NbKT/RCLGb0BXEBJKc43JpWGr67JRik7M/G/8Bx83tscwLmbWTyM+iOfwO1bImKdxKg='
}


拿到了这个aesKey,最后请求发送短信的接口
在这里插入图片描述
加密都是现成的,直接扣就完事

state.aesKey = data.aesKey;
GibberishAES.size(256);

var _encData = GibberishAES.aesEncrypt(text, state.aesKey);//aes加密提交的数据

_RSAUtils.setPrivateKey(state.clientKey.clientRsaPrivateKey);

var aesKeySign = _RSAUtils.sign(state.aesKey, CryptoJS.SHA512, 'sha512'); //sha512加密aeskey

在这里插入图片描述


总结

滑块

在这里插入图片描述

获取验证码
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_26079939/article/details/129127687