JS逆向之加密参数定位

文章目录

    • 前言
    • 加密参数的处理步骤
    • 加密参数的定位方法
      • 搜索
      • 断点
        • XHR断点
        • DOM断点
        • EVENT断点
      • hook

前言

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

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

加密参数的处理步骤

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

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

加密参数的定位方法

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

搜索

在这里插入图片描述

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

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

断点

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/309539.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

水经微图安卓版APP正式上线!

在水经微图APP(简称“微图APP”)安卓版已正式上线! 在随着IOS版上线约一周之后,安卓版终于紧随其后发布了。 微图安卓版APP下载安装 自从IOS版发布之后,就有用户一直在问安卓版什么时候发布,这里非常感谢…

【申请SSL证书】免费申请阿里云SSL证书

注意:申请 SSL证书的前提是有一个域名且备案了 第一部:申请免费证书 免费 CA 证书购买地址(请戳这里) 选择合适的选项如下图 为了解决免费证书近期存在的吊销、统计等问题,自2021年起,免费证书申请申请将…

创建并美化Github主页(内含组件)

目录 1、创建仓库 2、美化 1、包含多种 2、活动统计图 3、资料奖杯 4、文字的打字特效 5、中文网站卡片 6、贪吃蛇贡献图 7、可参考的页面 最近有想要写开源的打算了,计划了好久好久好久,不知道写啥(目前仍然不知道)…… 俗话说人活一张脸&#xff0…

什么是编程思路?如何训练提升自己的编程思路?

哈喽,大家上午好呀!又和大家如期见面了! 今天给大家分享改变编程思路的9条技巧。 1.拆分项目,再编程 先按大类写子程序,例如自动,手动,报警,然后子程序中写FB块,FC程序&…

【算法每日一练]-练习篇 #Tile Pattern #Swapping Puzzle # socks

目录 今日知识点: 二维前缀和 逆序对 袜子配对(感觉挺难的,又不知道说啥) Tile Pattern Swapping Puzzle socks Tile Pattern 331 题意:有一个10^9*10^9的方格。W表示白色方格,B表示黑色方格。每个(i,j)方的颜色由(i…

Python-12-正则

当然内容不是很全,可以参考: 正则表达式学习资料 https://blog.csdn.net/weixin_40907382/article/details/79654372

RAG:让大语言模型拥有特定的专属知识

作为一个在Chatbot领域摸爬滚打了7年的从业者,笔者可以诚实地说,在大语言模型的推动下,检索增强生成(Retrieval Augmented Generation,RAG)技术正在快速崛起。 RAG的搜索请求和生成式AI技术,为搜…

[足式机器人]Part3 机构运动学与动力学分析与建模 Ch00-3(2) 刚体的位形 Configuration of Rigid Body

本文仅供学习使用,总结很多本现有讲述运动学或动力学书籍后的总结,从矢量的角度进行分析,方法比较传统,但更易理解,并且现有的看似抽象方法,两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有…

QT上位机开发(属性页面的设计)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 窗口设计的时候,如果很多内容一个page放不下,那么这个时候我们一般都会选择使用tab来进行处理。安装了tab之后,…

IPv6路由协议---IPv6动态路由(OSPFv3-5)

OSPFv3各链路状态通告类型 4.Inter-Area-Router-LSA区域间路由器(4类LSA) 边界路由器(ABR)产生的第4类LSA,在Area 范围内泛洪,描述了到本AS内其他区域的ASBR路由器信息; 每各Inter-Area-Router-LSA包含一个ASBR路由器信息,LSA中的能力选项(Options)与所描述的ASBR …

Aloha 机械臂的学习记录3——AWE:Pycharm运行代码记录

之前的博客创作了三偏关于Aloha_AWE的liunx终端指令运行代码的示例: Aloha 机械臂的学习记录——AWE:Bimanual Simulation Suite: https://blog.csdn.net/qq_54900679/article/details/134889183?spm1001.2014.3001.5502 Aloha 机械臂的学习记录1——AWE&#x…

少儿编程 2023年12月中国电子学会图形化编程等级考试Scratch编程三级真题解析(判断题)

2023年12月scratch编程等级考试三级真题 判断题 19、下列两段程序的运行效果相同 答案:对 考点分析:考查积木综合使用,重点考查循环积木的使用;左边属于有条件的循环,由变量的值控制,当变量值大于50时,循环停止,而变量始终为零,不满足条件,所以一直循环,和右边的…

python 文本内容随机生成器

这段代码是一个用于生成指定长度的随机文本的函数。主要包括两个函数:generate_text()和generate_other_content()。 generate_text(original_text, length)函数接受两个参数:原始文本和生成文本的长度。该函数的作用是根据原始文本生成指定长度的文本。…

expected initializer before ‘XXXX’,但是明明有分号,而且在vs里面也能运行,但是在linux上就会报错

错误一:忘记加分号了; 解决:加分号;具体很简单,自己看看,多瞅瞅https://zhuanlan.zhihu.com/p/102627362 如果修改之后,成功的话那就太恭喜你了,下面的就别看了 错误二&#xff1…

064:vue中一维数组的全选、全不选、反选(图文示例)

第061个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

用可视化案例讲Rust编程2. 编码的核心组成:函数

从第一天学习编程,可能大家就听说这样的组成公式: 程序算法数据结构 ——该公式出自著名计算机科学家沃思(Nikiklaus Wirth) 实际上,程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进行程序设计,并且用…

Redis性能大挑战:深入剖析缓存抖动现象及有效应对的战术指南

在实际应用中,你是否遇到过这样的情况,本来Redis运行的好好的,响应也挺正常,但突然就变慢了,响应时间增加了,这不仅会影响用户体验,还会牵连其他系统。 那如何排查Redis变慢的情况呢&#xff1f…

nginx配置 请求静态文件时带上额外的响应头信息

注意:这种方式添加的额外信息会出现在响应头中。 例如在location{}中,try_files之前添加如下信息: add_header X-Extra-Header "Value"; add_header X-Forwarded-For $proxy_add_x_forwarded_for; …

Gitlab-ci:从零开始的前端自动化部署

一.概念介绍 1.1 gitlab-ci && 自动化部署工具的运行机制 以gitlab-ci为例: (1) 通过在项目根目录下配置.gitlab-ci.yml文件,可以控制ci流程的不同阶段,例如install/检查/编译/部署服务器。gitlab平台会扫描.gitlab-ci.yml文件&…

【Python】Sigmoid和Hard Sigmoid激活函数对比总结及示例

Sigmoid和Hard Sigmoid是两种常用的激活函数,它们在神经网络中起到非线性变换的作用。以下是它们之间的对比和优缺点总结: Sigmoid激活函数: 优点: 输出范围是0到1之间,可以用于二分类问题。函数形状相对平滑&#…