【问题标题】:Telegram: get fileid from telegram client电报:从电报客户端获取文件ID
【发布时间】:2017-05-10 15:58:29
【问题描述】:

Telegram 机器人使用fileid 下载文件。我怎样才能从 Telegram 客户端(我的非官方版本)获得这个 fileidmtproto 中的文件有 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


【解决方案1】:

这是机器人 API 文件 ID 的 TL 方案:https://github.com/danog/MadelineProto/blob/master/src/danog/MadelineProto/TL_botAPI.tl

我已经在 MadelineProto 中实现了 bot API 文件 id 转换:您基本上必须对文件 id 进行 base64decode,将它们通过基于空字节的 RLE 解码器,然后使用给定的 TL 方案对其进行解码。 请参阅 TL/Conversion/BotAPI* 以了解 MessageMedia 对象在序列化之前如何转换为 File 对象。

我设法使用special MTProto bot I built using the same lib 对文件 ID 进行了逆向工程(我忘了在这里搜索 xd)。

【讨论】:

  • 请在此处发布您的逆向工程结果摘要,这样比共享 php 代码更有帮助
猜你喜欢
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
相关资源
最近更新 更多