protobuf协议逆向解析

protobuf协议逆向解析

地址:

aHR0cHM6Ly93d3cudGlrdG9rLmNvbS9tZXNzYWdlcz9sYW5nPWVu

找到接口/v2/message/get_by_user_init

如图所示, 参数和响应并不是可直接使用的, 虽然部分内容可读。
在这里插入图片描述

跟栈到这里, 找到封包前的数据

在这里插入图片描述

打上断点, 查看变量t就是请求参数, 经过encode封包为二进制数据后 发送请求

在这里插入图片描述

把变量对象t复制到一个json格式化的地方, 方便后续查看

在这里插入图片描述

// 接收一个 ArrayBuffer, 转为base64字符串
window.arrayBufferToBase64 = function(buffer) {
  let binary = '';
  const bytes = new Uint8Array(buffer);
  const len = bytes.byteLength;
  for (let i = 0; i < len; i++) {
    binary += String.fromCharCode(bytes[i]);
  }
  return window.btoa(binary);
}

在这里插入图片描述

把base64字符串复制到这里 => Protobuf Decoder (protobuf-decoder.netlify.app)

这是一个在线解析protobuf协议数据的网站, 如图

其实这里就可以还原数据结构了, 只是不知道这些字段的意义; 而刚刚的json数据就可以帮忙对比出它原本的字段名, 进而了解字段的大概意义.

在这里插入图片描述

下载protoc编译器, 注意下载对应的系统版本, 下载地址这里: https://github.com/protocolbuffers/protobuf/releases/latest

下载后解压把bin目录添加到系统环境中, 出现下面就算是成功了

在这里插入图片描述

然后开始准备构建.proto文件数据结构

在这里插入图片描述

就可以大概推出下面这个数据结构

有的实在找不到对应的变量名, 你任意取一个名字也不影响, 你能懂就好

数据类型参考这里的表: 语言指南 (proto 3) |协议缓冲区文档 (protobuf.dev)

在这里插入图片描述

然后这里使用的是python的betterproto库, 比官方的好用多了.

pip install betterproto

使用编译命令

protoc -I . --python_betterproto_out=lib example.proto # 生成类
  • protoc:这是 Protocol Buffers 编译器的命令行工具。
  • -I .:这个选项指定了编译器搜索 .proto 文件的目录。-I 表示“include”,后面的点(.)表示当前目录。所以,这个命令告诉 protoc 只在当前目录下查找 .proto 文件。
  • --python_betterproto_out=lib:这是编译器的一个输出选项,用于指定生成的代码应该放在哪个目录。--python_betterproto_out 是一个自定义的输出插件,它生成使用 betterproto 库的 Python 代码。betterproto 是一个用于处理 Protocol Buffers 的 Python 库,它提供了更现代的 API 和一些额外的功能。lib 表示生成的代码应该放在名为 lib 的目录中。
  • example.proto:这是要编译的 Protocol Buffers 定义文件的名称。

有其他问题看官方文档: danielgtaylor/python-betterproto: Clean, modern, Python 3.6+ code generator & library for Protobuf 3 and async gRPC (github.com)

会生成两个文件, 其中一个里面会有下面这个类, 另一个应该是空的, 不用管

在这里插入图片描述

万事具备, 测试一下是否可用

import base64

from . import GetByUserInitRequest  # 导入刚生成的类

base64_str = 'CMsBEJFOGgUxLjAuOSIAKAMwADofODY0MjQwZDpyZWxlYXNlLXdlYmFwcC0yMDI0MDQwOEIF2gwCCABKEzczNTcxODg0MDg3MjM1MDY3MThaA3dlYnoyCgdyZWZlcmVyEidodHRwczovL3d3dy50aWt0b2suY29tL21lc3NhZ2VzP2xhbmc9ZW56EgoKZnJvbV9hcHBJRBIEMTk4OHoSCgxhcHBfbGFuZ3VhZ2USAmVuehYKCGFwcF9uYW1lEgp0aWt0b2tfd2Vieg4KB2NoYW5uZWwSA3dlYnp9Cgp1c2VyX2FnZW50Em9Nb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI0LjAuMC4wIFNhZmFyaS81MzcuMzZ6gAEKEFdlYi1TZGstTXMtVG9rZW4SbGhsUU1XRERwRkhfRlZWSXZGVVpxbFBaMmJJUGlyclJvSFJxWmhpbGE0ajB2ZjVqajRnZVVXbVd5NjAzbXVqVUdjQTlfQzhQVXpNM01GT1JDYWoxajR0Xzl4MTNkVUJoMHd6T3BTLV9CN2NVPZABAQ=='

