当前位置: 首页 > news >正文

websocket逆向-protobuf序列化与反序列化

系列文章目录

训练地址:https://www.qiulianmao.com


  • 基础-websocket逆向
  • 基础-http拦截
  • 基础-websocket拦截
  • 基础-base64编码与解码
  • 基础-protobuf序列化与反序列化
  • 视频号直播弹幕采集
  • 实战一:Http轮询
  • 更新中

websocket逆向-protobuf序列化与反序列化基础

  • 系列文章目录
  • 一、基础知识
    • 1. 序列化与反序列化
    • 2. 常见的数据格式
    • 3. 什么是protobuf
  • 二、如何判断网站使用了protobuf
      • 1. 通过响应进行分析
      • 2. 通过请求头进行分析
      • 3. 分析js
  • 三、protobuf的序列化与反序列化
    • 1. 环境配置【python】
    • 2.定义proto结构
    • 3. 编译 .proto 文件
    • 4. 序列化
    • 5. 反序列化
  • 四、总结


一、基础知识

1. 序列化与反序列化

  • 序列化:就是将明文转化成字节序列的过程、方便传输。
  • 反序列化:就是将字节序列转化成明文的过程、方便使用。
  • 服务器【明文序列化为二进制】-------传输------> 客户端【二进制反序列化为明文】

2. 常见的数据格式

  • 文本化协议:json,xml。可视化效果好,便于维护。
  • 开源协议:protobufer,json。有现成的序列化与反序列化库,都是经过长期检验的。
  • 自定义的二进制数据:自行定义序列化与反序列化规则,自由度高,应用范围不广。

3. 什么是protobuf

  • protobuf是二进制数据序列化协议。
  • 优点:比json、xml等体积小、传输快。
  • 特点:序列化与反序列化需要借助proto文件。像结构体、有顺序、有string、int32、bool、bytes等数据类型。

二、如何判断网站使用了protobuf

1. 通过响应进行分析

请求响应是二进制的,抓包工具显示为乱码。

2. 通过请求头进行分析

在请求标头或者url地址参数中出现protobuf关键字

3. 分析js

js中出现1,2,3这样的顺序,出现string,int64,bytes…数据类型
分析js是非常重要的,在逆向过程中,需要借助js进行反推proto文件,才能对消息进行序列化与发序列化。

三、protobuf的序列化与反序列化

1. 环境配置【python】

  • 下载protoc.exe:https://github.com/protocolbuffers/protobuf/releases
  • 安装相关库【注意版本对应】
pip install protobuf
pip install google
# 如果提示没有安装google库
pip install google-cloud
pip install google-cloud-vision

2.定义proto结构

  • 文件名称:message.proto
