JS逆向之加密参数定位

news2025/1/11 20:47:32

文章目录

    • 前言
    • 加密参数的处理步骤
    • 加密参数的定位方法
      • 搜索
      • 断点
        • 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生成的位置,从而就可以去分析加密算法了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tomcat-快速使用

关于Tomcat的概念及来由在Tomcat基本知识中进行了介绍,下面我们直接上手快速使用起来。 一、快速使用 (1)tomcat下载 (2)解压缩 (3)启动程序 (4)访问tomcat&#xff1a…

Windows和Linux中检查端口是否被占用

一、windows 1、查询端口占用情况 cmd > netstat -ano 2、查询8080端口是否被占用 cmd > netstat -ano|findstr 8080 3、查询哪个程序占用了端口 cmd > tasklist|findstr PID 4、终止该占用进程 cmd > ntsd -c q -p PID 二、Linux 1、查询8080端口是否被占用…

windows10 装docker和docker compose

一.windows环境准备 开启过程中的问题,进入bios修复 二.docker下载安装 1.下载 Docker Desktop: The #1 Containerization Tool for Developers | Docker 下载最新版有问题,下载老版本试试 Docker Desktop release notes | Docker Docs 2.安装 三.do…

GitHub pull request(傻瓜式入门版)

基础入门版 pull request一、fork项目二、clone代码到本地三、进入到克隆的项目目录下四、列出所有分支五、创建一个本地分支,并追踪远程项目分支六、查看当前分支七、与远程仓库建立连接八、与上游仓库建立连接八、同步最新代码九、修改代码并提交十、提交pr pull …

虚幻引擎:开创视觉与创意的新纪元

先看看据说虚幻5做出来的东西吧: 虚幻引擎5!!!4K画质PS5实机演示! 好了,用文字认识一下吧: 虚幻引擎5.3对UE5的核心工具集作了进一步优化,涉及渲染、世界构建、程序化内容生成&…

服务器执行rm命令时自动记录到审计日志中

目的 当在服务器上执行类似于 rm 命令时,自动记录该命令执行的时间,在哪里执行的,删除的什么文件,记录到审计日志中,能够查找到某些文件丢失原因 配置 # 需要root权限,sudo不行,这里假设执行…

麦芯(MachCore)开发教程1 --- 设备软件中间件

黄国强 2024/1/10 acloud163.com 对任何公司来说,在短时间内开发一款高质量设备专用软件,是一件不太容易做到的事情。麦芯是笔者发明的一款设备软件中间件产品。麦芯致力于给设备厂商提供一个开发工具和平台,让客户快速高效的开发自己的设备专…

PyQt5零基础入门(二)——QLabel控件

前言 QLabel控件可以视为是一个标签项,具有显示文本、图像的作用。在本篇文章中将介绍QLabel控件的常见用法。 例子 显示文本 import sys from PyQt5.QtWidgets import *if __name__ "__main__":app QApplication([])label QLabel(Hello world!)la…

了解结构体以及结构体数组

C语言的结构体你真的了解吗? 一起来看一下吧!!! 1.结构体是啥? 结构体是多种数据类型的组合体 2.格式(一般放在主函数前,也就是int main()前面 ) 关键字 结构体名字 {成员列表…

网络安全B模块(笔记详解)- Web信息收集

Web信息收集 1.通过Kali对服务器场景Linux进行Web扫描渗透测试(使用工具nikto,查看该命令的完整帮助文件),并将该操作使用命令中固定不变的字符串作为Flag提交; Flag:nikto -H 2.通过Kali对服务器场景Linux进行Web扫描渗透测试(使用工具nikto,扫描目标服务器8080端口,…

springCould中的Bus-从小白开始【11】

目录 🧂1.Bus是什么❤️❤️❤️ 🌭2.什么是总线❤️❤️❤️ 🥓3.rabbitmq❤️❤️❤️ 🥞4.新建模块3366❤️❤️❤️ 🍳5.设计思想 ❤️❤️❤️ 🍿6.添加消息总线的支持❤️❤️❤️ &#x1f9…

Redis不同环境缓存同一条数据,数据内部值不同

背景 现实中,本地环境(dev)和开发环境(feature)会共同使用相同的中间件(本篇拿Redis举例),对于不同环境中的,图片、视频、语音等资源类型的预览地址url,需要配…

Ncast盈可视 高清智能录播系统 IPSetup.php信息泄露+RCE漏洞复现(CVE-2024-0305)

0x01 产品简介 Ncast盈可视 高清智能录播系统是广州盈可视电子科技有限公司一种先进的音视频录制和播放解决方案,旨在提供高质量、高清定制的录播体验。该系统采用先进的摄像和音频技术,结合强大的软件平台,可以实现高清视频录制、多路音频采集、实时切换和混音、定制视频分…

thinkphp学习07-数据库的数据查询

单数据查询 单条数据查询,一般是一维数组 Db::table()中 table 必须指定完整数据表(包括前缀),如果配置了表前缀,Db::name()中可以忽略 如果希望只查询一条数据,可以使用 find()方法,需指定 wh…

赋能智慧农业生产,基于YOLOv7开发构建农业生产场景下油茶作物成熟检测识别系统

AI赋能生产生活场景,是加速人工智能技术落地的有利途径,在前文很多具体的业务场景中我们也从实验的角度来尝试性地分析实践了基于AI模型来助力生产生活制造相关的各个领域,诸如:基于AI硬件实现农业作物除草就是一个比较熟知的场景…

IDEA中在Java项目中添加Web模块 与配置tomcat服务器

现有项目添加直接走第二步 生成普通新项目 给项目添加框架支持 勾选 Web Application 选项, 点击OK 得到项目目录结构 , 出现web目录结构, 且web目录文件夹出现小蓝点 web或webapp 没有出现小蓝点 说明web配置没有出现或是手动构建的目录结构 , 在IDE关闭或者迁移项目时会出…

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

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

Hive基础知识(八):Hive对数据库的增删改查操作

1. 创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment]#注释 [LOCATION hdfs_path]#指定当前库的hdfs目录 [WITH DBPROPERTIES (property_nameproperty_value,...)]; #备注创建作者和创建时间 1)创建一个数据库,数据…

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】 1.MySQL和MybatisPlus简介2.maven依赖3.配置1.在application.yaml配置中加入mysql配置2.新增Mybatis-Plus配置类 4.参考文章 1.MySQL和MybatisPlus简介 MySQL是一种开源的关系型数据库管理系统,被广泛应用…

Java 对象的内存布局

目录 一. 前言 二. Java 对象的内存布局 三. Java 对象结构 3.1. 对象头 3.1.1. Mark Word 3.1.2. 类型指针(Class Metadata Pointer) 3.1.3. 数组长度(Length) 3.2. 实例数据 3.3. 对齐填充(Padding&#xf…