类型-长度-值(TLV)协议

在数据通信协议中,可选的信息或字段通常使用type-length-value(a.k.a TLV)元素来进行编码。

  • Type - 类型

用来标示字段类型的值,通常是一个二进制值或简单的字母

  • Length - 长度

字段长度,单位通常为Byte

  • Value - 值

一个变长的比特数组用来存储这个字段的值

优势

  • TLV序列方便遍历查找
  • 新的字段可以无痛的加入现有的协议中。解析的时候,对于未知的字段,可以轻松的跳过。这点与XML类似
  • TLV元素的顺序可以是随意的
  • TLV元素通常使用二进制存储,可以使解析速度加快并且使数据更小
  • TLV可以与XML数据相互转换,易于人类阅读

例子

在这里,我们以protobuf的可选和变长字段为例。

field_number ++ wire_type

每一个protobuf的字段在传输时,都会加上field_numberwire_type这两个值,这两个值组成这个字段的key。

key = (field_number << 3) | wire_type

field_number标明了字段的编号,方便协议向前向后的兼容。而 …

more ...

破解节操的下限

啥?

节操精选

节操精选是一个没有下限的文字图片聚合类移动应用,现在支持Android/iOS移动平台。

界面

本人是一个非常懒的人,有电脑就不想碰手机。。。于是萌生了一个在PC端使用这个应用的想法。。。

HowTo

从界面上我们可以看出,这个App的逻辑其实比较简单。重要的部分有如下几个:

  • 获取CS通信协议(最重要)

  • 频道间切换(精选 - 热门 - 音频- 阅读)

  • 展示某一条精选

  • 在某一条精选中播放语音

获取通信协议

节操还是非常良心的!并没有在后台数据通信中进行任何加密的措施。

抓包工具我使用的是在Windows环境下的Fiddler

这个工具可以建立一个HTTP代理,手机通过代理上网,在电脑上就可以截获所有的数据包进行分析。

在Linux下,可以使用TinyProxy + Wireshark进行抓包,不过配置小麻烦。不过我一直是在Windows下抓包,然后在Linux下做分析和开发的。=。=。。。

图就不上了,如果大家有兴趣自己来搞的话,可以抓来试试。

简而言之,我们从HTTP包中的Content-type字段中,发现了我们想要的信息 —— application/xprotobuf

我去!真良心~

Protobuf简介 …

more ...