JS逆向之加密参数定位

前言

当我们对网络请求进行抓包分析之后,需要用开发者工具对加密参数进行全局搜索。当搜索不到加密参数的时候,应该采取什么解决方法去定位。

还有一个应用场景是我们发现请求服务端的时候有一个cookie,而这个cookie又不是服务端返回的,那么它很有可能就是JS生成的,怎么快速定位这个cookie生成的地方。

加密参数的处理步骤

在JS逆向的过程中,当遇到有加密参数的时候,不是上来就找函数入口进行分析,这样的话会走很多弯路。简单描述一下这个过程的一般流程,下面的步骤很重要,可以帮你少走很多弯路。

  1. 重放攻击
  2. 删参数进行重放攻击。当你遇到一个加密参数,可以尝试删除这个参数的情况下进行重放攻击,如果成功的话,说明该参数并不是必须的,可以省去分析的过程。
  3. 如果重放攻击无效,再查看参数是不是某个接口的返回值
  4. 如果不是接口返回值,直接在页面源码里面搜索,看这个参数是否是页面的固定值(关于这一点,我之前就走过一次弯路,参数直 接固定在页面里面了,结果我用各种方法愣是没找着)
  5. 如果需要定位cookie,优先看包的返回内容是否有set-cookie

加密参数的定位方法

如果前面的五个步骤都进行了尝试,还找不到参数来源的话,就需要通过逆向分析的方法去找到参数的来源。一般来说有下面几种方案。

搜索

在这里插入图片描述

开发者工具里面一共有两个搜索,这两个搜索的作用域不一样,一个只能搜索到当前的页面元素,第二个是全局的搜索,可以搜索到所有的内容。

使用这种方案定位加密参数的位置会比较准确,但是搜索到的位置会比较多,需要进行筛选。

如果搜索数来的加密参数比较多,可以用下面的搜索方式,可以一定程度过滤掉一些无效内容:

参数名=
参数名 =
参数名:
参数名 :

Initiator

在这里插入图片描述

在当前的XHR请求的Initiator面板中可以查看到该请求的调用栈,通过对这个调用栈进行筛选分析,找到最有可能的一项

在这里插入图片描述

然后跳转并下断,可以看到这里已经有我们想要追踪的params参数了。通过这种方式可以对XHR请求的调用栈进行分析,从而找到加密参数的位置

断点

XHR断点

以网易云音乐为例,

在这里插入图片描述

当我点击播放按钮的时候,可以看到这么一条请求,携带的返回数据里面有音乐的url下载链接。如果我们能够模拟这个请求,那么就可以做到下载网易云音乐的目的。

在这里插入图片描述

这个请求里面需要携带两个参数,params和encSecKey

在这里插入图片描述

那么我们就可以在source面板的XHR断点里面添加一个包含params的断点,当请求的内容里面包含这个字符串的时候就会断下来。

在这里插入图片描述

这个时候我们点击播放,可以看到程序已经断下来了,并且arguments的值就是我们想要追踪的加密参数,那么这个时候就可以通过调用堆栈向上去找到加密参数的生成位置了。

DOM断点

所谓的DOM断点,其实就是通过给页面的DOM节点附带的事件添加断点。

在这里插入图片描述

我们可以通过页面的选择器定位到这个按钮,然后右键break on下断,当这个节点或者属性发生改变的时候,程序会断下,但是在这个案例里面这个DOM断点并不会生效。

这个断点的应用场景是页面的元素或者属性发生改变的时候,在登陆的场景里面用的比较多。

EVENT断点

在这里插入图片描述

首先用选择器选择播放按钮,然后在EventListener里面有这个元素的所有的事件

在这里插入图片描述

点开click事件,里面有这个元素的点击事件,不过选项还是比较多,不太容易筛选。

在这里插入图片描述

然后也可以在source页面的Event Listener Breakpoints里面,把需要下断的事件打勾,就可以直接断下来。

hook

我们也可以通过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生成的位置,从而就可以去分析加密算法了。

AST HOOK内存漫游

https://github.com/JSREI/ast-hook-for-js-RE

对于这加密参数的跟踪来说,还是对新手不太友好,接下来介绍一个在JS逆向里面比较好用的库。这个库通过AST HOOK的方式,拦截了所有的网络请求并且缓存到了本地。通过使用这个库,可以直接搜索需要跟着的值

关于这个库的安装,GIthub已经说的很清楚了,具体的步骤如下:

  1. 安装依赖npm install anyproxy
  2. 启动服务 anyproxy ca
  3. 进入127.0.0.1:8002生成并且安装证书
  4. 进入项目的src源码里面,开启代理服务node proxy-server.js
  5. 在浏览器内设置代理端口为10086
  6. 然后开始抓包

以极验为例

在这里插入图片描述

如果我们想要追踪w的值是从哪生成的

在这里插入图片描述

只需要在控制台执行hook.search()方法,传入Value,然后就会在控制台页面列出当前出现了这个值的位置了,简单粗暴。

  • 19
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
嗨!对于爬虫中的 JavaScript 逆向案例,我可以给你提供一个简单的示例。请注意,这个示例只是为了帮助你理解逆向过程,真实的应用中可能涉及法律和伦理问题,请合法使用爬虫技术。 假设我们要爬取一个网站上的某个页面数据,但是该页面通过 JavaScript 动态生成。我们可以通过分析网页的 JavaScript 代码来逆向工程,获取所需数据。 首先,打开 Chrome 浏览器并进入开发者工具(按 F12 键或右键点击页面并选择“检查”)。然后切换到“网络”选项卡。 接下来,在浏览器地址栏中输入目标网页的 URL 并按下回车,浏览器将开始加载页面。在网络选项卡中,你将看到所有请求和响应的列表。 查找其中一个请求,该请求可能包含我们所需的数据。点击该请求并查看其请求头、响应头和响应体。 在响应体中,你可能会看到一些 JavaScript 代码,这些代码负责生成页面上的内容。你可以仔细阅读该代码,并找到生成目标数据的部分。 如果你发现目标数据是通过 Ajax 请求获取的,你可以查看该 Ajax 请求的 URL 和参数,然后使用 Python 的 requests 库或其他适当的方法模拟该请求,并解析响应获取数据。 如果你发现目标数据是在 JavaScript 代码中直接生成的,你可以尝试分析代码逻辑并编写相应的 Python 代码来模拟该过程。这可能涉及到使用 JavaScript 解释器或库来执行 JavaScript 代码。 需要注意的是,JavaScript 逆向工程是一项复杂的任务,需要对 JavaScript 和网络协议有一定的理解。同时,网站所有者可能会采取一些反爬虫措施来阻止你的行为,所以请务必遵守法律法规和网站的使用规则。 希望这个示例能够帮助你入门 JavaScript 逆向工程。如果你有任何其他问题,欢迎继续提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鬼手56

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值