【JS逆向百例】某点数据逆向分析,多方法详解
字数 1275 2025-08-19 12:40:45

某点数据逆向分析教学文档

前言

本文详细分析某点数据排行榜接口的逆向过程,提供3种解决方案:手动Webpack+补环境、自动扣Webpack模块和算法还原。目标接口为aHR0cHM6Ly9hcHAuZGlhbmRpYW4uY29tL3JhbmsvaW9zLw==(Base64解码后为某点数据排行榜地址)。

逆向目标

  • 接口:/pc/app/v1/rank
  • 关键参数:k参数(动态生成)
  • 其他参数:timecountry_id等(固定或简单参数)

逆向过程

1. 抓包分析

  1. 打开开发者工具,访问排行榜页面
  2. 在Network中抓取/pc/app/v1/rank接口
  3. 观察请求参数,发现k参数每次请求都会变化

2. XHR断点分析

  1. 在Sources面板下XHR断点:api.diandian.com/pc/app/v1/rank
  2. 刷新页面,断点触发后通过调用堆栈找到m.request
  3. m变量中查找回调方法,重点关注onRequest
  4. 发现k参数在t函数中生成

3. k参数生成逻辑

var r = h()(t.params, !1);
o = Object(y.a)(r, path, { 
    s: n.s, 
    k: n.k, 
    l: n.l, 
    d: n.d, 
    sort: n.sort, 
    num: n.num
}, "get");
t.params.k = o

y.a函数来自Webpack模块2294,其内部逻辑:

  1. 使用Object(l.b)进行加密(AES)
  2. 通过t.from方法编码为Base64

解决方案

方案1:手动Webpack+补环境

步骤1:获取分发器

  1. y=n(2294)处下断点
  2. 获取runtime.js(Webpack分发器)
  3. 将分发器导出:window.kk=r

步骤2:查找模块

// 控制台查找模块
n.m[模块名]

// 示例调用
a = window.kk(2294)
r = { "start_time": 1717776000, "end_time": 1718345618 }
n = { 
    "proxy": "/app", 
    "target": "", 
    "sort": "dd", 
    "num": 10, 
    "s": "d044bec62c1c9f9eee1ebd567e501719", 
    "k": "93086c0e7c41cf46", 
    "l": "091043cf5d1393af", 
    "d": 0 
}
path = "/v2/user/monitor/msg"
o = Object(a.a)(r, path, { 
    s: n.s, 
    k: n.k, 
    l: n.l, 
    d: n.d, 
    sort: n.sort, 
    num: n.num
}, "get");
console.log(o)

步骤3:补环境

  1. 根据报错信息补全缺失模块
  2. 补全常见环境如documentnavigator
  3. 最终代码量约6万行

方案2:自动扣Webpack模块

步骤1:重写分发器

window.code = '';
r = function (e) {
    if (r[e]) return r[e].exports;
    var d = r[e] = { i: e, l: !1, exports: {} };
    console.log(e)
    window.code += e + ':' + o[e] + ',\r\n'
    return o[e].call(d.exports, d, d.exports, r), d.l = !0, d.exports
}

步骤2:导出模块

  1. 刷新页面并操作排行榜
  2. 控制台执行copy(window.code)导出模块
  3. 将导出的模块放入本地分发器

方案3:算法还原

关键函数分析

  1. Object(l.b):AES加密
  2. t.from:UTF8编码

算法实现

// UTF8编码实现
t = []
t.from = function (hexString, encoding) {
    if (encoding !== "utf8") {
        throw new Error("Unsupported encoding");
    }
    let byteArray = new Uint8Array(hexString.split('').map(char => char.charCodeAt(0)));
    return byteArray;
}

// AES加密实现(Node.js)
const crypto = require('crypto');
var c = crypto.createDecipheriv("aes-128-cbc", n, o);
return d += c.update(e, "hex", "utf8"), d += c.final("utf8");

