【发布时间】:2017-05-10 15:58:29
【问题描述】:
Telegram 机器人使用fileid 下载文件。我怎样才能从 Telegram 客户端(我的非官方版本)获得这个 fileid? mtproto 中的文件有 this location class 表示它们的地址。
文件位置参数
- dc_id int 保存文件的数据中心编号
- volume_id 长服务器音量
- local_id int 文件 ID
- 秘密长校验和以访问文件
问题是我不知道如何生成适用于来自File Location 类的机器人的fileid。
更新 1:
我尝试做一些逆向工程。所以,我发现File Location 类和FileId 之间存在某种关系。
这是我的File Location 示例地址。
- id:
0// 此字段仅适用于私密聊天 - access_hash:
0// 此字段仅适用于秘密聊天 - volume_id:
429640340(199BCA94 HEX) - secret:
-3528741004939935589(CF0764C08833409B HEX) // 根据 TG 文档,它应该是文件 CheckSum - local_id:
6005(1775 HEX)
这是我根据 FileID 从我的 Bot 检索到的前 FileLocation 类:
- 文件 ID:
AgADBAADL6gxG06L8w0nhNO87UW3iZTKmxkABJtAM4jAZAfPdRcAAgI
很明显FileID的值是Base64的格式。所以我已经解码了:
- 十六进制值:
0200030400032FA8311B4E8BF30D2784D3BCED45B78994CA9B1900049B403388C06407CF7517000202
现在我们可以在这个十六进制值中看到FileLocation 值:
- 未知:
0200030400032FA8311B4E8BF30D2784D3BCED45B789 - VolumeId:
94CA9B19 HEX - 未知:
0004 - 秘密:
9B403388C06407CF HEX - local_id:
7517 Hex - 未知:
000202
注意:这些值以Big-Endian 格式存储。
现在我们需要解码Unknown 值。我感谢任何有助于解码这些值的努力。
【问题讨论】:
-
Telegram-API 的
PhotoSize.location和 Bot-API 的PhotoSize.file_id似乎没有关系
标签: android reverse-engineering telegram telegram-bot mtproto