JS 逆向:PEDATA 资讯接口加密解密与 zlib.gunzipSync 应用
1. 逆向目标
- 目标系统:某投资领域 SaaS 系统 PEDATA MAX 资讯模块
- 请求地址:
https://max.pedata.cn/api/q4x/newsflash/list - 返回特征:响应数据中的
data字段为经过多层加密的字符串,包含exor异或密钥和ts时间戳。 - 核心难点:数据经过 Base64、XOR 异或及 Gzip 压缩处理,需还原明文 JSON。
2. 抓包分析
在页面加载时,通过开发者工具 XHR 面板筛选出 newsflash/list 请求。观察请求参数与响应结构:
2.1 请求参数
Payload 主要包含翻页信息(如页码、每页数量),无明显加密特征。重点在于请求头:
HTTP-X-TOKEN:用于标识用户身份,替代 Cookie 进行鉴权。Cookie:部分广告统计参数(如Hm_lvt_xxx)可忽略。
2.2 响应结构
{
"data": "L+o+YmIyNDE...",
"exor": "01",
"ts": 1708632000
}
其中 data 为加密串,exor 为后续解密所需的异或密钥。
3. 加密逻辑逆向
3.1 定位解密函数
在浏览器调试器中搜索键名 exor,定位到唯一引用处。该处代码调用了对象方法 Object(p["y"])(e.data.data, e.data.exor)。跟进该方法发现其内部调用了名为 M 的函数。
3.2 关键函数解析
核心解密逻辑位于 M(t, n) 函数中:
function M(t, n) {
var a = L(Object(s["a"])(), n);
var r = Y((t), a);
c = o..(e.(r)).();
.(c);
}


