【Steam登录】protobuf协议逆向

https://api.steampowered.com/IAuthenticationService/GetPasswordRSAPublicKey/v1

搜索 input_protobuf_encoded定位

input_protobuf_encoded的值就是 o
s = r.SerializeBody()
o = i.iI(s)
精准定位

打上条件断点:t == ‘Authentication.GetPasswordRSAPublicKey#1’
r是对象o里面包含了账号


经过序列化方法之后得到
Uint8Array [10, 11, 119, 101, 105, 119, 117, 120, 105, 97, 110, 52, 55]
进入r.SerializeBody



新建account.proto文件
定义proto结构
syntax = "proto3";package account;message Account {string account_name = 1;
}
然后执行命令:
protoc --python_betterproto_out=. account.proto
import base64
from account import Account# 创建并序列化 Account 对象
account1 = Account(account_name='weiwuxian47')
print(f"原始对象: {account1}") # 序列化为二进制数据
data = account1.SerializeToString()
print(f"序列化后数据: {data}")# 将二进制数据进行 Base64 编码
encoded_data = base64.b64encode(data).decode('utf-8')
print(f"Base64 编码后数据: {encoded_data}")

JS代码实现
// 导入编译文件
const proto = require('./account_pb');// 实例化 Account 类并填充基本信息
const account = new proto.Account();
account.setAccountName("weiwuxian47");// 打印原始对象
console.log("原始对象:", account);// 序列化为二进制数据
const data = account.serializeBinary();
console.log('==================================================');
console.log("序列化后数据:", data);var o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split('');
function M(e, t, n) {for (var r, a, p = [], i = t; i < n; i += 3)r = (e[i] << 16 & 16711680) + (e[i + 1] << 8 & 65280) + (255 & e[i + 2]),p.push(o[(a = r) >> 18 & 63] + o[a >> 12 & 63] + o[a >> 6 & 63] + o[63 & a]);return p.join("")
}
function iI(e) {for (var t, n = e.length, r = n % 3, a = [], p = 16383, i = 0, b = n - r; i < b; i += p)a.push(M(e, i, i + p > b ? b : i + p));1 === r ? (t = e[n - 1],a.push(o[t >> 2] + o[t << 4 & 63] + "==")) : 2 === r && (t = (e[n - 2] << 8) + e[n - 1],a.push(o[t >> 10] + o[t >> 4 & 63] + o[t << 2 & 63] + "="));return a.join("")
}// data = new Uint8Array([10, 11, 119, 101, 105, 119, 117, 120, 105, 97, 110, 52, 55])
console.log(iI(data)); // 得到结果 Cgt3ZWl3dXhpYW40Nw==


和js代码对比一下
响应解密


到这里c已经序列化完成了

方法一:在c之前分析




然后一直下一步就到了proto结构定义这里

方法二:在c之后分析

此时c已经序列化完成
然后下一步下一步

很明显 t.Body().toObject() 就反序列了

然后下一步下一步就到了这里proto结构定义
我们要的就是这个
syntax = "proto3";package response;message PublicKeyInfo {// 公钥模数,字符串类型string publickey_mod = 1;// 公钥指数,字符串类型string publickey_exp = 2;// 时间戳,64位整数类型uint64 timestamp = 3;
}

