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, 应用安全, 物联网, 端口探测, 设备配置, 逆向工具