print(GetByUserInitRequest().parse(base64.b64decode(base64_str)).to_json(indent=2))

能正常解析出所有数据就没什么问题

在这里插入图片描述

PS: 前面断点没注意, 不是同一个url😂,(本想以get_by_user_init接口举例的, 但是断点那里的接口是get_by_user) 但是思路是这么个思路

有更好更方便的方法欢迎指导
在这里插入图片描述

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

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

相关文章

数字安全实操AG网址漏洞扫描原理与技术手段分析

在数字化世界的大舞台上&#xff0c;网络安全如同守护者一般&#xff0c;默默保卫着我们的虚拟疆界。当我们在享受互联网带来的便利时&#xff0c;一场无形的战争正在上演。黑客们利用各种手段试图攻破网站的安全防线&#xff0c;而防守方则依靠先进的技术和策略来抵御入侵。其…

武汉星起航:创新孵化模式,一站式服务助力卖家全球化拓展

在全球化浪潮席卷而来的今天&#xff0c;跨境电商行业已成为推动国际贸易的重要力量。武汉星起航电子商务有限公司&#xff0c;作为这一领域的佼佼者&#xff0c;以其前瞻性的战略眼光和创新的经营模式&#xff0c;积极践行“走出去”战略&#xff0c;凭借自营店铺运营经验和跨…

Golang | Leetcode Golang题解之第50题Pow(x,n)

题目&#xff1a; 题解&#xff1a; func myPow(x float64, n int) float64 {if n > 0 {return quickMul(x, n)}return 1.0 / quickMul(x, -n) }func quickMul(x float64, n int) float64 {if n 0 {return 1}y : quickMul(x, n/2)if n%2 0 {return y * y}return y * y * …

云赛道---深度学习

• 分析问题定位任务:首先定位问题&#xff0c;将实际问题转化为机器学习问题&#xff0c;需要什么样的 数据&#xff0c;然后进行数据的采集。包含数据探查、场景抽象、算法选择。比如逻辑回归可 以决定我们是不是能喝咖啡&#xff1b;那另外朴素贝叶斯算法可以用来区分垃圾…

Linux|Awk 变量、数字表达式和赋值运算符

引言 本部分[1]将深入学习 Awk 的高级应用&#xff0c;以应对更为复杂的文本或字符串过滤任务。将介绍包括变量、数值表达式和赋值运算符在内的 Awk 功能。 这些概念与你之前可能在诸如shell、C、Python等许多编程语言中接触过的概念并没有本质上的不同&#xff0c;所以你不必过…

SaaS云HIS平台源码 采用云部署模式,部署一套可支持多家医院共同使用

目录 云HIS门诊业务使用流程 云HIS住院业务使用流程 云HIS系统使用流程 云HIS优势 云HIS系统功能模块 医疗业务&#xff1a; 电子病历&#xff1a; 经济管理&#xff1a; 药物管理&#xff1a; 统计报表&#xff1a; 系统管理&#xff1a; 运营运维&#xff1a; 通…

NLP step by step -- 了解Transformer

Transformer模型 Transformer相关历史 首先我们先看一下有关Transformer模型的发展历史&#xff0c;下面的图是基于Transformer架构的一些关键模型节点&#xff1a; 图片来源于Hugging Face 图片来源于Hugging Face Transformer 架构 于 2017 年 6 月推出。原本研究的重点是…

deepin 亮相 Intel 合作伙伴交流会,展示AI大模型应用最新成果

内容来源&#xff1a;deepin 社区 2024 年 4 月 18 日&#xff0c;备受业界瞩目的 Intel Channel Partner Networking Fair 在香港天际万豪酒店隆重举办。 在这场行业盛会上&#xff0c;deepin&#xff08;深度&#xff09;受邀参与了 Intel Demo Showcase 环节&#xff0c;向…

JDBC查询大数据时怎么防止内存溢出-流式查询

文章目录 1.前言2.流式查询介绍3.使用流式查询3.1不开启流式查询的内存占用情况3.2开启流式查询的内存占用情况 4.开启流式查询的注意点 1.前言 在使用 JDBC 查询大数据时&#xff0c;由于 JDBC 默认将整个结果集加载到内存中&#xff0c;当查询结果集过大时&#xff0c;很容易…