syntax = "proto3";// 定义一个 Person 消息类型
message Person {string name = 1;int32 age = 2;Gender gender = 3;             // 枚举类型字段map<string, string> email = 4; // Map 类型字段,将字符串键映射到字符串值repeated Cars cars = 5;        // 重复字段,表示一个 Cars 类型的数组bool is_student=6//布尔类型bytes hi = 7}// 定义一个 Gender 枚举类型
enum Gender {UNKNOWN = 0;MALE = 1;FEMALE = 2;OTHER = 3;
}// 定义一个 Cars 嵌套消息类型
message Cars{string make = 1; // 假设 Cars 类型有一个名为 make 的字符串字段int32 year = 2;  // 假设 Cars 类型有一个名为 year 的 32 位整数字段
}

3. 编译 .proto 文件

有的电脑是不需要前面的.\
进入proto所在cmd路径后,执行

.\protoc --python_out=. person.proto

4. 序列化

# 秋恋猫
import person_pb2def serialize_person():# 创建一个 Person 对象person = person_pb2.Person()person.name = "秋恋猫"person.age = 30person.gender = person_pb2.Gender.FEMALE  # 使用枚举值# 添加 email 信息到 Map 字段person.email["plat"] = "qq"person.email["number"] = "qiulianmao@qq.com"# 添加车辆信息到重复字段car1 = person.cars.add()car1.make = "奥迪"car1.year = 2020car2 = person.cars.add()car2.make = "奔驰"car2.year = 2018# 布尔类型person.is_student = True# 字节型persion.hi = b'hi'# 将 Person 对象序列化为字节流serialized_data = person.SerializeToString()return serialized_dataserialized_data = serialize_person()

5. 反序列化

# 秋恋猫
import person_pb2
from google.protobuf.json_format import MessageToDict
def deserialize_person(serialized_data):# 创建一个空的 Person 对象person = person_pb2.Person()# 将字节流反序列化为 Person 对象person.ParseFromString(serialized_data)# Person 对象 转为字典obj1 = MessageToDict(person, preserving_proto_field_name=True)
deserialize_person(serialized_data)

四、总结

本文主要介绍了protobuf序列化与反序列化的知识点,主要讲解了序列化与反序列、常见的数据传输格式以及protobuf的实际使用。

相关文章:

websocket逆向-protobuf序列化与反序列化

系列文章目录 训练地址&#xff1a;https://www.qiulianmao.com 基础-websocket逆向基础-http拦截基础-websocket拦截基础-base64编码与解码基础-protobuf序列化与反序列化视频号直播弹幕采集实战一&#xff1a;Http轮询更新中 websocket逆向-protobuf序列化与反序列化基础 系…...

车载电子电器架构 —— 国产基础软件生态简介

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...

CNN-generated images are surprisingly easy to spot... for now

CNN-generated images are surprisingly easy to spot… for now----《目前CNN生成的图像非常容易被发现》 背景&#xff1a; 研究者们发现&#xff0c;仅仅对一种由CNN模型生成的图像进行训练的分类器&#xff0c;也可以检测许多其他模型生成的结果。由此提出这样的观点&#…...

蓝桥杯(七段码,C++)

思路&#xff1a; 1、把灯管的连接转为图结构&#xff0c;相邻的灯管即认为有边。 2、用深度搜索&#xff0c;去计算有多少种不同字符。 3、因为有每种字符都会重复算两遍&#xff0c;最后的结果需要数以2。 #include <iostream> using namespace std;int graph[7][7…...

Master PDF Editor v5.9.70便携版

软件介绍 Master PDF Editor中文版是一款小巧的多功能PDF编辑器,可以轻松查看,创建,修改,批注,签名,扫描,OCR和打印PDF文档.高级注释工具,可以添加任意便笺指示对象突出显示,添加下划线和删除,而无需更改源PDF文件. 软件截图 更新日志 code-industry.net/what-is-new-in-mas…...

【剑指Offer】20.表示数值的字符串

题目 请实现一个函数用来判断字符串str是否表示数值&#xff08;包括科学计数法的数字&#xff0c;小数和整数&#xff09;。 科学计数法的数字(按顺序&#xff09;可以分成以下几个部分: 1.若干空格 2.一个整数或者小数 3.&#xff08;可选&#xff09;一个 e 或 E &…...

2023年9月Web3行业月度发展报告区块链篇 | 陀螺科技会员专享

9月是加密市场的活动月&#xff0c;斯坦福区块链周、Token2049等大型活动相继举办&#xff0c;后者更是创下超过1万人的历史最高纪录&#xff0c;成为了全球最大的Web3活动。在本次Token2049上&#xff0c;RWA、支付以及出入金成为了讨论度最多的活动。尽管活动如火如荼&#x…...

Unity 快捷键的一些记录

1.Unity Prefab Apply All 设置快捷键&#xff0c;修改预设体之后快捷键应用 打包会出问题&#xff1a;The type or namespace name ‘EditorWindow‘ could not be found EditorWindow类无法打包出EXE 添加unity关键字定义如下文所示&#xff1a; #if UNITY_EDITOR using Uni…...

GIT指令 - git stash

命令解释 保存当前工作进度&#xff0c;将工作区和暂存区恢复到修改之前。 使用场景 当在A分支上进行开发&#xff0c;有点事情需要切到B分支上进行开发&#xff0c;但是A分支的代码开发一半&#xff0c;又不想提交&#xff0c;直接切换又会报错&#xff0c;可以使用该指令。…...

LiveMedia视频中间件视频隐私打码直播解决方案

一、方案背景 随着科技的发展&#xff0c;视频监控系统已经成为了我们生活中不可或缺的一部分。无论是在公共区域&#xff0c;还是在私人场所&#xff0c;我们都可以看到各种各样的监控设备。这些设备的出现&#xff0c;无疑提高了我们的生活安全&#xff0c;使得我们可以更好地…...

关于神经网络的思考

关于感知机 感知机&#xff08;Perceptron&#xff09;和神经网络&#xff08;Neural Network&#xff09;之间有一定的关系&#xff0c;可以说感知机是神经网络的一个基本组成单元。 感知机&#xff1a; 感知机是一种简单的二分类线性分类器。它接受多个输入&#xff0c;对每…...

CodeForces每日好题10.14

给你一个字符串 让你删除一些字符让它变成一个相邻的字母不相同的字符串&#xff0c;问你最小的删除次数 以及你可以完成的所有方/案数 求方案数往DP 或者 组合数学推公式上面去想&#xff0c;发现一个有意思的事情 例如1001011110 这个字符串你划分成1 00 1 0 1111 0 每…...

Python Django 之连接 Mysql 数据库详解

文章目录 1 概述1.1 Mysql 下载和安装1.2 菜单目录 2 ORM 框架2.1 连接 Mysql 模块&#xff1a;mysqlclient2.2 创建数据库2.3 连接 Mysql2.4 创建表2.5 增删改查 3 扩展3.1 ERROR&#xff1a;2026, SSL connection error: unknown error number 1 概述 1.1 Mysql 下载和安装 …...

Java设计模式:Callback

介绍 回调&#xff08;Callback&#xff09;是一种设计模式&#xff0c;在这种模式中&#xff0c;一个可执行的代码被作为参数传递给其他代码&#xff0c;接收方的代码可以在适当的时候调用它。 在真实世界的例子中&#xff0c;当我们需要在任务完成时被通知时&#xff0c;我…...

年底旺季,Shopee、Lazada如何通过测评补单技术打造产品权重收割流量

当前Shopee和Lazada平台的主要推广方式仍然以广告为主&#xff0c;毕竟这是平台的主要收入来源之一。然而&#xff0c;由于近年来大量卖家涌入东南亚市场&#xff0c;导致卖家之间的竞争日趋激烈。高额的广告投入并不能带来预期的效果&#xff0c;因此越来越多的卖家开始自学测…...

CentOS 7 安装 MySQL8.0

由于centOS7中默认安装了 MariaDB , 需要先进行卸载 # 查看版本 rpm -qa | grep mariadb # 卸载 rpm -e --nodeps 文件名 # 查看是否卸载干净 rpm -qa | grep mariadb安装wget&#xff1a; yum -y install wget进入/usr/local/下&#xff1a; cd /usr/local/新建mysqlrpm文…...

C# 往多线程传递安全参数的方法

在C#构造一个线程时&#xff0c;要向其传递一个函数&#xff0c;这个函数可以试简单的无参函数&#xff0c;也可以是参数为Object类型的函数&#xff0c;但是由于参数类型为Object&#xff0c;因此编译器无法实行类型检查&#xff0c;看下面的例子&#xff1a; class Program{…...

Java之SPI

Java的SPI&#xff08;Service Provider Interface&#xff09;是一种面向接口编程的机制&#xff0c;用于实现组件之间的解耦和扩展。通过SPI机制&#xff0c;我们可以定义接口&#xff0c;并允许第三方提供不同的实现&#xff0c;从而实现可插拔、可扩展的架构。 SPI讲解 它…...

【数据结构】算法的空间复杂度

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 算法空间复杂度的定义 算法的时间复杂度和空间复杂度是度量算法好坏的两个重要量度,在实际写代码的过程中,我们完全可以用空间来换时间,比如说,我们要判断某某年是不是闰年,大…...

恢复Windows 11经典右键菜单:一条命令解决显示更多选项问题

恢复Windows 11经典右键菜单&#xff1a;一条命令解决显示更多选项问题 恢复Windows 11经典右键菜单&#xff1a;一条命令解决显示更多选项问题为什么改变&#xff1f;恢复经典右键菜单 我是将军我一直都在&#xff0c;。&#xff01; 恢复Windows 11经典右键菜单&#xff1a;一…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式

pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图&#xff0c;如果边框加在dom上面&#xff0c;pdf-lib导出svg的时候并不会导出边框&#xff0c;所以只能在echarts图上面加边框 grid的边框是在图里…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用

阻止除自定义标签之外的所有标签 先输入一些标签测试&#xff0c;说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时&#xff08;如通过点击或键盘导航&…...

Yii2项目自动向GitLab上报Bug

Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...