企查查 APP 网址协议头加密
2020-06-25 本文已影响0人
归隐小赵
企查查APP的H5网页参数有加密,分析JS后,发现多了个L函数:
image.png
image.png
扣下来函数
var l = function e(t) {
return r.default.isArray(t) ? r.default.chain(t).reduce((function(t, i) {
return t.push(e(i)),
t
}
), []).value() : r.default.isPlainObject(t) ? r.default.chain(t).keys().sortBy().reduce((function(i, n) {
var o = t[n];
return r.default.isPlainObject(o) || r.default.isArray(o) ? i[n] = e(o) : i[n] = o,
i
}
), {}).value() : t
};
根据之前的对比,T函数为Post内容,即OBJ对象
分析return可知,为三元运算符
return r.default.isArray(t) ?xxx:xxxx;
isArray是否对象,根据此,判断走的为else代码块
r.default.isPlainObject(t) ? r.default.chain(t).keys().sortBy().reduce((function(i, n) {
var o = t[n];
return r.default.isPlainObject(o) || r.default.isArray(o) ? i[n] = e(o) : i[n] = o,
i
}
), {}).value() : t
还是一个三元运算,根据之前的分析
isPlainObject是否为对象,是对象,走下面的代码
r.default.chain(t).keys().sortBy().reduce((function(i, n) {
var o = t[n];
return r.default.isPlainObject(o) || r.default.isArray(o) ? i[n] = e(o) : i[n] = o,
i
}
), {}).value()
如果不是,返回t本身
根据keys,得到键值(百度 keys函数)
sortBy函数 顺序排序
reduce 类似feach的循环函数
i目测为keys后的键值数组,n为键
var o = t[n];
设置变量o的内容为post内容
三元运算
return r.default.isPlainObject(o) || r.default.isArray(o) ? i[n] = e(o) : i[n] = o,
i
是否为对象或者数组,如果是,调用函数本身,进行再次循环
如果不是,那么函数i[键值]=内容
由此可知,实际将参数进行了一个排序算法
测试将JSON排序后加密请求:
image.png
OK。请求成功