概要
提示:仅供学习,不得用做商业交易,如有侵权请及时联系
逆向:JS逆向 - volaris航司(注册表单加密)
URL:aHR0cHM6Ly93d3cudm9sYXJpcy5jb20vYWdlbmN5L3JlZ2lzdGVy
整体架构流程
提示:分析位置
1、首先进行XHR断点:createaccount
2、往上跟栈你会发现,生成的地方在:const hi = lt.serializeBody();
3、跟栈进去发现没头绪了,里面是一个class定义的序列化对象,实例化进去的body是一个JSON对象明文
4、到这里,发现往后面跟也比较难跟到加密的地方,那么我们可以想想什么是序列化操作,它是不是得把JSON格式的对象转换成字符串,然后进行加密呢,所以直接hook
parse1 = JSON.stringify;
JSON.stringify = function(){
console.log('stringify:',arguments[0]);
debugger;
return parse1(arguments[0]);
};
5、当我们hook到json.stringify里面传入的是刚刚那个this.body发现它后面就是加密了
- AES标准加密:key、iv随机
- RSA加密:key 接口返回
提示:publickey返回接口:volarisAppConfig.json
const CryptoJS = require('crypto-js');
const forge = require('node-forge');
publicKey = "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvAtc+ZqEbkSH1cRpTEe/w5vA70gn1CgVEEQYkkwIfpZrLAb5/S3bMLTuCZd46nSeK6GU49fZiEPESg1Z1+zrD3FZkHtOgQUFzB+9cifBrMYT1sdCZ5YLkP+U1F4B7/ItdAipsSyJFRP7Y8vlyJTRGTCgmE4wTZJf2G4U0FKfpbSZ2BQuAEqb4xEQsJoTsuRaF7uH85+hvr/hIfssgVJO1VZ6zC8qPY7VKCKmA6GHed9UdNOPfl/GNm+xYeE/FKMw0H1AfPa4JjM5pvMdTcpKYmJVE09zSzPZilSqu5ya1IvzRCURvT8Xh6bIQY53BVoyMQZJSuEFvn8gkL/nMc92/wIDAQAB-----END PUBLIC KEY-----"
encrypt = function (R) {
var _ = CryptoJS,keySize = 128,iterations = 100;
const $ = _.lib.WordArray.random(keySize / 8)
, V = _.lib.WordArray.random(keySize / 8)
, X = _.PBKDF2(V, $, {
keySize: keySize / 32,
iterations: iterations
})
, Y = _.lib.WordArray.random(keySize / 8)
, se = _.AES.encrypt(R, X, {
iv: Y,
padding: _.pad.Pkcs7,
mode: _.mode.CBC
})
, J = forge.pki.publicKeyFromPem(publicKey)
, ke = [];
debugger;
return ke.push(btoa(J.encrypt(_.enc.Base64.stringify(Y.concat(X))))),
ke.push(_.enc.Base64.stringify(se.ciphertext)),
ke.toString()
}
function get_bdoy() {
body = {自己填}
const $ = JSON.stringify(body);
let V = [];
for (let Y in $)
$.hasOwnProperty(Y) && "string" == typeof $[Y] && V.push(String.fromCharCode($.charCodeAt(Y) + 1));
const X = encrypt(JSON.stringify(V.join("")));
return JSON.stringify(X)
}
console.log(get_bdoy())
提示:这里注意node版本得使用20版本以下的(最好18.18.0),不然加密不对
技术名词解释
提示:请求头authorization:jwt
session接口返回(无加密):存在请求链强校验,不然就406
createaccount接口(表单加密):存在请求链校验,加密错误返回500,reCaptcha失效或者错误返回400
captchaResponse:recaptchaV2验证返回
小结
提示:学习交流主页,星球持续更新中:(+星球主页+v)