angristan/lametric-time

GitHub: angristan/lametric-time

一套 Linux 命令行脚本工具,通过 Wi-Fi 设置模式的本地 HTTP API 完成对 LaMetric TIME 智能时钟的恢复与网络配置,替代无法连接的移动应用。

Stars: 0 | Forks: 0

# LaMetric TIME 恢复工具包 在移动应用无法连接时,通过 Linux 为 LaMetric TIME 进行配置。 有效的途径是使用 Wi-Fi 设置模式:时钟会广播一个临时的 AP,暴露出一个本地的 HTTP 设置 API,接受账户绑定和目标 Wi-Fi 设置,然后加入配置好的网络。 USB 会作为 gadget/mass-storage 设备显示,并且 Bluetooth 也是可发现的,但在配置过程中这两者都不是必需的。 ## 工作原理 核心组件: - Linux 脚本:加入设置 AP,调用设置 API,并随后恢复 Wi-Fi。 - LaMetric 云端:将账户登录转换为账户 API key,并报告设备 IP。 - 时钟设置 AP:`172.18.17.1`,在设置模式下接受 `/api/v1/setup/*` 调用。 - 目标局域网:配置成功后时钟所在的网络。 - 本地设备 API:`http://DEVICE_IP:8080` 或 `https://DEVICE_IP:4343`。 - Android APK:提供了隐藏的设置 endpoint、payload 字段和状态码的来源。 ## 设置流程 1. 登录 `developer.lametric.com` 或提供 `LAMETRIC_ACCOUNT_API_KEY`。 2. 从配置好的 Wi-Fi 接口加入时钟设置 AP。 3. `PUT /api/v1/setup/account` 4. `PUT /api/v1/setup/wifi` 5. 轮询 `GET /api/v1/setup/status`,直到状态变为 `2`、`3` 或出现错误码。 6. `PUT /api/v1/setup/confirm` 7. 查询云端设备列表以获取时钟 IP。 8. 使用 `http://DEVICE_IP:8080/api/v2/device` 或 HTTPS `:4343` 端口的本地 API。 ## 环境要求 - 带有 NetworkManager 的 Linux - `curl`、`jq`、`nmcli`、`rg`、`ip`、`python3` - 当 Wi-Fi 接口临时连接到时钟 AP 时,需要一个可用的互联网路由 ## 配置 从示例环境文件开始: ``` cd ~/src/lametric-time cp .env.example .env chmod 600 .env $EDITOR .env set -a . ./.env set +a ``` 最小配置值: ``` LAMETRIC_SETUP_AP='LM1234' LAMETRIC_WIFI_SSID='YOUR_WIFI_SSID' LAMETRIC_WIFI_PASSWORD='YOUR_WIFI_PASSWORD' LAMETRIC_ACCOUNT_EMAIL='you@example.com' LAMETRIC_ACCOUNT_PASSWORD='YOUR_LAMETRIC_PASSWORD' ``` 如果值需要来自其他工具,请使用命令钩子(command hooks): ``` LAMETRIC_ACCOUNT_EMAIL_CMD='your-email-command' LAMETRIC_ACCOUNT_PASSWORD_CMD='your-password-command' LAMETRIC_WIFI_PASSWORD_CMD='your-wifi-password-command' ``` 你也可以绕过账户登录: ``` LAMETRIC_ACCOUNT_API_KEY='ACCOUNT_API_KEY' LAMETRIC_ACCOUNT_API_KEY_CMD='your-account-api-key-command' ``` 常见的可选设置: ``` LAMETRIC_IFACE='wlan0' LAMETRIC_RESTORE_WIFI_CONNECTION='Your Normal Wi-Fi' LAMETRIC_TZ='Europe/Paris' LAMETRIC_LOCALE='en_US' ``` ## 配置设备 加载 `.env` 后: ``` ./scripts/provision.sh ``` 或者内联执行: ``` LAMETRIC_ACCOUNT_EMAIL_CMD='your-email-command' \ LAMETRIC_ACCOUNT_PASSWORD_CMD='your-password-command' \ LAMETRIC_WIFI_PASSWORD_CMD='your-wifi-password-command' \ ./scripts/provision.sh \ --setup-ap LM1234 \ --ssid YOUR_WIFI_SSID \ --restore-wifi 'Your Normal Wi-Fi' ``` 实用的参数标志: ``` --setup-ap NAME setup AP broadcast by the clock, for example LM1234 --ssid SSID target Wi-Fi SSID --restore-wifi NAME NetworkManager connection to restore after setup --iface IFACE Wi-Fi interface to move onto the setup AP --timezone TZ time zone sent to the clock --locale LOCALE locale sent to the clock --no-restore leave Wi-Fi as-is after the script exits ``` ## 实用命令 读取设置状态: ``` ./scripts/setup-status.sh --connect --setup-ap LM1234 ``` 扫描时钟可见的 Wi-Fi 网络: ``` ./scripts/wifi-list.sh --connect --setup-ap LM1234 ``` 注册后读取本地设备信息: ``` ./scripts/device-info.sh --serial DEVICE_SERIAL ``` 如果你已经知道时钟 IP: ``` ./scripts/device-info.sh --ip DEVICE_IP ``` 如果你已经有了设备 API key: ``` LAMETRIC_DEVICE_API_KEY='DEVICE_API_KEY' ./scripts/device-info.sh --ip DEVICE_IP ``` ## 认证与 Endpoint ``` Cloud login email/password -> account API key Setup API Basic user: Cloud device list Basic user: Local device API Basic dev: ``` 设置 API 基础地址: ``` http://172.18.17.1/api/v1 ``` 配置 Endpoint: ``` PUT /setup/account PUT /setup/wifi GET /setup/status PUT /setup/confirm ``` 其他实用的设置 Endpoint: ``` POST /setup/ping PUT /setup/cancel GET /wifi GET /wifi/list ``` 账户 endpoint 是 `/setup/account`,而不是 `/setup/user`。 观察到的本地设备 API 基础地址: ``` http://DEVICE_IP:8080 https://DEVICE_IP:4343 ``` ## 状态码 ``` 0 not connecting 1 connecting 2 connected 3 registered 10 invalid Wi-Fi credentials 11 failed to obtain IP 12 unknown Wi-Fi error 20 no internet 30 server error 31 auth server error 32 SSL error ``` ## APK 注意事项 APK 非常有用,因为公共文档没有描述设置 AP API。通过检查它,我们获取了移动应用所使用的 endpoint 名称、请求 payload 字段、认证行为和状态含义。 已检查的 APK: ``` LaMetric-Time-2.10.4-com.smartatoms.lametric.apk SHA256: 0f11dd80c1c8fe0b1e97646530e58429d7feee1d12d8242320945604d8810679 Source: https://lametric-time.en.aptoide.com/app ``` 相关的类: ``` Lcom/smartatoms/lametric/client/LaMetric$i; setup client Lcom/smartatoms/lametric/client/LaMetricWeb$Device; cloud device client Lcom/smartatoms/lametric/client/c; Basic auth helper Lcom/smartatoms/lametric/model/device/DeviceInfoWifi; Wi-Fi payload model Lcom/smartatoms/lametric/model/device/DeviceAccount; setup account payload model Lcom/smartatoms/lametric/model/device/SetupStatus; setup status model ``` 有用的发现: - 设置账户 endpoint:`/api/v1/setup/account` - 设置 Wi-Fi endpoint:`/api/v1/setup/wifi` - 设置状态 endpoint:`/api/v1/setup/status` - 设置确认 endpoint:`/api/v1/setup/confirm` - 设置认证:`user:` - 本地 API 认证:`dev:` - Wi-Fi payload 字段:`mode`、`essid`、`hidden`、`encryption`、`password` - 账户 payload 字段:`api_key`、`time`、`locale`、`time_zone_id`、`time_zone_offset` - 上面列出的状态码含义 - 更正:是 `/setup/account`,而不是 `/setup/user` 检查 DEX: ``` python3 tools/dex_scan.py extracted/classes3.dex --pattern 'setup|wifi|api/v1' python3 tools/dex_fields.py extracted/classes3.dex 'Lcom/smartatoms/lametric/model/device/SetupStatus;' python3 tools/dex_dump_method.py extracted/classes3.dex 'Lcom/smartatoms/lametric/client/LaMetric$i;' '*' ``` ## 参考 - https://lametric-documentation.readthedocs.io/en/latest/reference-docs/device-authorization.html - https://help.lametric.com/support/solutions/articles/6000005944-configuration - https://lametric-time.en.aptoide.com/app
标签:Linux工具, Shell脚本, Wi-Fi, 应用安全, 物联网, 端口探测, 设备配置, 逆向工具