找回密码
 立即注册
首页 业界区 安全 通过改变设备名将迈金的fit文件上传到黑鸟APP ...

通过改变设备名将迈金的fit文件上传到黑鸟APP

背竽 7 天前
通过改变设备名将迈金的fit文件上传到黑鸟APP

我们可以通过黑鸟网页端把来自其它码表的fit文件上传到黑鸟App.
黑鸟App的fit上传功能并不完善,来自迈金码表的fit文件在上传时会遇到导入失败的错误.
我们只要改变fit文件中的设备名和设备制造商,就可以把来自于迈金的fit文件伪装成来自佳明的fit文件, 从而骗过检测系统成功上传记录到黑鸟App.
有两种办法改变fit文件的设备名和设备制造商:
法1:
在 https://www.fitfiletools.com/#/top 中, 改变fit的device name. 经测试改为 edge500_china 后可以成功将迈金码表的fit文件上传到黑鸟App.
法2:
使用如下的python代码进行转换. 以下代码强制把fit文件的设备名设置成 gammin 1030.
使用时, 把如下的python代码保存成 change_name.py 放置在待转换的fit文件所在的文件夹中, 运行python chainge_name.py 即可.
[code]import structimport osimport fitparseimport globdef modify_fit_to_garmin_edge500(input_file, output_file):    """    将 FIT 文件的 manufacturer 和 garmin_product 修改为 Garmin Edge 500 China    """    # 读取原始 FIT 文件    fitfile = fitparse.FitFile(input_file)        # 打开原文件读取二进制数据    with open(input_file, 'rb') as f:        data = bytearray(f.read())        # 查找并修改 file_id 消息中的字段    for record in fitfile.get_messages('file_id'):        print("原始文件信息:")        for field in record:            print(f"  {field.name}: {field.value} (类型: {type(field.value)})")                        # 修改 manufacturer 字段 (1 = garmin)            if field.name == 'manufacturer':                old_val = get_field_numeric_value(field)                if old_val is not None and old_val != 1:                    print(f"修改 manufacturer: {old_val} -> 1 (garmin)")                    modify_field_in_binary(data, old_val, 1, 2)                        # 修改 garmin_product 字段 (1030 = edge500_china)            if field.name == 'garmin_product':                old_val = get_field_numeric_value(field)                if old_val is not None and old_val != 1030:                    print(f"修改 garmin_product: {old_val} -> 1030 (edge500_china)")                    modify_field_in_binary(data, old_val, 1030, 2)        # 重新计算 CRC 校验和    update_crc(data)        # 写入新文件    with open(output_file, 'wb') as f:        f.write(data)        print(f"已将 FIT 文件转换为 Garmin Edge 500 China: {output_file}")def get_field_numeric_value(field):    """    获取字段的数值,处理不同数据类型    """    if isinstance(field.value, int):        return field.value    elif isinstance(field.value, str):        # 如果是字符串,尝试从原始值获取        if hasattr(field, 'raw_value') and isinstance(field.raw_value, int):            return field.raw_value    return Nonedef modify_field_in_binary(data, old_value, new_value, field_size):    """    在二进制数据中查找并替换字段值    """    if not isinstance(old_value, int) or not isinstance(new_value, int):        print(f"  跳过非整数值: {old_value}")        return            if field_size == 2:        old_bytes = struct.pack('
您需要登录后才可以回帖 登录 | 立即注册