// 辅助函数
function c(a) {
    return function(t) {
        return t;
    };
}
var n = c()(t);

function _(n) {
    return typeof n === 'object' && n !== null;
}

完整实现

约70行代码即可完成k参数生成,相比Webpack方案更简洁。

八爪鱼采集方案(无代码方案)

使用步骤

  1. 下载安装八爪鱼采集器
  2. 新建任务,输入目标网址
  3. 使用"自动识别"功能生成采集模板
  4. 调整识别结果,删除多余字段或添加需要的字段
  5. 设置代理(推荐快代理的私密代理或独享代理)
  6. 保存并开始采集

进阶功能

  1. 自动打码
  2. 点击翻页
  3. 定时采集

总结

方案 难度 代码量 适用场景
手动Webpack+补环境 ~6万行 需要完整环境
自动扣Webpack模块 ~6万行 多JS文件模块
算法还原 ~70行 追求简洁
八爪鱼采集 无编程基础

选择方案时应根据自身技术水平和需求场景决定。对于初学者推荐从算法还原开始尝试,有经验者可选择Webpack方案获取更完整的功能。

某点数据逆向分析教学文档 前言 本文详细分析某点数据排行榜接口的逆向过程,提供3种解决方案:手动Webpack+补环境、自动扣Webpack模块和算法还原。目标接口为 aHR0cHM6Ly9hcHAuZGlhbmRpYW4uY29tL3JhbmsvaW9zLw== (Base64解码后为某点数据排行榜地址)。 逆向目标 接口: /pc/app/v1/rank 关键参数: k 参数(动态生成) 其他参数: time 、 country_id 等(固定或简单参数) 逆向过程 1. 抓包分析 打开开发者工具,访问排行榜页面 在Network中抓取 /pc/app/v1/rank 接口 观察请求参数,发现 k 参数每次请求都会变化 2. XHR断点分析 在Sources面板下XHR断点: api.diandian.com/pc/app/v1/rank 刷新页面,断点触发后通过调用堆栈找到 m.request 在 m 变量中查找回调方法,重点关注 onRequest 发现 k 参数在 t 函数中生成 3. k参数生成逻辑 y.a 函数来自Webpack模块2294,其内部逻辑: 使用 Object(l.b) 进行加密(AES) 通过 t.from 方法编码为Base64 解决方案 方案1:手动Webpack+补环境 步骤1:获取分发器 在 y=n(2294) 处下断点 获取runtime.js(Webpack分发器) 将分发器导出: window.kk=r 步骤2:查找模块 步骤3:补环境 根据报错信息补全缺失模块 补全常见环境如 document 、 navigator 最终代码量约6万行 方案2:自动扣Webpack模块 步骤1:重写分发器 步骤2:导出模块 刷新页面并操作排行榜 控制台执行 copy(window.code) 导出模块 将导出的模块放入本地分发器 方案3:算法还原 关键函数分析 Object(l.b) :AES加密 t.from :UTF8编码 算法实现 完整实现 约70行代码即可完成k参数生成,相比Webpack方案更简洁。 八爪鱼采集方案(无代码方案) 使用步骤 下载安装八爪鱼采集器 新建任务,输入目标网址 使用"自动识别"功能生成采集模板 调整识别结果,删除多余字段或添加需要的字段 设置代理(推荐快代理的私密代理或独享代理) 保存并开始采集 进阶功能 自动打码 点击翻页 定时采集 总结 | 方案 | 难度 | 代码量 | 适用场景 | |------|------|--------|----------| | 手动Webpack+补环境 | 高 | ~6万行 | 需要完整环境 | | 自动扣Webpack模块 | 中 | ~6万行 | 多JS文件模块 | | 算法还原 | 高 | ~70行 | 追求简洁 | | 八爪鱼采集 | 低 | 无 | 无编程基础 | 选择方案时应根据自身技术水平和需求场景决定。对于初学者推荐从算法还原开始尝试,有经验者可选择Webpack方案获取更完整的功能。