【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;
}

在这里插入图片描述

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

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

相关文章

ML 系列:第 21 节 — 离散概率分布(二项分布)

一、说明 二项分布描述了在固定数量的独立伯努利试验中一定数量的成功的概率&#xff0c;其中每个试验只有两种可能的结果&#xff08;通常标记为成功和失败&#xff09;。 二、探讨伯努利模型 例如&#xff0c;假设您正在抛一枚公平的硬币 &#xff08;其中正面成功&#xff…

【模拟集成电路】知识点笔记_1

知识点笔记_1 零极点相关1 PM和GM相关概念2零极点 温度系数五种常见噪声源MOS管和BJT选取BJT刨面图工艺角衬底主要噪声来源共模反馈三种常用CMFB1 工作在线性区MOS作为CMFB&#xff08;匹配决定输出电压&#xff09;2 电阻反馈&#xff08;Buf&#xff09;3 电流差分对&#xf…

资产管理:SpringBoot框架的高效解决方案

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

Redis - 集群(Cluster)

一、基本概念 上述的哨兵模式,提⾼了系统的可⽤性.但是真正⽤来存储数据的还是master和slave节点.所有的数 据都需要存储在单个master和slave节点中. 如果数据量很⼤,接近超出了master/slave所在机器的物理内存,就可能出现严重问题了. 如何获取更⼤的空间?加机器即可!所谓&q…

基于springboot的高校科研管理系统(源码+调试+LW)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据你想解决的问题&#xff0c;今天给…

pwn学习笔记(11)--off_by_one

pwn学习笔记&#xff08;11&#xff09;–off_by_one ​ 在处理for循环或者while循环的时候&#xff0c;有的可能会遇到如下情况&#xff1a; #include<stdio.h>int main(){char buf[0x10];for (int i 0 ; i < 0x10 ; i ){buf[i] getchar();}puts(buf);}​ 多次输…

YOLOv8模型改进 第十九讲 添加倒置残差移动块iRMB(Inverted Residual Mobile Block,) 去除图像噪声

本文这次分享的是倒置残差移动块iRMB&#xff0c;iRMB&#xff08;Inverted Residual Mobile Block&#xff09;的作用主要是在神经网络中实现高效的特征提取&#xff0c;它融合了卷积神经网络&#xff08;CNN&#xff09;捕捉局部特征的高效性和 Transformer 动态建模长距离交…

express项目中使用MySQL

一、安装mysql 模块 1.1 先配置包管理工具 npm init -y1.2、安装mysql 模块 npm install mysql2二、配置mysql // 1、导入mysql模块 const mysql require("mysql2");// 2、建立与mysql 数据库的链接 const db mysql.createPool({host: "127.0.0.1", …

泛微E9 OA与金蝶云的差旅费报销接口集成

FD001-差旅费报销申请 泛微>金蝶--498 集成案例分享 在企业日常运营中&#xff0c;差旅费报销申请的处理效率直接影响到员工满意度和财务管理的精确性。为了实现泛微OA-Http系统与金蝶云星空平台之间的数据无缝对接&#xff0c;我们设计并实施了FD001-差旅费报销申请集成方…

新疆高校大数据实验室案例分享

高校大数据实验室建设&#xff0c;企业可以提供技术支持、实训平台和项目案例&#xff0c;高校则提供科研和教学资源&#xff0c;实现产学研一体化。不仅有利于大数据技术的应用和人才培养也有利于区域发展。 泰迪与新疆合作的院校包括新疆大学、昌吉学院等 新疆大…

11.9.2024刷华为

文章目录 HJ31 单词倒排HJ32 密码提取语法知识记录 傻逼OD题目又不全又要收费&#xff0c;看毛线&#xff0c;莫名奇妙 HW这叼机构别搁这儿害人得不得&#xff1f; 我觉得我刷完原来的题目 过一遍华为机考的ED卷出处&#xff0c;就行了 HJ31 单词倒排 游戏本做过了好像 HJ3…

C语言--结构体的大小与内存对齐,位段详解

一.前言 为了保证文章的质量和长度&#xff0c;小编将会分两篇介绍&#xff0c;思维导图如下&#xff0c;上篇已经讲过了概念部分&#xff0c;本文主要讲解剩余部分&#xff0c;希望大家有所收获&#x1f339;&#x1f339; 二.结构体的大小与内存对齐 2.1 存在对齐的原因 平…

腾讯混元3D模型Hunyuan3D-1.0部署与推理优化指南

腾讯混元3D模型Hunyuan3D-1.0部署与推理优化指南 摘要&#xff1a; 本文将详细介绍如何部署腾讯混元3D模型Hunyuan3D-1.0&#xff0c;并针对不同硬件配置提供优化的推理方案。我们将探讨如何在有限的GPU内存下&#xff0c;通过调整配置来优化模型的推理性能。 1. 项目概览 腾…

第18篇 :深入剖析systemverilog中 randomize 失败案例启示录(二)

今天我们继续修改之前的例子&#xff0c;你会有意想不到的收获。程序源代码&#xff0c;和上一节文章一样。 症状3&#xff1a; 这里&#xff0c;我们没有显式调用类的randomize() 函数&#xff0c;而是定义了一个类函数。在函数中 &#xff0c;重新约束了类内的随机变量。请…

CC音乐 1.0 | 纯净版音乐软件,内置3条音源,支持无损和母带下载

CC音乐是一款全新上架的第三方音乐软件&#xff0c;界面纯净简洁且无广告。内置三条音源接口&#xff0c;用户可以畅听全网音乐。软件涵盖了电台、排行榜、歌单分类、视频、歌手等多个栏目&#xff0c;即使是会员和灰色歌曲也能随意畅听。此外&#xff0c;CC音乐还支持下载无损…

【销帮帮-注册_登录安全分析报告-试用页面存在安全隐患】

联通支付注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨…

windows中docker安装redis和redisinsight记录

创建一个Redis运行容器&#xff0c;命令如下 docker run -it -d --name redis -p 6379:6379 redis --bind 0.0.0.0 --protected-mode no -d 代表Redis容器后台运行 --name redis 给创建好的容器起名叫redis -p 6379:6379 将容器的6379端口映射到宿主机的6379端口&#xff0c;注…

问题排查:C++ exception with description “getrandom“ thrown in the test body

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 MotivationProcess Motivation 最近在做一个复杂系统集成到 Bazel 的工作。 在编译…

C++中类的默认成员函数

默认成员函数 1.构造函数2.析构函数3.拷贝构造函数4.赋值运算符重载4.1运算符重载4.2赋值运算符重载 #mermaid-svg-oipiwg9stvONvYK0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-oipiwg9stvONvYK0 .error-icon{f…

从0开始学习机器学习--Day20--优化算法的思路

确定执行的优先级(Prioritizing what to work on : Spam classification example) 在建立学习系统前&#xff0c;我们不仅要梳理框架&#xff0c;更重要的是我们要弄清楚有哪些事情是要优先做的&#xff0c;这可以帮我们节约大量的时间。 以垃圾邮件为例&#xff0c;按照之前…