websocket逆向案例

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、案例地址
  • 二、分析流程
  • 三、逆向参数
  • 四、webSocket 交互位置
  • 总结


前言

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!

一、案例地址

aHR0cHM6Ly9kYi5zeGF1LmVkdS5jbi90emdnLmh0bQ==

二、分析流程

  1. 查找标题,打开f12控制台,但是进入了debugger,追栈发现是通过构造函数执行debugger,但是去除debugger后查找不到标题。
    在这里插入图片描述

    0?1:function(){return !0}["constructor"]("debugger")["call"]["action"]
    
    // 	hook构造函数去掉debugger
    (function () {let constructorCache = Function.prototype.constructor;Function.prototype.constructor = function (string) {if (string === "debugger") {// console.log("Hook constructor debugger!");return function () {};}return constructorCache(string);};
    })();
    
  2. 查看浏览器发送的请求,有一个响应内容加密的session链接,但是不太像,通过翻页发现有一个 wss链接,保持会话进行传输数据,但是传输数据的内容是二进制,翻页的话,这里也会有变化,所以定位这里应该就是加密的位置在这里插入图片描述

  3. 分析wss请求,有三个参数会一直发生变化
    在这里插入图片描述

  4. 这三个参数来自 session 请求中的 set-cookie,所以需要先解决 session 请求,session请求中需要扣 1. headers 参数中的 etag 2. 请求参数中的 data
    在这里插入图片描述

三、逆向参数

  1. 追栈,在 e.sessionData 那点进去,打上断点,然后调试就到了data生成的位置在这里插入图片描述
    在这里插入图片描述

  2. 可以发现是调用了 E 函数, 观察 E 函数,它是包含了许多key, value,; key是函数名, value是函数体,s.default里进行的定义;

  3. 追栈发现调用 E 的上一栈来自 n(755) , 通过加载器的方式抠出来,发现会卡住,不知道什么原因,所以E 拿出来单独扣

  4. E是一个大的加密函数, 抠出来后 补充下 s.default , 缺啥补啥, 补完后调用发现执行是空,页面上完成这一步去调用也是空,所以应该是还需要经历一些步骤
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  5. 全部抠出来后进行调试(生成data那里的一堆加密函数返回的值就是 getKey),发现报错了在这里插入图片描述

  6. 因为 p() 函数里的数组进行了移位,所以把移位的函数找到即可,并且这个操作要放在 E 函数执行的上方在这里插入图片描述在这里插入图片描述

  7. 然后又补充了几个变量的值
    在这里插入图片描述

  8. 报错 u 找不到, 找到位置,发现是个加载器进来的函数,这个通过扣webpack的方式扣就可以 在这里插入图片描述

  9. 从加载器开始的那个函数那打断点,因为好多东西是一开始加载进去的在这里插入图片描述

  10. 然后进到加载器后,在hook加载器, 然后再 u 结束的位置打上断点
    在这里插入图片描述

  11. 拿出来后 替换下 ’ == ’ , \ = \ , 放在加载器中就可以调用了var i = n(548); var u = i(n(235));

  12. 再根据报错补充几个变量值就可以成功调用了

    E['getKey']()
    window.etag = E['genrandomString']()
    

  1. etag参数扣取, etag就是上面的 genrandomString 生成的, 就是 E 函数中的 iv值
  2. tabId 生成,加密的参数中还有个 tabId, 这个直接搜索就可以搜索到, 是每次随机生成的, 并且这个 tabId 也是 wss链接中的参数,也是 wss 向服务器发送信息中的参数

四、webSocket 交互位置

  1. wss链接组成参数 在这里插入图片描述
  2. 服务器客户端信息交互的位置,可以参考这个 https://juejin.cn/post/7038882823780417544 在这里插入图片描述
  3. 翻页查看断点日志信息 在这里插入图片描述

总结

还不完整,websocket交互这里还有点问题,下次补全

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

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

相关文章

OPPO后端二面,凉了!

这篇文章的问题来源于一个读者之前分享的 OPPO 后端凉经,我对比较典型的一些问题进行了分类并给出了详细的参考答案。希望能对正在参加面试的朋友们能够有点帮助! Java String 为什么是不可变的? public final class String implements java.io.Seri…

Python: for,while循环语句

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) While循环 while循环用于在给定条件为真时重复执行一段代码。它会一直执行循环体内的代码,直到条件不再为真。这种循环特别适合于你…

‘UnityEngine.Application‘ does not contain a definition for isBatchMode

unity 2017.4.37f1. 解决办法: Try to replace Application.isBatchMode with UnityEditorInternal.InternalEditorUtility.inBatchMode

AUTOSAR汽车电子嵌入式编程精讲300篇-汽车CAN总线中的 信息安全与通信协议(续)

目录 4 基于AES算法的CAN总线加密通信 4.1 CAN总线加密通信流程设计 4.2 AES算法 4.2.1 算法实现

前端实现读取word文件,并将其进行原样式展示的几种方案

在前端直接读取并原样展示Word文档是一个相对复杂的任务,因为Word文档的格式(如.doc或.docx)与Web技术栈使用的格式(HTML、CSS)不兼容。要实现这一功能,通常需要将Word文档转换为Web友好的格式。以下是实现…

Ps:拾色器

在 Adobe 拾色器中,可以使用四种颜色模型来设置颜色:HSB、RGB、Lab 和 CMYK。 使用“拾色器”对话框可以设置前景色、背景色、填充颜色、文本颜色及专色等的颜色值。 ◆ ◆ ◆ 常用操作方法与技巧 1、注意观察“拾色器”对话框标题栏中括号里的内容&am…

交换排序实现

文章目录 冒泡排序快速排序快排的优化单次快排的其他方案快排的非递归实现 冒泡排序 冒泡排序,Bubble sort,通过重复遍历要排序的数列,比较每一对相邻元素,并在顺序错误时交换它们。这个过程一直重复,直到没有需要交换的相邻元素为…

动态规划 Leetcode 1049 最后一块石头的重量

最后一块石头的重量 Leetcode 1049 学习记录自代码随想录 要点:1.想到求最后剩下石头的重量可以转化为求石头组合重量最接近石头重量总和的一半和此时剩下石头重量的差值,从而联想到Leetcode 416此题便可以相同套路求解 class Solution { public:int…

Kafka MQ 生产者

Kafka MQ 生产者 生产者概览 尽管生产者 API 使用起来很简单,但消息的发送过程还是有点复杂的。图 3-1 展示了向 Kafka 发送消息的主要步骤。 我们从创建一个 ProducerRecord 对象开始,ProducerRecord 对象需要包含目标主题和要发送的内容。我们还可以…

windows ffmpeg 编译环境搭建

编译ffmpeg https://www.msys2.org/ https://www.ffmpeg.org/platform.html#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows 1.安装msys2 2.安装yasm或者nasm 打开VC 本地环境命令行 唤醒msys2界面 配置编译环境变量参数 export PATH"/d/vs…

Dynamo处理Excel——调用Microsoft.Office.Interop.Excel教程

你好,这里是BIM的乐趣,我是九哥~ 今天我们来聊聊如何通过Dynamo处理Excel数据以及格式,Dynamo自带的节点肯定是不行,所以我们需要来用Python解决(当然有个节点包 Bumblebee,我在案例百解教程里有过介绍&a…

c++虚函数表学习

1 基础和示例1 每个包含了虚函数的类都包含一个虚表,类中只要有虚函数,就会有一个虚表来维护。 虚表是属于类的,而不是属于某个具体的对象;同一个类的所有对象都使用同一个虚表。 虚表是一个指针数组,其元素是虚函数的指针,每个元素对应一个虚函数的函数指针; 普通的函…

如何实现sam(Segment Anything Model)|fastsam模型

sam是2023年提出的一个在图像分割领域的大模型,其具备了对任意现实数据的分割能力,其论文的介绍可以参考 https://hpg123.blog.csdn.net/article/details/131137939,sam的亮点在于提出一种工作模式,同时将多形式的prompt集成到了语…

Spring核心接口:ObjectProvider接口

ObjectProvider 是 Spring Framework 5.0 中引入的一个接口,用于提供对 bean 的延迟访问。它可以用于在需要延迟获取 bean 或在需要对 bean 进行多次访问时,减少 bean 的创建次数和提高应用程序性能。ObjectProvider 接口有两个主要方法:getO…

短剧在线搜索源码(全网首发)

一个非常哇塞的在线短剧搜索页面,接口已经对接好了,上传源码到服务器解压就能直接用,有能力的可以自己改接口自己写自己的接口 接口文档地址:doc.djcat.sbs 源码下载地址:https://pan.xunlei.com/s/VNstN8C6N3VK1a1k…

使用Docker在windows上安装IBM MQ

第一步、安装wsl 详见我另一篇安装wsl文章。 第二步、安装centos 这里推荐两种方式,一种是从微软商城安装,一种是使用提前准备好的镜像安装,详见我另一篇windos下安装centos教程。 第三步、安装windows下的Docker desktop 详见我另一篇wind…

【牛客】HJ62 查找输入整数二进制中1的个数

题目链接:查找输入整数二进制中1的个数_牛客题霸_牛客网 (nowcoder.com) 解题思路: 解法一: 可以举一个八位的二进制例子来进行分析,对于二进制操作,我们直到,除以一个2,原来的数字会减少一个0.如果除的过程…

分布式ID(8):分布式ID生成方法

在分布式系统中,生成唯一的ID是一个核心问题,特别是在需要确保数据完整性和避免冲突的场景中。以下是对五种分布式唯一ID生成方法的详细阐述,包括它们的工作原理、优缺点,以及对网络依赖性的考量: 1 UUID(通用唯一标识符) 实现原理 工作方式:UUID是通过一系列算法生成…

day15:无重叠区间

问题描述: 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后,剩下的…

Window API 使用的一些注意事项

文章目录 1、LPCWSTR类型2、LPCTSTR类型3、LPCSTR类型4、LPCTSTR和LPCWSTR区别5、LPCTSTR和LPCSTR、LPCWSTR三者区别6、_T(" ")7、DWORD类型转换为std::wstring类型8、char类型转换为LPCSTR类型9、获取当前时间戳(毫秒)10、std::wstring和LPCSTR区别11、std::wstring…