CleveresTricky
CleveresTricky 是一个用于 Android keystore 和 attestation 兼容性的 KernelSU/APatch 模块。它提供应用范围的证书处理、keybox 管理、补丁级别控制、启动属性兼容性以及设备端 WebUI。
功能
| 功能 | 提供的内容 |
|---|---|
| 定向认证处理 | 仅对您选择的应用程序应用证书链替换,或在需要时启用全局模式。 |
| TEE 和 StrongBox 支持 | 支持真实的 Android KeyMint 密钥创建及后续的加密操作。 |
| 多密钥箱管理器 | 从 WebUI 加载、验证、选择、轮换和监控 EC/RSA 密钥箱。 |
| 加密 CBOX 存储 | 使用 AES-256-GCM 容器和加密本地缓存保护密钥箱文件。 |
| 完整的补丁级别控制 | 全局或按应用配置 OS、供应商和启动补丁级别,支持实时重载。 |
| 启动属性兼容性 | 针对常见的解锁/调试构建指标,提供可选的、有界的属性调整。 |
| PIF 友好共存 | 保持进程范围的指纹配置独立,而不是覆盖另一个模块的工作配置。 |
| RKP 透传 | 启用时,保持生成的密钥响应在 Android 真实的远程密钥配置路径上。 |
| DRM 应用透传 | 保持选定的流媒体/DRM 应用使用真实的密钥库证书路径。 |
| 安全 WebUI | 从模块 Action 按钮管理目标、密钥箱、配置文件、日志、加密备份和兼容性开关。 |
| 加固安装程序 | 验证每个打包的负载,阻止不支持的安装路径,并保持配置仅限 root 访问。 |
快速入门
- 下载发布版 ZIP。
- 打开 KernelSU 或 APatch 并选择 Install module。
- 选择 ZIP 并重启。
- 按下 CleveresTricky 的 Action 按钮以打开 WebUI。
- 添加已授权的 keybox,选择目标应用,并选择一个 profile。
- 在启用额外的兼容性选项之前,检查仪表板和日志。
未附带可用的 keybox 或私有证明密钥。仅使用您拥有或有权测试的密钥材料。
要求
| 组件 | 支持情况 |
|---|---|
| Android | 12–16 (API 31–36) |
| Root 管理器 | KernelSU 或 APatch |
| 架构 | arm64-v8a 或 x86_64 |
| 安装方式 | 在 Android 运行时使用 Root 管理器应用 |
| Magisk/recovery | 不支持;安装会停止,而不是留下部分模块 |
结果仍取决于实际设备状态、认证、固件、密钥材料、Google Play 服务以及服务器端策略。该模块改善了可用的兼容性路径,但无法保证在所有设备上获得特定的服务器判定。
推荐配置
| 配置文件 | 适用场景 | 主要行为 |
|---|---|---|
| Daily Compatibility | 全新安装 / 日常使用 | 定向替换、吊销检查、自动启动属性策略,启用 DRM 和 RKP 透传。 |
| Default | 保守配置 | 定向替换和吊销检查;关闭启动属性更改,开启 DRM/RKP 透传。 |
| Maximum Compatibility | 针对性测试 | 全局范围、身份刷新、电话和启动属性兼容性;禁用 DRM/RKP 透传。 |
| Minimal | 故障排除 | 关闭证书替换和主动欺骗功能;保持 DRM/RKP 透传开启。 |
从 Daily Compatibility 开始。如果某个厂商功能出现回归,请切换到 Default 或将 boot_props_mode 设置为 disable。由于 Maximum Compatibility 会故意更改最广泛的范围,因此仅用于短期、受控的测试。
WebUI 控件
Action 按钮会在设备的回环接口上打开一个经过令牌认证的 WebUI。它不会暴露给本地网络。
主要控件包括:
- 全局模式: 针对所有调用 UID,而不仅仅是
target.txt条目。 - 禁用证书替换: 无需卸载模块即可立即进入安全模式。
- 自动 Keybox 检查: 定期检查已加载的 keybox 和吊销状态。
- 启动时刷新身份: 刷新支持的证明/电信标识符。
- 电信标识符拦截: 可选的针对性电信处理;更改后建议重启。
- 隐藏敏感属性: 在下次启动时应用启动属性兼容集。
- RKP 直通: 保持生成的密钥响应不变,同时保留正常的现有密钥路径可用。
- DRM 应用直通: 将
drm_packages.txt中的包排除在证书替换之外。
RKP 和 DRM 直通在新安装时启用。它们是兼容性保障措施,而非模拟的 RKP 或 DRM 实现。
boot_props_mode 控制属性层:auto 跳过已知的重叠/厂商敏感设置,force 在启用隐藏敏感属性时应用它,而 disable 在不删除切换开关的情况下将其关闭。
如果您还使用进程范围的 PIF/Zygisk 模块,请让该模块拥有其指纹文件。CleveresTricky 不会下载公共指纹或覆盖外部 PIF 配置;其证明身份、补丁级别、keybox 和启动属性层继续独立工作。
配置
配置存储在 /data/adb/cleverestricky 中,权限仅限 root。WebUI 保存经过验证并原子写入。
目标应用
从 WebUI 编辑 target.txt:
com.google.android.gms
io.github.vvb2060.keyattestation
com.example.*
支持通配符。全局模式会忽略此列表,并针对所有 UID。
每个应用的身份和密钥箱
app_config 接受三列:
# package identity-template keybox-file
com.example.attestation pixel8pro test.xml
com.example.second null second.cbox
当不需要针对特定应用的覆盖时,使用 null。
安全补丁级别
security_patch.txt 可以设置所有三个认证补丁字段:
# Global defaults
system=YYYY-MM-05
vendor=device_default
boot=no
# Per-app override
[com.google.android.gms]
system=2025-10-01
支持的键:
system:操作系统补丁级别;vendor:供应商补丁级别;boot:启动/内核补丁级别;all:同时设置以上三项。
支持的值包括 YYYY-MM-DD、YYYYMMDD、YYYYMM、today、日期占位符、device_default、prop 和 no。device_default 保留证书的真实字段;prop 读取匹配的系统、供应商或启动镜像安全补丁属性;no 移除该字段。无效或过大的文件将被拒绝,且最后的有效配置保持激活状态。
旧的 package.name=date 语法仍受支持,用于操作系统补丁覆盖。
构建与证明身份
spoof_build_vars 仅包含模块实际使用的值:
TEMPLATE=pixel8pro
MANUFACTURER=Google
MODEL=Pixel 8 Pro
BRAND=google
PRODUCT=husky
DEVICE=husky
ATTESTATION_ID_SERIAL=ABC123XYZ789
与 Bootloader 相关的用户空间属性由 Hide Sensitive Props 控制,而不是通过在此文件中放置任意 ro.* 行。该文件仅接受模块支持的字段。
DRM 直通包
编辑 drm_packages.txt 以选择哪些应用保留真实的 keystore 路径:
com.netflix.mediaclient
com.amazon.avod.thirdpartyclient
com.example.video.*
在 DRM App Passthrough 处于禁用状态时,该列表不生效。
Keybox 管理器
CleveresTricky 接受:
/data/adb/cleverestricky/keybox.xml用于旧版配置;/data/adb/cleverestricky/keyboxes/下的 XML 文件;- 从 WebUI 上传的加密
.cbox文件; - 显式配置的 HTTPS 源。
在 keybox 激活之前,模块会检查其私钥/证书匹配情况、算法、链结构、有效期以及吊销状态。损坏或混合的池将被整体拒绝。如果无法检查吊销列表,新加载的材料将保持非活动状态。
建议将 CBOX 用于存储和传输。纯 XML 包含 root 可读的私钥材料,绝不应提交到 Git。
KernelSU 包布局
KernelSU 通过 module.prop 识别该模块。启动脚本、策略、Action 脚本以及其他模块文件按照 KernelSU 的文档包含在 ZIP 根目录中。
service.apk、inject 和 libcleverestricky.so 是构建输出。Gradle 为每个受支持的 ABI 编译它们,进行验证,并将它们与 SHA-256 文件一起放入发布 ZIP 中。module/template 包含受版本控制的脚本和配置模板。
KernelSU 不需要恢复风格的 META-INF/com/google/android/update-binary,并且由于不支持恢复和旧版 Magisk 安装,因此未包含在内。请参阅官方 KernelSU 模块指南。
故障排除
使用 WebUI 的 Logs 选项卡或运行:
logcat -s CleveresTricky
常见检查:
- 密钥箱未激活: 打开密钥箱,运行验证,并检查对吊销列表的网络访问。
- 属性更改后应用行为异常: 禁用隐藏敏感属性并重启。
- 密钥生成或配置出现回退: 启用 RKP 直通。
- 原生端点不可用: 禁用其他 ptrace/注入模块并检查 SELinux 日志。
- 篡改警告: 重新安装完整的 ZIP;负载或校验和缺失或已更改。
- 不确定哪个选项导致问题: 选择最小配置,重启,然后每次启用一个选项。
参见 LOG.md, CONTRIBUTING.md, LANGUAGES.md, 和 THEME.md。
构建
构建需要 JDK 21、Android SDK 36、Android NDK 27.3.13750724、Rust、rustup、cargo-ndk 以及已初始化的 Git 子模块。
git submodule update --init --recursive
./gradlew testDebugUnitTest ktlintCheck zipDebug
Release ZIP 在 module/release/ 中创建。CI 还会运行 Android lint、针对两种 ABI 的原生构建、Rust 格式化/Clippy/测试/审计、shell 验证、模块结构检查以及 ZIP 组装。
安全
- 将 WebUI 保持在回环地址上,切勿通过公共代理或隧道暴露。
- 在测试启动/属性更改之前,保留可恢复的备份。
- 仅使用已授权的关键材料。
- 在公开漏洞利用细节之前,私下报告漏洞。
Android 证明和 Play Integrity 可能独立于本项目发生变化。官方的 Android 证明文档、Play Integrity 判定文档 以及 KernelSU 模块指南 仍具有权威性。