2016-12-26 20 views
14

Telegramy używają pliku fileid, aby pobrać plik. Jak mogę uzyskać ten fileid od klienta Telegram (moja nieoficjalna wersja)? Pliki w mtproto mają this location class, które wskazują ich adres.Telegram: pobierz plik fileid z klienta telegramu

Położenie pliku Parametry

  • dc_id int numer centrum danych trzymając plik
  • volume_id długo Server objętość
  • local_id int ID pliku
  • tajny długo kontrolna dostępu do pliku

Problem polega na tym, że nie wiem, jak do generowania fileid, który jest odpowiedni dla botów z File Location klasie.

UPDATE 1:

Próbowałem zrobić reverse engineering. Tak więc odkryłem, że istnieje pewna zależność między klasą File Location a FileId.

To jest mój adres File Locationprzykładowy.

  • id: 0 // To pole jest dostępne tylko dla tajnych rozmowach
  • access_hash: 0 // To pole jest dostępne tylko dla tajnych rozmowach
  • volume_id: 429640340 (199BCA94 HEX)
  • sekret: -3528741004939935589 (CF0764C08833409B HEX) // zgodnie z dokumentacją TG należy złożyć plik CheckSum
  • local_id: 6005 (1775 HEX)

a to mój zgodnie FileID do dawnego FileLocation klasie, że pobierane z mojego bot:

  • fileid: AgADBAADL6gxG06L8w0nhNO87UW3iZTKmxkABJtAM4jAZAfPdRcAAgI

Jest oczywiste, że FileID wartość jest w formacie Base64 .Więc ja dekodowane go:

  • HEX Wartość: 0200030400032FA8311B4E8BF30D2784D3BCED45B78994CA9B1900049B403388C06407CF7517000202

Teraz widzimy wartości FileLocation w tej wartości hex:

  • nieznane: 0200030400032FA8311B4E8BF30D2784D3BCED45B789
  • VolumeId: 94CA9B19 HEX
  • Nieznany: 0004
  • Tajny: 9B403388C06407CF HEX
  • local_id: 7517 Hex
  • nieznane: 000202

UWAGA: Wartości są zapisywane w formacie Big-Endian.

Teraz musimy zdekodować wartości Unknown. Doceniam każdy wysiłek, który pomaga odszyfrować te wartości.

+0

Wygląda na to, że nie ma żadnego związku między 'PhotoSize.location' z Telegram-API i' PhotoSize.file_id' z Bot-API –

Odpowiedz

1

Oto schemat TL dla botów identyfikatorów plików API: https://github.com/danog/MadelineProto/blob/master/src/danog/MadelineProto/TL_botAPI.tl

I wprowadziły bot plików API konwersji identyfikator MadelineProto: w zasadzie trzeba base64decode identyfikatory plików, przekazać je za pośrednictwem dekodera RLE na podstawie NUL, a następnie dekodować je za pomocą podanego schematu TL. Zobacz TL/Conversion/BotAPI *, aby zobaczyć, jak konwertowane są obiekty MessageMedia na obiekty File przed serializacją.

Udało mi się odtworzyć pliki identyfikacyjne plików (zapomniałem wyszukać tutaj xd) przy użyciu tego special MTProto bot I built using the same lib.