相关文章:
【Steam登录】protobuf协议逆向
https://api.steampowered.com/IAuthenticationService/GetPasswordRSAPublicKey/v1 搜索 input_protobuf_encoded定位 input_protobuf_encoded的值就是 o s r.SerializeBody() o i.iI(s) 精准定位 打上条件断点:t ‘Authentication.GetPasswordRSAPublicKey…...
git 对已提交的说明进行编辑
如果提交代码的时候,对上次提交代码的说明不准确的话,例如 1、可以使用 git log 查看代码提交的记录; 2、使用 git commit --amend 命令对上次提交的说明进行编辑: 当显示上次提交的内容的时候,按下键盘 i 键即可编辑…...
CTF —— 网络安全大赛
前言 💻随着大数据、人工智能的发展,人们步入了新的时代,逐渐走上科技的巅峰。 ⚔科技是一把双刃剑,网络安全不容忽视,人们的隐私在大数据面前暴露无遗,账户被盗、资金损失、网络诈骗、隐私泄露ÿ…...
【大数据测试spark+kafka-详细教程(附带实例)】
大数据测试:Spark Kafka 实时数据处理与窗口计算教程 1. 概述1.1 大数据技术概述1.2 Apache Kafka 与 Spark 的结合 2. 技术原理与流程2.1 Kafka 简介2.2 Spark Streaming 简介2.3 数据流动与处理流程 3. 环境配置3.1 安装依赖项 4. 实例:实时数据处理与…...
如何为 GitHub 和 Gitee 项目配置不同的 Git 用户信息20241105
🎯 如何为 GitHub 和 Gitee 项目配置不同的 Git 用户信息 引言 在多个代码托管平台(如 GitHub 和 Gitee)之间切换时,正确管理用户信息至关重要。频繁使用不同项目时,若用户配置不当,可能会导致意外提交或…...
【Lucene】原理学习路线
基于《Lucene原理与代码分析完整版》,借助chatgpt等大模型,制定了一个系统学习Lucene原理的计划,并将每个阶段的学习内容组织成专栏文章,zero2hero 手搓 Lucene的核心概念和实现细节。 深入的学习和专栏计划,覆盖Lucen…...
Go语言的并发安全与互斥锁
线程通讯 在程序中不可避免的出现并发或者并行,一般来说对于一个程序大多数是遵循开发语言的启动顺序。例如,对于go语言来说,一般入口为main,main中依次导入import导入的包,并按顺序执行init方法,之后在按…...
SpringBoot框架在资产管理中的应用
3系统分析 3.1可行性分析 通过对本企业资产管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本企业资产管理系统采用Spring Boot框架,JAVA作…...
ElasticSearch备考 -- 集群配置常见问题
一、集群开启xpack安全配置后无法启动 在配置文件中增加 xpack.security.enabled: true 后无法启动,日志中提示如下 Transport SSL must be enabled if security is enabled. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security b…...
【UE5】一种老派的假反射做法,可以用于移动端,或对反射的速度、清晰度有需求的地方
没想到大家这篇文章呼声还挺高 这篇文章是对它的详细实现,建议在阅读本篇之前,先浏览一下前面的文章,以便更好地理解和掌握内容。 这种老派的假反射技术,适合用于移动端或对反射效果的速度和清晰度有较高要求的场合。该技术通过一…...
FasterNet中Pconv的实现、效果与作用分析
发表时间:2023年3月7日 论文地址:https://arxiv.org/abs/2303.03667 项目地址:https://github.com/JierunChen/FasterNet FasterNet-t0在GPU、CPU和ARM处理器上分别比MobileViT-XXS快2.8、3.3和2.4,而准确率要高2.9%。我们的大型…...
QToolbar工具栏下拉菜单不弹出有小箭头
这里说了怎么弹出:Qt 工具栏QToolBar添加带有弹出菜单的QAction_qt如何将action添加到工具栏-CSDN博客 然后如果你是在UI里面建立的action,并拖到了toolbar,并在代码中设置菜单,例如: ui->mytoolbar->setMenu(…...
w025基于SpringBoot网上超市的设计与实现
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文件࿰…...
深度学习在推荐系统中的应用
参考自《深度学习推荐系统》,用于学习和记录。 前言 (1)与传统的机器学习模型相比,深度学习模型的表达能力更强,能够挖掘(2)深度学习的模型结构非常灵活,能够根据业务场景和数据特…...
软考系统架构设计师论文:论面向对象的建模及应用
试题三 论面向对象的建模及应用 软件系统建模是软件开发中的重要环节,通过构建软件系统模型可以帮助系统开发人员理解系统、抽取业务过程和管理系统的复杂性,也可以方便各类人员之间的交流。软件系统建模是在系统需求分析和系统实现之间架起的一座桥梁,系统开发人员按照软件…...
LSM-TREE和SSTable
一、什么是LSM-TREE LSM Tree 是一种高效的写优化数据结构,专门用于处理大量写入操作 在一些写多读少的场景,为了加快写磁盘的速度,提出使用日志文件追加顺序写,加快写的速度,减少随机读写。但是日志文件只能遍历查询…...
mysql 升级
# 备份数据库数据 mysqldump -u root -p --single-transaction --all-databases > backup20240830.sql; # 备份mysql数据目录: cp -r /data/mysql mysql20240902 # 备份mysql配置文件my.cnf cp -r /etc/my.cnf my.cnf20240902 systemctl stop mysqld tar -x…...
基于Multisim定时器倒计时器电路0-999计时计数(含仿真和报告)
【全套资料.zip】定时器倒计时器电路Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.0-999秒定时功能,计时间隔1秒,数字显示。 2. 进行0-999秒减计时,…...
力扣11.5
1035. 不相交的线 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足: nums1[i] nums2[j]且绘制的直线不与任何其他连线(非…...
arkUI:层叠布局(Stack)
arkUI:层叠布局(Stack) 1 主要内容说明2 相关内容2.1 层叠布局(Stack)2.1.1 源码1的相关说明2.1.2 源码1 (层叠布局)2.1.3 源码1运行效果2.1.3.1 当alignContent: Alignment.Bottom2.1.3.2 当al…...
别再混淆了!深入对比Vivado中AXI DMA IP核与PS端DMA控制器的角色与分工
深入解析Vivado中AXI DMA与PS端DMA控制器的协同设计 在Zynq/MPSoC平台的软硬件协同开发中,数据搬运效率往往成为系统性能的瓶颈。许多开发者虽然能够熟练使用Vivado中的AXI DMA IP核完成基本数据传输,却对PL端AXI DMA与PS端DMA控制器之间的分工协作机制存…...
避免Java Stream重复消费:高效过滤Map的策略
本文旨在解决Java Stream在多过滤场景中常见的IllegalStatexception,即流被重复消耗的问题。我们将深入讨论Java Stream的单次使用特性,通过将外部过滤条件转换为集合,优化Map的过滤操作,提供高效、符合最佳实践的解决方案&#x…...
OpenClaw效率对比:GLM-4.7-Flash与云端API实测数据
OpenClaw效率对比:GLM-4.7-Flash与云端API实测数据 1. 测试背景与动机 上周在优化个人自动化工作流时,我遇到了一个实际选择难题:应该用本地部署的GLM-4.7-Flash模型,还是继续使用云端API服务?这个问题看似简单&…...
feishu2md:飞书文档转Markdown的技术实现与架构解析
feishu2md:飞书文档转Markdown的技术实现与架构解析 【免费下载链接】feishu2md 一键命令下载飞书文档为 Markdown 项目地址: https://gitcode.com/gh_mirrors/fe/feishu2md 飞书文档转Markdown工具feishu2md为技术团队提供了文档格式转换的标准化解决方案。…...
DIFY vs LangChain:零代码与全代码AI开发框架实战对比(附真实案例)
DIFY vs LangChain:零代码与全代码AI开发框架实战对比(附真实案例) 当企业或开发者希望将大语言模型(LLM)能力整合到业务中时,选择适合的开发框架至关重要。DIFY和LangChain代表了两种截然不同的技术路线&a…...
Windows音频捕获新方案:实现进程级精准录音的技术实践
Windows音频捕获新方案:实现进程级精准录音的技术实践 【免费下载链接】win-capture-audio An OBS plugin that allows capture of independant application audio streams on Windows, in a similar fashion to OBSs game capture and Discords application stream…...
终极指南:如何让2007年旧Mac运行最新macOS系统
终极指南:如何让2007年旧Mac运行最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为那台陪伴多年的老Mac无法升级最新系统而烦恼吗࿱…...
小白友好!FunASR语音识别镜像部署教程,开箱即用
小白友好!FunASR语音识别镜像部署教程,开箱即用 1. 快速了解FunASR语音识别 FunASR是由阿里云推出的开源语音识别工具包,它就像是一个能听懂人说话的智能助手。想象一下,你对着手机说话,它能立刻把你说的话变成文字—…...
SDMatte在电商场景落地:商品主图自动去背景+透明PNG生成完整工作流
SDMatte在电商场景落地:商品主图自动去背景透明PNG生成完整工作流 1. 电商场景中的图像处理痛点 在电商运营中,商品主图的质量直接影响转化率。传统处理方式面临三大难题: 人工成本高:专业设计师处理一张图平均耗时15-30分钟边…...
SDMatte高可用集群部署:基于Kubernetes的弹性伸缩方案
SDMatte高可用集群部署:基于Kubernetes的弹性伸缩方案 1. 为什么需要高可用部署方案 电商大促期间,某美妆品牌突然发现他们的AI抠图服务崩溃了——每秒上千张的商品图等待处理,但单机部署的服务早已不堪重负。这种场景在企业级AI应用部署中…...
