1

我正在尝试通过 Telegram 中的秘密聊天(〜类似于自己的客户端)实现接收/发送消息,但在解释解密数据时遇到了一些问题。我已阅读架构,但无法将其与我的数据匹配。

更具体地说:我收到了一条带有“Test12”字样的消息(从官方客户端发送),解码结果(十六进制)是:

3C0000008917E31B0FF1C770B657C36AF705BDACA4BE2C0B2E0000000100000062000000DE91B0360000000038507C7CD5FA6F7C00 00000006 546573743132 00

我们可以在这里找到从 57 字节(粗体)和(如果我没记错的话)长度(斜体)开始的整个消息。但是我怎样才能匹配其他字节呢?在模式中说消息应该从 8 (salt) + 8 (session_id) + 8 (message_id) + 4 (seq_no) + 4 (message_data_length) = 32 字节开始,而不是从 57 字节开始。

此外,当我尝试发送更长的消息(超过〜256字节)时,“消息文本”从60字节开始,长度也编码有点奇怪:1024字节消息的FE000400和512字节的FE000200(什么FE 是什么意思?)。

那么,任何人都可以给我一个模式或我做错了什么的线索吗?

4

1 回答 1

3

好的,看来我设法解码了大部分消息。可能对某些人有用:

3C000000 “有价值的”字节数(如果需要,不包括在末尾用随机字节填充)

8917E31B(== 467867529),decryptedMessageLayer 第 17 层)的代码

0FF1C770B657C36AF705BDACA4BE2C0B 序列化随机字节数组(至少应包含 15 个字节),OF = 15 - 当前数量

2E000000 似乎是最小层数

01000000 in_seq_no, (1 - 1) / 2 = 0 收到消息,请参阅序列号

62000000 out_seq_no, 62 / 2 = 49 条消息已发送,请参阅序列号(消息发送者没有开始聊天)

DE91B036解密消息代码#36b091de

00000000 不知道

38507C7CD5FA6F7C 似乎是randomId(可能应该与传输的消息相同?)

00000000 不太清楚,可能是ttl

0654657374313200 序列化字符串:前两个字节 (06) 平均长度。如果超过 254,则改为放置 DE(=254),并且可以从接下来的 3 个字节中找到长度(在我的“提到”案例中从 60 位置开始)。字符串字节跟在(平均 Test12)之后,并用 0-3 个空字节 (00) 填充。

之后,用随机字节 (0-15) 填充结果以形成完整的 16 字节块。

于 2017-07-05T17:13:04.533 回答