JS逆向中加密参数与Cookie生成的定位技巧

作者:听澜时间:2026-10-31 10:26:44浏览:447

本文详解JS逆向中加密参数与动态Cookie的定位流程。首先通过重放攻击、检查接口返回值及页面固定值排除非关键参数;若无效,则利用开发者工具的XHR断点、DOM断点及Event Listener Breakpoints精准捕获生成位置;最后介绍通过Hook JSON方法或修改document.cookie描述符来追踪加密算法的具体实现。

前言

完成网络请求抓包分析后,通常需借助开发者工具对加密参数执行全局搜索。若常规搜索未能定位到相关代码,则需采用特定的排查策略来锁定目标。

此外,若发现请求中携带的Cookie并非由服务端通过响应头返回,则该Cookie极可能由前端JS动态生成。此时,快速定位其生成逻辑成为逆向分析的关键。

加密参数的处理步骤

在JS逆向分析中,遇到加密参数时切忌直接盲目寻找函数入口,否则易陷入大量无关代码导致效率低下。梳理一套标准化的排查流程至关重要,能有效规避弯路,提升定位效率。

  • 重放攻击
  • 尝试删除疑似加密参数后重新发起请求(重放攻击)。若请求成功,表明该参数非必需,可直接跳过对其的分析。
  • 若重放攻击失败,需进一步检查该参数是否源自其他接口的响应数据。
  • 若非接口返回值,则应在页面源码中全局搜索,确认其是否为硬编码的固定值。实践中曾有误判导致在固定页面值中无效搜索的经历,需特别注意此类情况。
  • 对于Cookie定位,优先检查HTTP响应包中是否包含Set-Cookie头部,以判断其来源。

加密参数的定位方法

若上述常规排查步骤均无效,则需进入逆向分析阶段,通过技术手段追踪参数来源。主要方案包括以下几种。

搜索

前言

开发者工具提供两种搜索模式:一种是仅在当前页面元素范围内搜索,另一种是全局搜索,可覆盖所有脚本资源。

利用搜索功能定位参数位置较为精准,但往往返回大量结果,需结合上下文进行筛选以锁定关键代码。

断点

XHR断点

以网易云音乐为例,

前言

点击播放按钮后,可观察到一条携带音乐URL下载链接的请求。若能模拟该请求,即可实现音乐下载功能。

前言

该请求需携带params和encSecKey两个关键参数。

前言

在Source面板的XHR断点中添加包含params字符串的断点,当请求内容匹配该字符串时,执行流将暂停。

前言

触发播放后,程序会在断点处停止,此时arguments对象中存储的即为待追踪的加密参数。通过查看调用堆栈向上追溯,即可找到参数生成的源头逻辑。

DOM断点

DOM断点机制是通过为页面DOM节点绑定的事件添加断点来实现监控。

前言

利用页面选择器定位目标按钮,右键选择Break on下的相应选项(如Attributes修改或Subtree修改)即可下断。当节点或其属性发生变化时,程序会中断执行。但在当前案例中,该断点可能无法生效。

此断点适用于页面元素或属性发生动态变更的场景,在登录逆向中应用较为广泛。

EVENT断点

前言

首先使用选择器定位播放按钮,在EventListener面板中可查看该元素绑定的所有事件。

前言

展开click事件,可见具体的点击处理函数,但选项较多,筛选难度较大。

前言

也可在Source页面的Event Listener Breakpoints中,勾选需要监控的事件类型,从而直接在事件触发时中断程序执行。

hook

除了断点,还可通过Hook关键函数来获取信息。以下列举几种对逆向分析有显著帮助的Hook点。

json
cookie
window attr
eval/Function
websocket

以JSON处理为例,可Hook以下两个函数:

JSON.stringify
JSON.parse

通过Hook这两个方法并打印参数,可捕获所有与JSON相关的字符串,相当于在站点中植入日志系统。其他Hook点的应用原理类似。

关于cookie的hook

为快速定位Cookie生成算法,可对Cookie进行Hook。这是最常见的Hook策略之一。由于Cookie是document对象的属性,可通过修改document.cookie属性的描述符来实现监控。

(function () {
    'use strict';
    var cookie_cache = document.cookie;
    Object.defineProperty(document, 'cookie', {
        get: function () {
            return cookie_cache;
        },
        set: function (val) {
            console.log('Setting cookie', val);
            // 填写cookie名
            if (val.indexOf('填cookie名') != -1) {
                debugger;
            }
            var cookie = val.split(";")[0];
            var ncookie = cookie.split("=");
            var flag = false;
            var cache = cookie_cache.split("; ");
            cache = cache.map(function (a) {
                if (a.split("=")[0] === ncookie[0]) {
                    flag = true;
                    return cookie;
                }
                return a;
            })
            cookie_cache = cache.join("; ");
            if (!flag) {
                cookie_cache += cookie + "; ";
            }
            return cookie_cache;
        }
    });
})();

上述代码实现了对cookie属性的Hook。当读取cookie时打印其值;当设置cookie且满足特定条件(如包含指定Cookie名)时,触发debugger断点,从而中断在Cookie生成的位置,便于后续分析加密算法。

到此这篇关于JS逆向之加密参数定位的文章就介绍到这了,更多相关JS 加密参数定位内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章
相关文章
更多