8times4/smartglance-reverse-patch
GitHub: 8times4/smartglance-reverse-patch
这是一个通过逆向工程移除 SmartGlance 安卓应用厂商网络行为和后台传感器高频轮询的实验性离线 patch 脚本,旨在保护用户隐私并降低设备功耗。
Stars: 0 | Forks: 0
# SmartGlance 逆向 patch
用于 SmartGlance APK 的实验性 patch 脚本。
该脚本已在 SmartGlance `1.0.8` 上进行了测试。其他 SmartGlance 版本可能也可行,但混淆后的类名可能会在不同版本之间发生变化。在使用前,请重新验证每个打过 patch 的 APK。
已审查的示例 APK:
```
https://smart1.qinghui365.com/SmartGlance-v1.0.8-release.apk
```
在 repo 中:
```
SmartGlance-v1.0.8-release.apk
```
- 原始 APK SHA256:`447cb67f3c813118500df96cb8c6e8146aaec350074862d4c381a3a5250053b5`
## 为什么?
一位亲戚在 aliexpress 买了一个便宜的智能保护壳,我想确保他们能安全地使用它,而不会导致其数据被卖给任何人,或者该应用在暗中执行任何可疑操作。
## 修改内容
- 移除了 `INTERNET`。
- 移除了 `ACCESS_NETWORK_STATE`。
- 移除了 `REQUEST_INSTALL_PACKAGES`。
- 移除了 `HIGH_SAMPLING_RATE_SENSORS`。
- 设置了 `allowBackup=false`。
- 设置了 `usesCleartextTraffic=false`。
- 在 `versionName` 后附加了 `-offline`。
- 将应用名称重命名为 `SmartGlance Offline`。
- 将更新 UI 的字符串修改为离线版本的字符串。
- 使更新检查和更新下载的 coroutine 立即返回。
- 将厂商更新 base URL 替换为 `http://127.0.0.1/` 作为兜底。
- 将磁力传感器的轮询频率从最快速率降低到了 UI 速率。
- 默认禁用了静默循环 `MediaPlayer` 的 keepalive。
可选的 `--keep-media-keepalive` 标志会保留原有的静默 media keepalive。如果默认版本在手机闲置后停止响应,请使用该版本。
## 从 GitHub 安装
使用 GitHub Releases 下载公开的 APK。APK 二进制文件应放在 release assets 中,而不是 repo 历史记录中。
推荐的 APK:
[SmartGlance-v1.0.8-release-offline-patched.apk](https://github.com/8times4/smartglance-reverse-patch/releases/download/v1.0.8-offline/SmartGlance-v1.0.8-release-offline-patched.apk)
备用 APK,仅适用于推荐版本在后台停止响应的手机:
[SmartGlance-v1.0.8-release-offline-media-keepalive.apk](https://github.com/8times4/smartglance-reverse-patch/releases/download/v1.0.8-offline/SmartGlance-v1.0.8-release-offline-media-keepalive.apk)
Release 页面:
https://github.com/8times4/smartglance-reverse-patch/releases/tag/v1.0.8-offline
手机安装步骤:
1. 在手机上打开最新的 GitHub release。
2. 下载上面推荐的 APK。
3. 卸载厂商的 SmartGlance 应用(如果已安装)。
4. 打开下载的 APK。
5. 如果 Android 提示,请允许“安装未知应用”。
6. 安装并打开 `SmartGlance Offline`。
维护者发布检查清单:
```
smartglance-reverse-patch/patch_smartglance_offline.sh \
smartglance-reverse-patch/SmartGlance-v1.0.8-release.apk
smartglance-reverse-patch/patch_smartglance_offline.sh --keep-media-keepalive \
smartglance-reverse-patch/SmartGlance-v1.0.8-release.apk \
smartglance-reverse-patch/dist/SmartGlance-v1.0.8-release-offline-media-keepalive.apk
shasum -a 256 smartglance-reverse-patch/dist/*.apk
```
将 `dist/` 中的两个 APK 附加到 GitHub release 中。将 SHA256 值写入 release notes 中。
## 环境要求
- `apktool`
- 带有 `zipalign` 和 `apksigner` 的 Android SDK build-tools
- `keytool`
在 macOS 上:
```
brew install apktool
export ANDROID_HOME="$HOME/Library/Android/sdk"
```
## 构建
默认离线版本:
```
smartglance-reverse-patch/patch_smartglance_offline.sh \
smartglance-reverse-patch/SmartGlance-v1.0.8-release.apk
```
输出:
```
smartglance-reverse-patch/dist/-offline-patched.apk
```
保留静默 media keepalive:
```
smartglance-reverse-patch/patch_smartglance_offline.sh --keep-media-keepalive \
smartglance-reverse-patch/SmartGlance-v1.0.8-release.apk \
smartglance-reverse-patch/dist/SmartGlance-v1.0.8-release-offline-media-keepalive.apk
```
脚本使用此本地 debug key 进行签名:
```
~/.android/smartglance-offline-debug.keystore
```
Android 会将打过 patch 的 APK 视为与厂商 APK 不同的签名者。在安装打过 patch 的版本之前,请先卸载由厂商签名的应用。
## 使用 adb 安装
```
adb uninstall vip.wexiang.SmartGlance
adb install smartglance-reverse-patch/dist/SmartGlance-v1.0.8-release-offline-patched.apk
```
## 验证
检查已移除的权限:
```
BUILD_TOOLS=$(find "${ANDROID_HOME:-$HOME/Library/Android/sdk}/build-tools" -mindepth 1 -maxdepth 1 -type d | sort | tail -n 1)
"$BUILD_TOOLS/aapt2" dump permissions \
smartglance-reverse-patch/dist/SmartGlance-v1.0.8-release-offline-patched.apk
```
预期缺失的权限:
```
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.HIGH_SAMPLING_RATE_SENSORS
```
检查启动:
```
adb logcat -c
adb shell monkey -p vip.wexiang.SmartGlance -c android.intent.category.LAUNCHER 1
sleep 5
adb shell pidof vip.wexiang.SmartGlance
adb logcat -d | grep -Ei 'FATAL EXCEPTION|missing INTERNET|product\.expcover'
```
预期结果:`pidof` 会打印一个进程 ID,而 grep 什么都不打印。
## NFC 测试
Android 模拟器不足以测试 NFC 流程。该应用使用 `NfcAdapter.enableReaderMode`,并期望真实的 `NfcA` tag 或保护壳。
```
adb logcat -c
adb shell am start -n vip.wexiang.SmartGlance/vip.wexiang.ui.MainActivity
adb logcat | grep -Ei 'vip.wexiang|enableReaderMode|NFC|读取|校验|设备|数据|activated'
```
正常表现:
```
enableReaderMode
读取数据
校验设备,匹配
```
异常表现:
```
密码不匹配
数据不合法
设备不匹配
```
硬件 NFC 模拟需要 Proxmark3、Chameleon、PN532 或类似设备,并将其配置为带有密码认证的兼容 `NfcA` 或 Type-2 tag。使用真实的保护壳更简单。
## 研究笔记
静态、动态、MobSF、Ghidra RPC、NFC 和 patch 相关笔记位于:
```
smartglance-reverse-patch/research/
```
标签:Android, APK补丁, Cutter, DSL, 云资产清单, 权限控制, 网络安全, 逆向工程, 隐私保护