python与pycharm如何设置文件夹为源代码根目录

相信大家遇到过下面这种情况 当我们在当前项目下引入了其它项目的代码&#xff0c;这是其它项目的包的导入路径是不用于当前项目的&#xff0c;这样导致项目无法正常起来&#xff0c;但是我们又不可能一个个文件去处理&#xff0c;这时可以用下面的方式解决 pycharm直接设置 …

Centos 5 的yum源

背景 有使用较老的Centos 5 系统内部安装软件无法正常报错&#xff0c;是由于系统叫老yum源存在问题 处理方法 更换下述yum源&#xff0c;可以将其他repo源文件备份移动到其他目录&#xff0c;添加下述源后重新测试 [C5.11-base] nameCentOS-5.11 baseurlhttp://vault.c…

非对称渐开线齿轮学习笔记分享

最近有小伙伴遇到了非对称渐开线齿轮的加工问题,花了些时间学习了解一下,下面是总结的学习笔记,有兴趣的朋友可以瞅瞅: 目录: 为什么要采用非对称? 非对称有什么优点? 非对称齿形如何加工? 非对称齿轮怎么测量? 非对称齿轮建模 为什么要采用非对称? 现在的传动要求…

【SSM进阶学习系列丨整合篇】Spring+SpringMVC+MyBatis 框架配置详解

文章目录 一、环境准备1.1、创建数据库和表1.2、导入框架依赖的jar包1.3、修改Maven的编译版本1.4、完善Maven目录1.5、编写项目需要的包1.6、编写实体、Mapper、Service 二、配置MyBatis环境2.1、配置mybatis的主配置文件2.2、编写映射文件2.3、测试环境是否正确 三、配置Spri…

streamlit data_editor学习之 LLM理论内存占用量计算器

streamlit data_editor学习之 LLM理论内存占用量计算器 一.效果二.代码三.运行命令四.参考链接 根据用户设置的LLM参数,计算设备内存的占用量。以web的形式方便共享,可以插入多条记录,表格更新后,可以动态计算结果 一.效果 二.代码 import streamlit as st #1.31.1 import cv…

【八股】Spring Boot

SpringBoot是如何实现自动装配的&#xff1f; 首先&#xff0c;SpringBoot的核心注解SpringBootApplication里面包含了三个注解&#xff0c;SpringBootConfigurationEnableAutoConfigurationComponentScan&#xff0c;其中EnableAutoConfiguration是实现自动装配的注解&#x…

如何最大程度使用AWS?

随着云计算技术的不断发展&#xff0c;AWS已经成为众多企业的首选&#xff0c;为其提供了强大的基础设施和服务。那么如何最大程度地、灵活地利用AWS&#xff0c;成为许多企业专注的焦点。九河云作为AWS的合作伙伴&#xff0c;为读者们提供一些技巧和策略&#xff0c;帮助读者充…

UL认证防逆流多功能监测装置AGF-AE-D

安科瑞薛瑶瑶18701709087/17343930412 在单逆变器系统中&#xff0c;仪表直接与逆变器相连。如果您的变频器有一个内置的收入等级表&#xff08;RGM&#xff1b;该变频器 被称为收入等级变频器&#xff09;&#xff0c;您可以在 RGM 的同一总线上连接一个外部仪表。

【React】Sigma.js框架网络图-入门篇(2)

通过《【React】Sigma.js框架网络图-入门篇》有了基本认识 由于上一篇直接给出了基本代码示例&#xff0c;可能看着比较复杂也不知道是啥意思&#xff1b; 今天从理论入手重新认识下&#xff01; 一、基本认识 首先&#xff0c;我们先了解下基础术语&#xff1a; 图(Graph)&…

波高仪:数字浪高仪解析

波高仪&#xff0c;也被称为数字浪高仪&#xff0c;是一种专门用于测量波浪高度的设备。它采用低功耗微处理器、24bit高精度AD转换器和长距离通信技术&#xff0c;配备电容式波高传感器&#xff0c;具有线性好、功耗低、量精度高、传输距离远、性能稳定、抗干扰能力强等特点。 …

vue中使用echarts实现X轴动态时间(天)的折线图表

项目要求x轴以一天为间隔&#xff0c;时间是动态返回的数据&#xff0c;折线图平滑展示 实现代码如下&#xff1a; <div class"echarts-main"><v-chart ref"echarts" :options"options" /> </div>// 局部引入vue-echarts im…
最新文章