在Telegram中解析解密的encrypted_data

时间:2017-06-29 11:17:25

标签: telegram mtproto

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

更具体一点:我收到一条消息(从官方客户端发送),单词“Test12”,解码结果(十六进制)为:

3C0000008917E31B0FF1C770B657C36AF705BDACA4BE2C0B2E0000000100000062000000DE91B0360000000038507C7CD5FA6F7C00 00000006 546573743132 00

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

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

那么,任何人都可以给我一个关于我做错的图式或线索吗?

1 个答案:

答案 0 :(得分:2)

好吧,似乎我设法解码了大部分消息。可能对某些人有用:

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

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

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

2E000000似乎是最小层的数量

01000000 in_seq_no,(1 - 1)/ 2 =收到0条消息,请参阅Sequence numbers

62000000 out_seq_no,62/2 =已发送49封邮件,请参阅Sequence numbers(邮件发件人未启动该聊天)

DE91B036代码decryptedMessage#36b091de

<00> 00000000不知道

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

<00> 00000000真的不知道,可能是ttl

0654657374313200序列化字符串:前两个字节(06)的平均长度。如果超过254,则放置DE(= 254),并且可以从接下来的3个字节中找到长度(从我提到的'情况中的60位置开始)。字符串字节紧跟(表示Test12),并用0-3空字节(00)填充。

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