笔记 misc tiny_traffic

这篇博客介绍了Misc挑战tiny_traffic的解决过程,涉及序列化、反序列化概念,重点讲解了Protocol Buffers的使用。通过分析文件格式,使用Brotli转换和Protocol Buffers的protobuf编译工具,最终解密得到了flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

misc tiny_traffic

第一道misc就遇到难题了(主要菜(lll¬ω¬))

因为是题需要的知识先写前面了。

序列化

  • 序列化: 将 数据结构或对象 转换成 二进制串 的过程
  • 反序列化:将在序列化过程中所生成的二进制串 转换成 数据结构或者对象 的过程

java里有序列化的详细解释,其中定义的数据类型与Java的对象 类 包的定义都非常相似,因此可以参考Java来学习

而序列化在Java则需要类 ObjectInputStream 和 ObjectOutputStream 是高层次的数据流,它们包含反序列化和序列化对象的方法。

(后来研究的半天Java的序列化发现还是不会咋反,主要的Java没学就囫囵了解基础知识,没深入学习,然后发现protocol buffer 反序列 其实支持多项语言的 就用了熟悉的python了,说到底就是不知道序列化是啥,吃了大亏/(ㄒoㄒ)/~~)

但在本次题目中,看到的用不同的序列化工具 protocol buffer(协议缓冲)

里面也需要到包 类相似的数据类型 message则是最具标志性的数据项。

因为protocol buffer是一种结构化数据存储格式,所以稍微了解了下

什么是结构化数据?

其中分为结构化数据 非结构化数据 半结构化数据

我比较喜欢简单点解释

  • 信息能够用数据或统一的结构加以表示,称之为结构化数据;
  • 信息无法用数字或统一的结构表示,称之为非结构化数据。

结构化数据就是已经是固定而不能更改的数据,就是具有模型的数据,结构就是模型,基于结构化模型。

非结构化一般指无法结构化的数据,如图片 文件视频……

半结构化数据比较有意思,首先它的数据是有结构的,但却不方便模式化,有可能因为描述不标准,有可能因为描述有伸缩性,总之不能模式化。XML和json表示的数据就有半模式的特点。

其实用半模式化的视角看待数据是非常合理的。没有模式的限定,数据可以自由地流入系统,还可以自由的更新。这更便于客观的描述事物。在使用时模式才应该起作用,使用者想获取数据就应当构建需要的模式来检索数据。由于不同的使用者构建不同的模式,数据将最大化的被利用。这才是最自然的使用数据的方式。(这看了知乎的解释,忘了是谁的,直接复制了,有知道的可以告诉我,我标注下,或侵权删)

Protocol buffer 一般用于数据存储 、RPC数据交换,因为他的传输速度比一般的xml josn还要快 使用的空间也小,么么在其中知道什么使RPC数据交换,它和三次握手很像但也没它复杂 应该和udp很像 区别于 rpc会不断请求响应,放在另一页了

Protocol buffer的解释我放另一页了 这个大佬解释的真的好详细 我看的好喜欢!!

附上:Carson带你学序列化:这是一份很有诚意的 Protocol Buffer 语法详解_Carson带你学Android的博客-优快云博客

现在才开始进入主题

下载附件是tinny traffic的文件 看看协议分级、追踪流、搜flag都没用

然后看看字节分组 导出http文件 可以看到有个flag-wrapper的gzip 和br文件(要是不知道可以把其他都导出来,发现都是空的)

然后先打开写着flag的文件(解压就好) 这里我直接文本打开 就是个答案头

接着打开br文件,我现场上网搜了好久……

发现了有个能打开br文件的软件(然而并没有什么卵用,free file viewer pro 这个号称可以打开任何文件 😓),没用,继续搜,从犄角旮旯发现

--2015年9月, Google就已经在官方博客上发布了新的压缩算法Brotli, 自安卓8.1起,谷歌改变了镜像压缩格式,system.new.dat变成了system.new.dat.br。如果要提取官方ROM里的资源就需要先将system.new.dat.br转成system.new.dat,再转为成system.img,再解包system.img提取。

这一段神奇的 没学习过的知识 可能就是你了 然后下载 brotli执行文件先将text.br和serect.br装换成text.new.dat和serect文件。这里打开文本会发现只有text转换成下面的代码文件,serect没有变化。

接上,因为我们没有.list文件并且打开dat文件一看写着“proto3”

码:

syntax = "proto3";

message PBResponse {

  int32 code = 1;

  int64 flag_part_convert_to_hex_plz = 2;

  message data {

    string junk_data = 2;

    string flag_part = 1;

  }

  repeated data dataList = 3;

  int32 flag_part_plz_convert_to_hex = 4;

  string flag_last_part = 5;

}

message PBRequest {

  string cate_id = 1;

  int32 page = 2;

  int32 pageSize = 3;

}

 搜索知是protocol buffer结构化数据存储格式并且要把它序列化转换 就可以得到flag(搜索引擎的强大)

 将text.new.dat改为.protoc在protoc.exe编译下得到test_pb2.py

 然后用这个对secret进行反序列化,把test_pb2.py和反序列化代码放在一个文件夹,反序列化代码如下(为什么会这么做 我估计dalao们都是靠经验做出来了,我搜不到有其他的解释了,如果有知道的请告诉 我,我也想知道):

code: 200

flag_part_convert_to_hex_plz: 15100450

dataList {

  flag_part: "e2345"

  junk_data: "7af2c"

}

dataList {

  flag_part: "7889b0"

  junk_data: "82bc0"

}

flag_part_plz_convert_to_hex: 16453958

flag_last_part: "d172a38dc"

根据代码知十六进制转换下得到:

hex(15100450) + "e2345" + "7889b0" + hex(16453958) + "d172a38dc"

CISCN{e66a22e23457889b0fb1146d172a38dc}

参考了 2021 信息安全竞赛初赛部分 Writeup - F5's Notebook

侵权删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值