JustBB

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Telegram是如何识别设备型号的

    编程
    1
    1
    33
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • outrage
      outrage 版主 last edited by

      在Telegram账号登入新的设备的时候,会在旧设备的对话窗口中看到一条消息,提示有新的设备登入,比如我在使用Python实现的Telegram Media Downlaoder的时候,发现这一客户端被识别为CPython 3.8,我感到不安,因为这一标识和官方客户端不同,这一标记增加了风控风险。尽管我相信不滥用的情况下应当不会对帐号有太大风险,但是我还是希望尽可能模拟原始客户端。于是我开始寻找Telegram是如何识别客户端信息的。

      我观察Telegram Media Downlaoder的代码发现其中调用了pyrogram的库,这名字一看就感觉和telegram有关系,经过搜索发现这确实是一个python版本的telegram客户端库。由于在Telegram Media Downlaoder的代码中没有发现CPython相关的内容,于是我认为很可能是pyrogram透露了客户端信息。我直接打开了site-packages查看pyrogram的代码,找不到CPython相关的字符串。但是我知道CPython和版本号是运行时环境信息,与测试开始查找用于检测运行时环境信息的代码。首先是sys.version_info,这一信息不包含CPython,sys.version也不包含CPython,不过好在我认识到我应该搜索sys这一关键字,程序中调用sys的应该不多,而其中一定包含我想要的CPython信息。全局搜索sys发现在pyrogram的客户端构造方法中,有下面三行代码决定了登陆提示里边的设备信息:

          APP_VERSION = f"Pyrogram {__version__}"
          DEVICE_MODEL = f"{platform.python_implementation()} {platform.python_version()}"
          SYSTEM_VERSION = f"{platform.system()} {platform.release()}"
      

      第一行是App版本,是一个字面量;第二行是CPython3.8对应的信息;第三行是宿主机Winodws系统的信息。这三点结合起来基本能够覆盖登陆信息里的内容了。要修改登录信息只需要在构造pyrogram客户端的时候指定这三个参数就好:

              app_version: str = APP_VERSION,
              device_model: str = DEVICE_MODEL,
              system_version: str = SYSTEM_VERSION,
      

      另外,我使用的API_ID和API_HASH是直接从Telegram Web源代码里取得的,那么我应该将其模仿为web客户端。安卓、桌面客户端源代码里删除了API_ID和API_HASH,水池kdweb客户端开发者是不小心还是心态开放。

      1 Reply Last reply Reply Quote 0
      • First post
        Last post
      Powered by NodeBB | Contributors