找到数据接口,有一个token的加密值,跟栈分析,发现所有的栈都经过了混淆,搜索肯定是没用的,只能慢慢跟栈分析
首先进入第三个栈,打上断点,进行分析,看加密参数有没有生成,发现加密参数已经生成。那么往下跟栈到异步。
在异步打上断点,看看加密参数有没有生成。
发现已经生成,那就不是 在异步函数处生成的加密参数,往下跟栈。
发现onPageChange栈处加密参数消失
onFetchData处加密参数还有,因此是在这里加密的,打上断点
打印参数
下面的代码_0x2fa7bd['a']就是加密函数
_0x263439 = Object(_0x2fa7bd['a'])(this['$store']['state']['url']['index'])
进入加密函数,打上断点
复制下来,再具体看看里面的变量名分别代表什么意思。
去看看 _0x189cbb代表什么,原来是个标准加密库,i应该是sha1加密我们直接导入库
改好后,发现 _0x189cbb 未定义,其实就是加密库,跟上面一样,一并改好即可。
接着分析
我们看看 _0x358b1f做了什么事情
其实就是经过了一个base64的加密
那么我们来改写代码把,可以发现出结果了
完整代码:
const CryptoJS = require("crypto-js");
const Buffer = require('buffer').Buffer;
function get_base64(message) {
buffer = Buffer.from(message)
return buffer.toString('base64')
}
function _0x456254() {
for (var _0x5da681 = Math['round'](new Date()['getTime']() / 0x3e8)['toString'](), _0x2a83dd = arguments['length'], _0x31a891 = new Array(_0x2a83dd), _0x596a02 = 0x0; _0x596a02 < _0x2a83dd; _0x596a02++)
_0x31a891[_0x596a02] = arguments[_0x596a02];
_0x31a891['push'](_0x5da681);
var _0xf7c3c7 = CryptoJS.SHA1(_0x31a891['join'](','))['toString'](CryptoJS['enc']['Hex'])
, _0x3c8435 = [_0xf7c3c7, _0x5da681]['join'](',')
, _0x104b5b = get_base64(_0x3c8435);
return _0x104b5b;
};
console.log(_0x456254())