mimotion源码解析:核心组件aes_help.py与zepp_helper.py工作原理
2026/8/15 18:58:26 网站建设 项目流程

mimotion源码解析:核心组件aes_help.py与zepp_helper.py工作原理

【免费下载链接】mimotion小米运动刷步数(微信支付宝)支持邮箱登录项目地址: https://gitcode.com/gh_mirrors/mimo/mimotion

mimotion(GitHub 加速计划)是一个支持邮箱登录的小米运动刷步数工具,能够同步数据到微信和支付宝。本文将深入解析其核心组件aes_help.pyzepp_helper.py的工作原理,帮助开发者理解数据加密与API交互的实现细节。

一、AES加密模块:aes_help.py的核心功能

aes_help.py是项目的加密基础模块,提供了AES-128 CBC模式的加密和解密功能,专为与小米运动服务器通信设计。

1.1 固定密钥与向量定义

模块开头定义了华米传输加密使用的固定密钥和IV(初始化向量):

HM_AES_KEY = b'xeNtBVqzDc6tuNTh' # 16 bytes HM_AES_IV = b'MAAAYAAAAAAAAABg' # 16 bytes

这些参数来自华米API的公开规范,确保与官方服务器的加密方式兼容。

1.2 核心加密流程

encrypt_data函数实现了完整的加密逻辑:

  • 支持随机IV(自动生成)和固定IV两种模式
  • 使用PKCS#7填充方式处理数据对齐
  • 返回格式为"IV + 密文"(随机IV模式)或仅密文(固定IV模式)

关键代码片段:

def encrypt_data(plain: bytes, key: bytes, iv: bytes | None = None) -> bytes: _validate_key(key) if iv is None: # 使用随机IV iv = get_random_bytes(AES_BLOCK_SIZE) cipher = AES.new(key, AES.MODE_CBC, iv) padded = _pkcs7_pad(plain) ciphertext = cipher.encrypt(padded) return iv + ciphertext else: # 使用固定IV cipher = AES.new(key, AES.MODE_CBC, iv) padded = _pkcs7_pad(plain) return cipher.encrypt(padded)

1.3 数据编解码辅助函数

模块还提供了Base64编解码工具:

  • bytes_to_base64: 将字节数据转换为Base64字符串
  • base64_to_bytes: 将Base64字符串还原为字节数据

这些函数在处理API请求参数和响应数据时不可或缺。

二、API交互模块:zepp_helper.py的工作机制

zepp_helper.py负责与小米运动(Zepp)服务器进行通信,实现登录认证和步数修改功能,是项目的业务核心。

2.1 登录认证流程

登录过程分为三个关键步骤:

  1. 获取access_token:通过login_access_token函数提交加密的用户凭据

    def login_access_token(user, password) -> (str | None, str | None): # 构建加密请求 plaintext = urllib.parse.urlencode(login_data).encode('utf-8') cipher_data = encrypt_data(plaintext, HM_AES_KEY, HM_AES_IV) # 发送POST请求并处理重定向 r1 = requests.post(url1, data=cipher_data, headers=headers, allow_redirects=False)
  2. 获取登录令牌:使用grant_login_tokens函数交换login_token和app_token

  3. 令牌验证与续期:通过check_app_token验证令牌有效性,renew_login_token实现令牌续期

2.2 步数修改的实现

post_fake_brand_data函数是修改步数的核心:

  • 构建包含目标步数的加密数据 payload
  • 使用正则表达式动态替换日期和步数参数
  • 通过API提交修改请求

关键代码:

def post_fake_brand_data(step, app_token, userid): # 动态替换日期和步数 data_json = re.sub(find_date.findall(data_json)[0], today, str(data_json)) data_json = re.sub(find_step.findall(data_json)[0], step, str(data_json)) # 发送修改请求 response = requests.post(url, data=data, headers=head)

三、组件协作关系

两个模块通过以下方式协同工作:

  1. 依赖关系zepp_helper.py通过from util.aes_help import encrypt_data直接依赖加密功能
  2. 数据流向
    • 用户凭据 →aes_help.encrypt_data加密 →zepp_helper发送登录请求
    • 服务器响应 →aes_help.decrypt_data解密 →zepp_helper解析处理
  3. 安全保障:AES加密确保所有敏感数据在传输过程中得到保护

四、关键文件路径

  • 加密模块:util/aes_help.py
  • API交互模块:util/zepp_helper.py
  • 主程序入口:main.py

五、使用建议

  1. 安全注意事项

    • 不要修改HM_AES_KEYHM_AES_IV常量
    • 敏感凭据应通过环境变量或配置文件管理
  2. 功能扩展

    • 可基于aes_help.py实现更多加密场景
    • 通过zepp_helper.py的函数封装扩展更多API调用

通过理解这两个核心组件的工作原理,开发者可以更好地维护和扩展mimotion项目的功能,同时确保与小米运动服务器的通信安全可靠。

【免费下载链接】mimotion小米运动刷步数(微信支付宝)支持邮箱登录项目地址: https://gitcode.com/gh_mirrors/mimo/mimotion

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询